From abc5e375f137aad3be49de224bf48bc7965ff177 Mon Sep 17 00:00:00 2001 From: bastianeicher Date: Thu, 18 Jul 2024 15:24:55 +0000 Subject: [PATCH] deploy: ba82ce302e277b1410d6faf36d41d3c31b90a59e --- .nojekyll | 0 CNAME | 1 + ...eroInstall.Archives.BuilderExtensions.html | 289 + ...tall.Archives.Builders.ArchiveBuilder.html | 378 + ...all.Archives.Builders.IArchiveBuilder.html | 164 + ...oInstall.Archives.Builders.TarBuilder.html | 452 + ...stall.Archives.Builders.TarBz2Builder.html | 242 + ...nstall.Archives.Builders.TarGzBuilder.html | 242 + ...tall.Archives.Builders.TarLzipBuilder.html | 239 + ...Archives.Builders.TarZstandardBuilder.html | 270 + ...oInstall.Archives.Builders.ZipBuilder.html | 443 + api/ZeroInstall.Archives.Builders.html | 168 + ....Archives.Extractors.ArchiveExtractor.html | 552 + ...tall.Archives.Extractors.CabExtractor.html | 306 + ...tall.Archives.Extractors.DmgExtractor.html | 306 + ...Archives.Extractors.IArchiveExtractor.html | 236 + ...tall.Archives.Extractors.MsiExtractor.html | 306 + ...tall.Archives.Extractors.RarExtractor.html | 300 + ....Archives.Extractors.RubyGemExtractor.html | 308 + ...Archives.Extractors.SevenZipExtractor.html | 300 + ...l.Archives.Extractors.TarBz2Extractor.html | 307 + ...tall.Archives.Extractors.TarExtractor.html | 377 + ...ll.Archives.Extractors.TarGzExtractor.html | 313 + ....Archives.Extractors.TarLzipExtractor.html | 307 + ....Archives.Extractors.TarLzmaExtractor.html | 307 + ...ll.Archives.Extractors.TarXzExtractor.html | 307 + ...ives.Extractors.TarZstandardExtractor.html | 307 + ...tall.Archives.Extractors.ZipExtractor.html | 390 + api/ZeroInstall.Archives.Extractors.html | 208 + ...Install.Archives.ImplementationServer.html | 334 + api/ZeroInstall.Archives.html | 151 + ...ZeroInstall.Client.IZeroInstallClient.html | 765 + ...lient.TemporarilyUnavailableException.html | 244 + api/ZeroInstall.Client.ZeroInstallClient.html | 915 + api/ZeroInstall.Client.html | 144 + api/ZeroInstall.Commands.Basic.AddFeed.html | 452 + ...l.Commands.Basic.AddRemoveFeedCommand.html | 558 + ...ZeroInstall.Commands.Basic.CatalogMan.html | 414 + api/ZeroInstall.Commands.Basic.Configure.html | 541 + ...Install.Commands.Basic.DefaultCommand.html | 507 + api/ZeroInstall.Commands.Basic.Digest.html | 570 + api/ZeroInstall.Commands.Basic.Download.html | 750 + api/ZeroInstall.Commands.Basic.Export.html | 648 + ...ZeroInstall.Commands.Basic.ExportHelp.html | 540 + ...all.Commands.Basic.Exporters.Exporter.html | 413 + ...ands.Basic.Exporters.HelpExporterBase.html | 456 + ...ands.Basic.Exporters.HtmlHelpExporter.html | 422 + api/ZeroInstall.Commands.Basic.Exporters.html | 140 + api/ZeroInstall.Commands.Basic.Fetch.html | 541 + api/ZeroInstall.Commands.Basic.Import.html | 546 + api/ZeroInstall.Commands.Basic.List.html | 546 + api/ZeroInstall.Commands.Basic.ListFeeds.html | 569 + ...ZeroInstall.Commands.Basic.RemoveFeed.html | 452 + api/ZeroInstall.Commands.Basic.Run.html | 621 + api/ZeroInstall.Commands.Basic.Search.html | 540 + api/ZeroInstall.Commands.Basic.Selection.html | 981 + ...roInstall.Commands.Basic.StoreMan.Add.html | 554 + ...Install.Commands.Basic.StoreMan.Audit.html | 525 + ...oInstall.Commands.Basic.StoreMan.Copy.html | 583 + ...nstall.Commands.Basic.StoreMan.Export.html | 583 + ...oInstall.Commands.Basic.StoreMan.Find.html | 583 + ...oInstall.Commands.Basic.StoreMan.List.html | 554 + ...ds.Basic.StoreMan.ListImplementations.html | 584 + ...tall.Commands.Basic.StoreMan.Optimise.html | 555 + ...Install.Commands.Basic.StoreMan.Purge.html | 525 + ...nstall.Commands.Basic.StoreMan.Remove.html | 554 + ...Install.Commands.Basic.StoreMan.Serve.html | 554 + ...mmands.Basic.StoreMan.StoreSubCommand.html | 492 + ...nstall.Commands.Basic.StoreMan.Verify.html | 583 + api/ZeroInstall.Commands.Basic.StoreMan.html | 414 + ...roInstall.Commands.Basic.TrustMan.Add.html | 583 + ...oInstall.Commands.Basic.TrustMan.List.html | 554 + ...nstall.Commands.Basic.TrustMan.Remove.html | 583 + ...mmands.Basic.TrustMan.TrustSubCommand.html | 453 + api/ZeroInstall.Commands.Basic.TrustMan.html | 414 + api/ZeroInstall.Commands.Basic.Update.html | 553 + api/ZeroInstall.Commands.Basic.html | 302 + api/ZeroInstall.Commands.CliCommand.html | 1124 + ...eroInstall.Commands.CliCommandHandler.html | 488 + api/ZeroInstall.Commands.CliMultiCommand.html | 650 + ...ZeroInstall.Commands.Desktop.AddAlias.html | 551 + api/ZeroInstall.Commands.Desktop.AddApp.html | 582 + ...roInstall.Commands.Desktop.AppCommand.html | 638 + api/ZeroInstall.Commands.Desktop.Central.html | 541 + ...roInstall.Commands.Desktop.ImportApps.html | 583 + ...Install.Commands.Desktop.IntegrateApp.html | 590 + ...l.Commands.Desktop.IntegrationCommand.html | 550 + ...ZeroInstall.Commands.Desktop.ListApps.html | 541 + ...nstall.Commands.Desktop.RemoveAllApps.html | 583 + ...eroInstall.Commands.Desktop.RemoveApp.html | 552 + ...roInstall.Commands.Desktop.RepairApps.html | 583 + ...oInstall.Commands.Desktop.Self.Deploy.html | 549 + ...oInstall.Commands.Desktop.Self.Remove.html | 591 + ...nds.Desktop.Self.RemoveSubCommandBase.html | 477 + ....Commands.Desktop.Self.SelfSubCommand.html | 383 + ...oInstall.Commands.Desktop.Self.Update.html | 669 + api/ZeroInstall.Commands.Desktop.Self.html | 444 + ...oInstall.Commands.Desktop.SelfManager.html | 428 + ...ZeroInstall.Commands.Desktop.SyncApps.html | 554 + ...roInstall.Commands.Desktop.UpdateApps.html | 584 + api/ZeroInstall.Commands.Desktop.html | 223 + ...Commands.EnvironmentBuilderExtensions.html | 218 + api/ZeroInstall.Commands.ExitCode.html | 190 + api/ZeroInstall.Commands.ICliSubCommand.html | 181 + api/ZeroInstall.Commands.ICommandHandler.html | 454 + ...eroInstall.Commands.NeedsGuiException.html | 315 + api/ZeroInstall.Commands.ProgramUtils.html | 366 + ...Install.Commands.Properties.Resources.html | 7767 +++ api/ZeroInstall.Commands.Properties.html | 127 + api/ZeroInstall.Commands.ScopedOperation.html | 498 + ...mmands.UnsuitableInstallBaseException.html | 383 + ...oInstall.Commands.ZeroInstallInstance.html | 378 + api/ZeroInstall.Commands.html | 211 + ...pIntegration.AccessPoints.AccessPoint.html | 404 + ...egration.AccessPoints.AccessPointList.html | 453 + ...ktopIntegration.AccessPoints.AppAlias.html | 666 + ...ktopIntegration.AccessPoints.AutoPlay.html | 635 + ...topIntegration.AccessPoints.AutoStart.html | 636 + ...n.AccessPoints.CapabilityRegistration.html | 685 + ...ation.AccessPoints.CommandAccessPoint.html | 553 + ...pIntegration.AccessPoints.ContextMenu.html | 635 + ...ation.AccessPoints.DefaultAccessPoint.html | 526 + ...tegration.AccessPoints.DefaultProgram.html | 635 + ...pIntegration.AccessPoints.DesktopIcon.html | 667 + ...ktopIntegration.AccessPoints.FileType.html | 635 + ...egration.AccessPoints.IconAccessPoint.html | 239 + ...topIntegration.AccessPoints.MenuEntry.html | 703 + ...egration.AccessPoints.MockAccessPoint.html | 761 + ...pIntegration.AccessPoints.QuickLaunch.html | 603 + ...esktopIntegration.AccessPoints.SendTo.html | 637 + ...pIntegration.AccessPoints.UrlProtocol.html | 635 + ...stall.DesktopIntegration.AccessPoints.html | 215 + ...roInstall.DesktopIntegration.AppEntry.html | 806 + ...eroInstall.DesktopIntegration.AppList.html | 932 + ...sktopIntegration.CapabilityExtensions.html | 220 + ...ntegration.CategoryIntegrationManager.html | 490 + ...stall.DesktopIntegration.ConflictData.html | 288 + ....DesktopIntegration.ConflictDataUtils.html | 322 + ....DesktopIntegration.ConflictException.html | 467 + ...tegration.ICategoryIntegrationManager.html | 285 + ...esktopIntegration.IIntegrationManager.html | 595 + ...Install.DesktopIntegration.IconStores.html | 279 + ...DesktopIntegration.IntegrationManager.html | 906 + ...topIntegration.IntegrationManagerBase.html | 1160 + ...eroInstall.DesktopIntegration.Suggest.html | 366 + ...topIntegration.SyncIntegrationManager.html | 451 + ....DesktopIntegration.SyncRaceException.html | 260 + ...tall.DesktopIntegration.SyncResetMode.html | 157 + ...tall.DesktopIntegration.Unix.AppAlias.html | 286 + ...l.DesktopIntegration.Unix.ContextMenu.html | 283 + ...esktopIntegration.Unix.DefaultProgram.html | 289 + ...tall.DesktopIntegration.Unix.FileType.html | 289 + ...l.DesktopIntegration.Unix.FreeDesktop.html | 321 + ...l.DesktopIntegration.Unix.UrlProtocol.html | 289 + api/ZeroInstall.DesktopIntegration.Unix.html | 155 + ...opIntegration.ViewModel.AutoPlayModel.html | 264 + ...Integration.ViewModel.CapabilityModel.html | 325 + ...n.ViewModel.CapabilityModelExtensions.html | 223 + ...ntegration.ViewModel.ContextMenuModel.html | 264 + ...gration.ViewModel.DefaultProgramModel.html | 264 + ...opIntegration.ViewModel.FileTypeModel.html | 264 + ...gration.ViewModel.IconCapabilityModel.html | 270 + ...ntegration.ViewModel.IntegrationState.html | 673 + ...ntegration.ViewModel.UrlProtocolModel.html | 264 + ...oInstall.DesktopIntegration.ViewModel.html | 170 + ...l.DesktopIntegration.Windows.AppAlias.html | 359 + ...opIntegration.Windows.AppRegistration.html | 507 + ...l.DesktopIntegration.Windows.AutoPlay.html | 541 + ....DesktopIntegration.Windows.ComServer.html | 318 + ...esktopIntegration.Windows.ContextMenu.html | 442 + ...topIntegration.Windows.DefaultProgram.html | 504 + ...l.DesktopIntegration.Windows.FileType.html | 417 + ...ll.DesktopIntegration.Windows.PathEnv.html | 328 + ...l.DesktopIntegration.Windows.Shortcut.html | 657 + ...esktopIntegration.Windows.StubBuilder.html | 340 + ...topIntegration.Windows.UninstallEntry.html | 391 + ...esktopIntegration.Windows.UrlProtocol.html | 355 + ...eroInstall.DesktopIntegration.Windows.html | 185 + api/ZeroInstall.DesktopIntegration.html | 239 + api/ZeroInstall.Model.Architecture.html | 396 + ...oInstall.Model.ArchitectureExtensions.html | 372 + api/ZeroInstall.Model.Archive.html | 1256 + api/ZeroInstall.Model.Arg.html | 584 + api/ZeroInstall.Model.ArgBase.html | 336 + api/ZeroInstall.Model.Binding.html | 299 + ...ll.Model.Capabilities.AppRegistration.html | 563 + ...roInstall.Model.Capabilities.AutoPlay.html | 616 + ...tall.Model.Capabilities.AutoPlayEvent.html | 875 + ...Install.Model.Capabilities.Capability.html | 585 + ...all.Model.Capabilities.CapabilityList.html | 603 + ...Capabilities.CapabilityListExtensions.html | 219 + ...oInstall.Model.Capabilities.ComServer.html | 469 + ...nstall.Model.Capabilities.ContextMenu.html | 559 + ....Model.Capabilities.ContextMenuTarget.html | 160 + ....Model.Capabilities.DefaultCapability.html | 463 + ...all.Model.Capabilities.DefaultProgram.html | 871 + ...roInstall.Model.Capabilities.FileType.html | 556 + ....Model.Capabilities.FileTypeExtension.html | 940 + ...all.Model.Capabilities.IconCapability.html | 547 + ...ll.Model.Capabilities.InstallCommands.html | 425 + ...odel.Capabilities.KnownProtocolPrefix.html | 534 + ...Install.Model.Capabilities.RemoveHook.html | 536 + ...nstall.Model.Capabilities.UrlProtocol.html | 556 + api/ZeroInstall.Model.Capabilities.Verb.html | 911 + ...all.Model.Capabilities.VerbCapability.html | 519 + api/ZeroInstall.Model.Capabilities.html | 232 + api/ZeroInstall.Model.Catalog.html | 846 + api/ZeroInstall.Model.Category.html | 562 + api/ZeroInstall.Model.Command.html | 921 + api/ZeroInstall.Model.Constraint.html | 543 + api/ZeroInstall.Model.CopyFromStep.html | 594 + api/ZeroInstall.Model.Cpu.html | 201 + api/ZeroInstall.Model.Dependency.html | 714 + ...l.Model.DependencyContainerExtensions.html | 218 + ...Install.Model.Design.ArgBaseConverter.html | 437 + ...ll.Model.Design.CategoryNameConverter.html | 404 + api/ZeroInstall.Model.Design.html | 134 + ...Install.Model.DownloadRetrievalMethod.html | 569 + api/ZeroInstall.Model.Element.html | 1259 + ...all.Model.ElementCollectionExtensions.html | 258 + api/ZeroInstall.Model.EntryPoint.html | 798 + api/ZeroInstall.Model.EnvironmentBinding.html | 657 + api/ZeroInstall.Model.EnvironmentMode.html | 157 + ...ZeroInstall.Model.ExecutableInBinding.html | 464 + api/ZeroInstall.Model.ExecutableInPath.html | 496 + api/ZeroInstall.Model.ExecutableInVar.html | 496 + api/ZeroInstall.Model.Feed.html | 1605 + api/ZeroInstall.Model.FeedElement.html | 536 + api/ZeroInstall.Model.FeedReference.html | 502 + api/ZeroInstall.Model.FeedTarget.html | 315 + api/ZeroInstall.Model.FeedUri.html | 1122 + api/ZeroInstall.Model.ForEachArgs.html | 612 + api/ZeroInstall.Model.GenericBinding.html | 466 + api/ZeroInstall.Model.Group.html | 610 + api/ZeroInstall.Model.IArgBaseContainer.html | 181 + api/ZeroInstall.Model.IBindingContainer.html | 181 + ...eroInstall.Model.IDependencyContainer.html | 220 + ...roInstall.Model.IDescriptionContainer.html | 182 + api/ZeroInstall.Model.IElementContainer.html | 181 + api/ZeroInstall.Model.IIconContainer.html | 182 + api/ZeroInstall.Model.IInterfaceUri.html | 181 + ...l.Model.IInterfaceUriBindingContainer.html | 155 + api/ZeroInstall.Model.IRecipeStep.html | 195 + api/ZeroInstall.Model.ISummaryContainer.html | 189 + api/ZeroInstall.Model.Icon.html | 742 + api/ZeroInstall.Model.IconExtensions.html | 223 + api/ZeroInstall.Model.Implementation.html | 674 + api/ZeroInstall.Model.ImplementationBase.html | 745 + ...roInstall.Model.ImplementationVersion.html | 832 + api/ZeroInstall.Model.Importance.html | 154 + api/ZeroInstall.Model.InterfaceReference.html | 496 + api/ZeroInstall.Model.ManifestDigest.html | 637 + ...nifestDigestPartialEqualityComparer-1.html | 303 + ...ManifestDigestPartialEqualityComparer.html | 298 + api/ZeroInstall.Model.ModelUtils.html | 446 + api/ZeroInstall.Model.OS.html | 186 + api/ZeroInstall.Model.OverlayBinding.html | 496 + ...roInstall.Model.PackageImplementation.html | 740 + ...all.Model.Preferences.FeedPreferences.html | 682 + ...Preferences.ImplementationPreferences.html | 550 + ...odel.Preferences.InterfacePreferences.html | 649 + api/ZeroInstall.Model.Preferences.html | 140 + api/ZeroInstall.Model.Recipe.html | 535 + api/ZeroInstall.Model.RemoveStep.html | 497 + api/ZeroInstall.Model.RenameStep.html | 529 + api/ZeroInstall.Model.Requirements.html | 864 + api/ZeroInstall.Model.Restriction.html | 829 + api/ZeroInstall.Model.RetrievalMethod.html | 304 + api/ZeroInstall.Model.Runner.html | 695 + ...del.Selection.ImplementationSelection.html | 829 + ...ll.Model.Selection.SelectionCandidate.html | 727 + ...election.SelectionCandidateExtensions.html | 218 + ...eroInstall.Model.Selection.Selections.html | 816 + api/ZeroInstall.Model.Selection.TestCase.html | 405 + ...roInstall.Model.Selection.TestCaseSet.html | 214 + api/ZeroInstall.Model.Selection.html | 155 + api/ZeroInstall.Model.SingleFile.html | 545 + api/ZeroInstall.Model.Stability.html | 172 + api/ZeroInstall.Model.TargetBase.html | 528 + api/ZeroInstall.Model.VersionDottedList.html | 743 + api/ZeroInstall.Model.VersionModifier.html | 159 + api/ZeroInstall.Model.VersionPart.html | 737 + api/ZeroInstall.Model.VersionRange.html | 743 + api/ZeroInstall.Model.VersionRangePart.html | 312 + ...roInstall.Model.VersionRangePartExact.html | 366 + ...Install.Model.VersionRangePartExclude.html | 366 + ...roInstall.Model.VersionRangePartRange.html | 404 + api/ZeroInstall.Model.WorkingDir.html | 462 + api/ZeroInstall.Model.XmlUnknown.html | 467 + ...roInstall.Model.ZeroInstallDeployment.html | 369 + ...oInstall.Model.ZeroInstallEnvironment.html | 605 + api/ZeroInstall.Model.html | 552 + ...ZeroInstall.Publish.BuilderExtensions.html | 340 + ...nstall.Publish.Capture.CaptureSession.html | 506 + ...Install.Publish.Capture.CommandMapper.html | 299 + api/ZeroInstall.Publish.Capture.Snapshot.html | 717 + ...oInstall.Publish.Capture.SnapshotDiff.html | 595 + api/ZeroInstall.Publish.Capture.html | 145 + ...nstall.Publish.EntryPoints.BashScript.html | 246 + ...Install.Publish.EntryPoints.Candidate.html | 823 + ....Publish.EntryPoints.DetectCandidates.html | 411 + ...Install.Publish.EntryPoints.DotNetDll.html | 412 + ...Install.Publish.EntryPoints.DotNetExe.html | 569 + ...ublish.EntryPoints.DotNetFrameworkExe.html | 536 + ...Publish.EntryPoints.DotNetRuntimeType.html | 155 + ...ll.Publish.EntryPoints.IIconContainer.html | 181 + ...Publish.EntryPoints.InterpretedScript.html | 567 + api/ZeroInstall.Publish.EntryPoints.Java.html | 526 + ...Install.Publish.EntryPoints.JavaClass.html | 249 + ...roInstall.Publish.EntryPoints.JavaJar.html | 249 + ...oInstall.Publish.EntryPoints.MacOSApp.html | 207 + ....Publish.EntryPoints.NativeExecutable.html | 264 + ...tryPoints.PEHeader.ImageDataDirectory.html | 230 + ...h.EntryPoints.PEHeader.ImageDosHeader.html | 1100 + ....EntryPoints.PEHeader.ImageFileHeader.html | 380 + ...Points.PEHeader.ImageOptionalHeader32.html | 1550 + ...Points.PEHeader.ImageOptionalHeader64.html | 1520 + ...oInstall.Publish.EntryPoints.PEHeader.html | 404 + ...all.Publish.EntryPoints.PEMachineType.html | 156 + ...stall.Publish.EntryPoints.PESubsystem.html | 158 + ...nstall.Publish.EntryPoints.PerlScript.html | 246 + ...Install.Publish.EntryPoints.PhpScript.html | 246 + ...stall.Publish.EntryPoints.PosixBinary.html | 207 + ...l.Publish.EntryPoints.PosixExecutable.html | 232 + ...stall.Publish.EntryPoints.PosixScript.html | 207 + ....Publish.EntryPoints.PowerShellScript.html | 466 + ...ll.Publish.EntryPoints.PowerShellType.html | 153 + ...tall.Publish.EntryPoints.PythonScript.html | 311 + ...nstall.Publish.EntryPoints.RubyScript.html | 246 + ...tall.Publish.EntryPoints.WindowsBatch.html | 206 + ...nstall.Publish.EntryPoints.WindowsExe.html | 375 + api/ZeroInstall.Publish.EntryPoints.html | 292 + api/ZeroInstall.Publish.FeedBuilder.html | 807 + api/ZeroInstall.Publish.FeedEditing.html | 527 + api/ZeroInstall.Publish.FeedUtils.html | 342 + ...tall.Publish.ImplementationExtensions.html | 232 + ...all.Publish.RetrievalMethodExtensions.html | 338 + api/ZeroInstall.Publish.SignedCatalog.html | 398 + api/ZeroInstall.Publish.SignedFeed.html | 398 + api/ZeroInstall.Publish.html | 182 + ...Services.Executors.EnvironmentBuilder.html | 498 + ...roInstall.Services.Executors.Executor.html | 343 + ....Services.Executors.ExecutorException.html | 305 + ...ervices.Executors.IEnvironmentBuilder.html | 366 + ...oInstall.Services.Executors.IExecutor.html | 266 + api/ZeroInstall.Services.Executors.html | 153 + ...Install.Services.Feeds.CatalogManager.html | 672 + ...rvices.Feeds.CatalogManagerExtensions.html | 257 + ...eroInstall.Services.Feeds.FeedManager.html | 612 + ....Services.Feeds.FeedManagerExtensions.html | 301 + ...nstall.Services.Feeds.ICatalogManager.html | 461 + ...roInstall.Services.Feeds.IFeedManager.html | 522 + ...oInstall.Services.Feeds.ITrustManager.html | 218 + ...all.Services.Feeds.OpenPgpKeyCallback.html | 157 + ....Services.Feeds.ReplayAttackException.html | 353 + ...roInstall.Services.Feeds.TrustManager.html | 303 + api/ZeroInstall.Services.Feeds.html | 181 + ...ZeroInstall.Services.Fetchers.Fetcher.html | 665 + ...eroInstall.Services.Fetchers.IFetcher.html | 242 + ...ces.Fetchers.IImplementationDiscovery.html | 205 + ...ices.Fetchers.ImplementationDiscovery.html | 302 + ...ers.ImplementationDiscoveryExtensions.html | 235 + ...rvices.Fetchers.RetrievalMethodRanker.html | 262 + api/ZeroInstall.Services.Fetchers.html | 158 + ...roInstall.Services.ISelectionsManager.html | 331 + ...rvices.Native.CompositePackageManager.html | 310 + ...ervices.Native.ExternalImplementation.html | 761 + ...rvices.Native.ExternalRetrievalMethod.html | 570 + ...stall.Services.Native.IPackageManager.html | 238 + ...ll.Services.Native.PackageManagerBase.html | 350 + ...stall.Services.Native.PackageManagers.html | 213 + ...Services.Native.WindowsPackageManager.html | 301 + api/ZeroInstall.Services.Native.html | 163 + ...eroInstall.Services.SelectionsManager.html | 412 + ....Services.SelectionsManagerExtensions.html | 222 + ....Services.ServiceCollectionExtensions.html | 276 + api/ZeroInstall.Services.ServiceProvider.html | 737 + ...l.Services.Solvers.BacktrackingSolver.html | 302 + ...stall.Services.Solvers.ExternalSolver.html | 316 + ...stall.Services.Solvers.FallbackSolver.html | 303 + ...s.Solvers.ISelectionCandidateProvider.html | 295 + api/ZeroInstall.Services.Solvers.ISolver.html | 225 + ...es.Solvers.SelectionCandidateComparer.html | 273 + ...es.Solvers.SelectionCandidateProvider.html | 379 + ...Install.Services.Solvers.SolverDemand.html | 396 + ...tall.Services.Solvers.SolverException.html | 305 + ...all.Services.Solvers.SolverExtensions.html | 235 + ...nstall.Services.Solvers.SolverRunBase.html | 453 + ...oInstall.Services.Solvers.SolverUtils.html | 488 + api/ZeroInstall.Services.Solvers.html | 189 + ...stall.Services.WebExceptionExtensions.html | 220 + api/ZeroInstall.Services.html | 193 + ...eroInstall.Store.Configuration.Config.html | 1721 + ...Install.Store.Configuration.ConfigTab.html | 164 + ...tall.Store.Configuration.NetworkLevel.html | 157 + api/ZeroInstall.Store.Configuration.html | 143 + ...stall.Store.Deployment.ClearDirectory.html | 341 + ...tall.Store.Deployment.DeployDirectory.html | 380 + ...l.Store.Deployment.DirectoryOperation.html | 486 + api/ZeroInstall.Store.Deployment.html | 140 + api/ZeroInstall.Store.Feeds.FeedCache.html | 591 + api/ZeroInstall.Store.Feeds.FeedCaches.html | 255 + api/ZeroInstall.Store.Feeds.FeedUtils.html | 295 + api/ZeroInstall.Store.Feeds.IFeedCache.html | 512 + api/ZeroInstall.Store.Feeds.SearchResult.html | 644 + ...ZeroInstall.Store.Feeds.SearchResults.html | 268 + api/ZeroInstall.Store.Feeds.html | 160 + ...ll.Store.FileSystem.BuilderExtensions.html | 421 + ...all.Store.FileSystem.DirectoryBuilder.html | 687 + ...ZeroInstall.Store.FileSystem.IBuilder.html | 355 + ....Store.FileSystem.IForwardOnlyBuilder.html | 338 + ...nstall.Store.FileSystem.ImplFileUtils.html | 337 + ...nstall.Store.FileSystem.PrefixBuilder.html | 618 + ...nstall.Store.FileSystem.ReadDirectory.html | 385 + api/ZeroInstall.Store.FileSystem.html | 163 + api/ZeroInstall.Store.Icons.IIconStore.html | 369 + api/ZeroInstall.Store.Icons.IconStore.html | 484 + ...stall.Store.Icons.IconStoreExtensions.html | 223 + api/ZeroInstall.Store.Icons.html | 143 + ...entations.CompositeImplementationSink.html | 345 + ...ntations.CompositeImplementationStore.html | 757 + ...plementations.DigestMismatchException.html | 514 + ...e.Implementations.IImplementationSink.html | 246 + ....Implementations.IImplementationStore.html | 607 + ...ImplementationAlreadyInStoreException.html | 377 + ...tions.ImplementationNotFoundException.html | 379 + ...re.Implementations.ImplementationSink.html | 518 + ...e.Implementations.ImplementationStore.html | 821 + ...plementations.ImplementationStoreKind.html | 160 + ...lementations.ImplementationStoreUtils.html | 334 + ....Implementations.ImplementationStores.html | 444 + api/ZeroInstall.Store.Implementations.html | 190 + api/ZeroInstall.Store.ManagerBase.html | 398 + api/ZeroInstall.Store.Manifests.Manifest.html | 1044 + ...stall.Store.Manifests.ManifestBuilder.html | 651 + ...stall.Store.Manifests.ManifestElement.html | 341 + ...tore.Manifests.ManifestExecutableFile.html | 279 + ...oInstall.Store.Manifests.ManifestFile.html | 281 + ...nstall.Store.Manifests.ManifestFormat.html | 641 + ...ll.Store.Manifests.ManifestNormalFile.html | 279 + ...stall.Store.Manifests.ManifestSymlink.html | 271 + api/ZeroInstall.Store.Manifests.html | 165 + api/ZeroInstall.Store.Trust.BadSignature.html | 264 + api/ZeroInstall.Store.Trust.BouncyCastle.html | 455 + api/ZeroInstall.Store.Trust.Domain.html | 280 + api/ZeroInstall.Store.Trust.DomainSet.html | 385 + ...eroInstall.Store.Trust.ErrorSignature.html | 273 + api/ZeroInstall.Store.Trust.GnuPG.html | 494 + ...all.Store.Trust.IFingerprintContainer.html | 198 + ...roInstall.Store.Trust.IKeyIDContainer.html | 188 + api/ZeroInstall.Store.Trust.IOpenPgp.html | 380 + api/ZeroInstall.Store.Trust.Key.html | 470 + ...stall.Store.Trust.MissingKeySignature.html | 265 + api/ZeroInstall.Store.Trust.OpenPgp.html | 319 + ...Install.Store.Trust.OpenPgpExtensions.html | 275 + ...nstall.Store.Trust.OpenPgpFingerprint.html | 370 + ...oInstall.Store.Trust.OpenPgpSecretKey.html | 368 + ...oInstall.Store.Trust.OpenPgpSignature.html | 270 + api/ZeroInstall.Store.Trust.OpenPgpUtils.html | 306 + ...nstall.Store.Trust.SignatureException.html | 308 + api/ZeroInstall.Store.Trust.TrustDB.html | 893 + ...eroInstall.Store.Trust.ValidSignature.html | 341 + ....Store.Trust.WrongPassphraseException.html | 308 + api/ZeroInstall.Store.Trust.html | 236 + ...ZeroInstall.Store.ViewModel.CacheNode.html | 589 + ...tall.Store.ViewModel.CacheNodeBuilder.html | 262 + api/ZeroInstall.Store.ViewModel.FeedNode.html | 588 + ...ll.Store.ViewModel.ImplementationNode.html | 547 + ...ore.ViewModel.OwnedImplementationNode.html | 460 + ...ll.Store.ViewModel.SelectionsDiffNode.html | 511 + ...ll.Store.ViewModel.SelectionsTreeNode.html | 426 + ...all.Store.ViewModel.TempDirectoryNode.html | 422 + ...ZeroInstall.Store.ViewModel.TrustNode.html | 322 + ...l.Store.ViewModel.TrustNodeExtensions.html | 255 + api/ZeroInstall.Store.ViewModel.html | 175 + api/ZeroInstall.Store.html | 188 + api/ZeroInstall.html | 178 + api/toc.html | 1600 + api/toc.json | 2 + cli.html | 124 + client.html | 146 + docs/toc.html | 40 + docs/toc.json | 2 + favicon.ico | Bin 0 -> 99678 bytes file-system.html | 136 + index.html | 184 + index.json | 2412 + logo.svg | 2304 + manifest.json | 4888 ++ model.html | 131 + public/blockDiagram-9f4a6865-KQGFBXS7.min.js | 119 + .../blockDiagram-9f4a6865-KQGFBXS7.min.js.map | 7 + public/bootstrap-icons-OCU552PF.woff | Bin 0 -> 176032 bytes public/bootstrap-icons-X6UQXWUS.woff2 | Bin 0 -> 130396 bytes public/c4Diagram-ae766693-CZAYTAZR.min.js | 11 + public/c4Diagram-ae766693-CZAYTAZR.min.js.map | 7 + public/chunk-5FWMXAFW.min.js | 2 + public/chunk-5FWMXAFW.min.js.map | 7 + public/chunk-CA32PY7O.min.js | 11 + public/chunk-CA32PY7O.min.js.map | 7 + public/chunk-K2MRC2FE.min.js | 15 + public/chunk-K2MRC2FE.min.js.map | 7 + public/chunk-K4EHOM77.min.js | 208 + public/chunk-K4EHOM77.min.js.map | 7 + public/chunk-LUX5WYVM.min.js | 117 + public/chunk-LUX5WYVM.min.js.map | 7 + public/chunk-LXB37CFX.min.js | 8 + public/chunk-LXB37CFX.min.js.map | 7 + public/chunk-M7PQX5EB.min.js | 2 + public/chunk-M7PQX5EB.min.js.map | 7 + public/chunk-N4EFGQ5G.min.js | 5 + public/chunk-N4EFGQ5G.min.js.map | 7 + public/chunk-NRE4YRK7.min.js | 22 + public/chunk-NRE4YRK7.min.js.map | 7 + public/chunk-QRBMAIWT.min.js | 161 + public/chunk-QRBMAIWT.min.js.map | 7 + public/chunk-RNO6SWHZ.min.js | 2 + public/chunk-RNO6SWHZ.min.js.map | 7 + public/chunk-XUHMPXWX.min.js | 2 + public/chunk-XUHMPXWX.min.js.map | 7 + public/chunk-YEACHCAA.min.js | 101 + public/chunk-YEACHCAA.min.js.map | 7 + public/classDiagram-fb54d2a0-HROX7LLG.min.js | 3 + .../classDiagram-fb54d2a0-HROX7LLG.min.js.map | 7 + .../classDiagram-v2-a2b738ad-P3OHMUUZ.min.js | 3 + ...assDiagram-v2-a2b738ad-P3OHMUUZ.min.js.map | 7 + public/docfx.min.css | 16 + public/docfx.min.css.map | 7 + public/docfx.min.js | 102 + public/docfx.min.js.map | 7 + public/erDiagram-09d1c15f-DTEA6AXO.min.js | 52 + public/erDiagram-09d1c15f-DTEA6AXO.min.js.map | 7 + public/es-NKDSMAKG.min.js | 10 + public/es-NKDSMAKG.min.js.map | 7 + public/flowDiagram-b222e15a-KHGBC5KH.min.js | 5 + .../flowDiagram-b222e15a-KHGBC5KH.min.js.map | 7 + .../flowDiagram-v2-13329dc7-7HQDDRUE.min.js | 2 + ...lowDiagram-v2-13329dc7-7HQDDRUE.min.js.map | 7 + ...rt-elk-definition-ae0efee6-MAQF265M.min.js | 140 + ...lk-definition-ae0efee6-MAQF265M.min.js.map | 7 + public/ganttDiagram-b62c793e-AG7E44IT.min.js | 258 + .../ganttDiagram-b62c793e-AG7E44IT.min.js.map | 7 + .../gitGraphDiagram-942e62fe-MKYST3PD.min.js | 71 + ...tGraphDiagram-942e62fe-MKYST3PD.min.js.map | 7 + public/infoDiagram-94cd232f-QDJEABPW.min.js | 8 + .../infoDiagram-94cd232f-QDJEABPW.min.js.map | 7 + .../journeyDiagram-6625b456-5PROY5YP.min.js | 140 + ...ourneyDiagram-6625b456-5PROY5YP.min.js.map | 7 + public/katex-F45OXAZ7.min.js | 262 + public/katex-F45OXAZ7.min.js.map | 7 + public/lunr.ar-JYYLL55L.min.js | 25 + public/lunr.ar-JYYLL55L.min.js.map | 7 + public/lunr.da-ABNGX3GR.min.js | 22 + public/lunr.da-ABNGX3GR.min.js.map | 7 + public/lunr.de-N7IL7F5Q.min.js | 22 + public/lunr.de-N7IL7F5Q.min.js.map | 7 + public/lunr.du-4P4FUVNV.min.js | 22 + public/lunr.du-4P4FUVNV.min.js.map | 7 + public/lunr.el-XMPY4SDR.min.js | 22 + public/lunr.el-XMPY4SDR.min.js.map | 7 + public/lunr.es-QJ3NV5ZH.min.js | 22 + public/lunr.es-QJ3NV5ZH.min.js.map | 7 + public/lunr.fi-OGLGHFAM.min.js | 22 + public/lunr.fi-OGLGHFAM.min.js.map | 7 + public/lunr.fr-6WMI3F4I.min.js | 22 + public/lunr.fr-6WMI3F4I.min.js.map | 7 + public/lunr.he-EZUSRANM.min.js | 25 + public/lunr.he-EZUSRANM.min.js.map | 7 + public/lunr.hi-GKOIC2XP.min.js | 22 + public/lunr.hi-GKOIC2XP.min.js.map | 7 + public/lunr.hu-XPANPY4P.min.js | 22 + public/lunr.hu-XPANPY4P.min.js.map | 7 + public/lunr.hy-E2P7YR63.min.js | 22 + public/lunr.hy-E2P7YR63.min.js.map | 7 + public/lunr.it-RN72ONT7.min.js | 22 + public/lunr.it-RN72ONT7.min.js.map | 7 + public/lunr.ja-RG3AQVTE.min.js | 2 + public/lunr.ja-RG3AQVTE.min.js.map | 7 + public/lunr.jp-P5CLAZPO.min.js | 2 + public/lunr.jp-P5CLAZPO.min.js.map | 7 + public/lunr.kn-5Z3IOBMD.min.js | 22 + public/lunr.kn-5Z3IOBMD.min.js.map | 7 + public/lunr.ko-XMG7MEQU.min.js | 22 + public/lunr.ko-XMG7MEQU.min.js.map | 7 + public/lunr.nl-XJLTQY4R.min.js | 22 + public/lunr.nl-XJLTQY4R.min.js.map | 7 + public/lunr.no-E5T5VKQC.min.js | 22 + public/lunr.no-E5T5VKQC.min.js.map | 7 + public/lunr.pt-KEDPJIZQ.min.js | 22 + public/lunr.pt-KEDPJIZQ.min.js.map | 7 + public/lunr.ro-WWA7JY55.min.js | 22 + public/lunr.ro-WWA7JY55.min.js.map | 7 + public/lunr.ru-NQVTAHVP.min.js | 22 + public/lunr.ru-NQVTAHVP.min.js.map | 7 + public/lunr.sa-R4RRHON7.min.js | 22 + public/lunr.sa-R4RRHON7.min.js.map | 7 + public/lunr.sv-GCGNSHUK.min.js | 22 + public/lunr.sv-GCGNSHUK.min.js.map | 7 + public/lunr.ta-KO56CLDU.min.js | 22 + public/lunr.ta-KO56CLDU.min.js.map | 7 + public/lunr.te-2RZIMFIT.min.js | 22 + public/lunr.te-2RZIMFIT.min.js.map | 7 + public/lunr.th-RUK2AEUT.min.js | 22 + public/lunr.th-RUK2AEUT.min.js.map | 7 + public/lunr.tr-2MGZGM7A.min.js | 22 + public/lunr.tr-2MGZGM7A.min.js.map | 7 + public/lunr.vi-QNO46JPR.min.js | 22 + public/lunr.vi-QNO46JPR.min.js.map | 7 + public/main.css | 0 public/main.js | 1 + public/mermaid.core-SEZKZMNB.min.js | 2 + public/mermaid.core-SEZKZMNB.min.js.map | 7 + ...indmap-definition-307c710a-X5KDYKIG.min.js | 118 + ...ap-definition-307c710a-X5KDYKIG.min.js.map | 7 + public/pieDiagram-bb1d19e5-S5GML3CT.min.js | 36 + .../pieDiagram-bb1d19e5-S5GML3CT.min.js.map | 7 + .../quadrantDiagram-c759a472-M63GQYLB.min.js | 8 + ...adrantDiagram-c759a472-M63GQYLB.min.js.map | 7 + ...equirementDiagram-87253d64-XJI5VOSH.min.js | 53 + ...rementDiagram-87253d64-XJI5VOSH.min.js.map | 7 + public/sankeyDiagram-707fac0f-3GVBJS6H.min.js | 9 + ...sankeyDiagram-707fac0f-3GVBJS6H.min.js.map | 7 + public/search-worker.min.js | 67 + public/search-worker.min.js.map | 7 + .../sequenceDiagram-6894f283-AJU5ZNMQ.min.js | 123 + ...quenceDiagram-6894f283-AJU5ZNMQ.min.js.map | 7 + public/stateDiagram-5dee940d-56243UMQ.min.js | 2 + .../stateDiagram-5dee940d-56243UMQ.min.js.map | 7 + .../stateDiagram-v2-1992cada-ZUI7IUPQ.min.js | 2 + ...ateDiagram-v2-1992cada-ZUI7IUPQ.min.js.map | 7 + public/tex-svg-full-JPZ3Q247.min.js | 105 + public/tex-svg-full-JPZ3Q247.min.js.map | 7 + ...meline-definition-bf702344-YJZ3MVX7.min.js | 62 + ...ne-definition-bf702344-YJZ3MVX7.min.js.map | 7 + .../xychartDiagram-f11f50a6-N45Z7OOP.min.js | 8 + ...ychartDiagram-f11f50a6-N45Z7OOP.min.js.map | 7 + publish.html | 123 + services.html | 136 + toc.html | 25 + toc.json | 2 + xrefmap.yml | 44097 ++++++++++++++++ 641 files changed, 275261 insertions(+) create mode 100644 .nojekyll create mode 100644 CNAME create mode 100644 api/ZeroInstall.Archives.BuilderExtensions.html create mode 100644 api/ZeroInstall.Archives.Builders.ArchiveBuilder.html create mode 100644 api/ZeroInstall.Archives.Builders.IArchiveBuilder.html create mode 100644 api/ZeroInstall.Archives.Builders.TarBuilder.html create mode 100644 api/ZeroInstall.Archives.Builders.TarBz2Builder.html create mode 100644 api/ZeroInstall.Archives.Builders.TarGzBuilder.html create mode 100644 api/ZeroInstall.Archives.Builders.TarLzipBuilder.html create mode 100644 api/ZeroInstall.Archives.Builders.TarZstandardBuilder.html create mode 100644 api/ZeroInstall.Archives.Builders.ZipBuilder.html create mode 100644 api/ZeroInstall.Archives.Builders.html create mode 100644 api/ZeroInstall.Archives.Extractors.ArchiveExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.CabExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.DmgExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.IArchiveExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.MsiExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.RarExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.RubyGemExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.SevenZipExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.TarBz2Extractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.TarExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.TarGzExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.TarLzipExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.TarLzmaExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.TarXzExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.TarZstandardExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.ZipExtractor.html create mode 100644 api/ZeroInstall.Archives.Extractors.html create mode 100644 api/ZeroInstall.Archives.ImplementationServer.html create mode 100644 api/ZeroInstall.Archives.html create mode 100644 api/ZeroInstall.Client.IZeroInstallClient.html create mode 100644 api/ZeroInstall.Client.TemporarilyUnavailableException.html create mode 100644 api/ZeroInstall.Client.ZeroInstallClient.html create mode 100644 api/ZeroInstall.Client.html create mode 100644 api/ZeroInstall.Commands.Basic.AddFeed.html create mode 100644 api/ZeroInstall.Commands.Basic.AddRemoveFeedCommand.html create mode 100644 api/ZeroInstall.Commands.Basic.CatalogMan.html create mode 100644 api/ZeroInstall.Commands.Basic.Configure.html create mode 100644 api/ZeroInstall.Commands.Basic.DefaultCommand.html create mode 100644 api/ZeroInstall.Commands.Basic.Digest.html create mode 100644 api/ZeroInstall.Commands.Basic.Download.html create mode 100644 api/ZeroInstall.Commands.Basic.Export.html create mode 100644 api/ZeroInstall.Commands.Basic.ExportHelp.html create mode 100644 api/ZeroInstall.Commands.Basic.Exporters.Exporter.html create mode 100644 api/ZeroInstall.Commands.Basic.Exporters.HelpExporterBase.html create mode 100644 api/ZeroInstall.Commands.Basic.Exporters.HtmlHelpExporter.html create mode 100644 api/ZeroInstall.Commands.Basic.Exporters.html create mode 100644 api/ZeroInstall.Commands.Basic.Fetch.html create mode 100644 api/ZeroInstall.Commands.Basic.Import.html create mode 100644 api/ZeroInstall.Commands.Basic.List.html create mode 100644 api/ZeroInstall.Commands.Basic.ListFeeds.html create mode 100644 api/ZeroInstall.Commands.Basic.RemoveFeed.html create mode 100644 api/ZeroInstall.Commands.Basic.Run.html create mode 100644 api/ZeroInstall.Commands.Basic.Search.html create mode 100644 api/ZeroInstall.Commands.Basic.Selection.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.Add.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.Audit.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.Copy.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.Export.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.Find.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.List.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.ListImplementations.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.Optimise.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.Purge.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.Remove.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.Serve.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.StoreSubCommand.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.Verify.html create mode 100644 api/ZeroInstall.Commands.Basic.StoreMan.html create mode 100644 api/ZeroInstall.Commands.Basic.TrustMan.Add.html create mode 100644 api/ZeroInstall.Commands.Basic.TrustMan.List.html create mode 100644 api/ZeroInstall.Commands.Basic.TrustMan.Remove.html create mode 100644 api/ZeroInstall.Commands.Basic.TrustMan.TrustSubCommand.html create mode 100644 api/ZeroInstall.Commands.Basic.TrustMan.html create mode 100644 api/ZeroInstall.Commands.Basic.Update.html create mode 100644 api/ZeroInstall.Commands.Basic.html create mode 100644 api/ZeroInstall.Commands.CliCommand.html create mode 100644 api/ZeroInstall.Commands.CliCommandHandler.html create mode 100644 api/ZeroInstall.Commands.CliMultiCommand.html create mode 100644 api/ZeroInstall.Commands.Desktop.AddAlias.html create mode 100644 api/ZeroInstall.Commands.Desktop.AddApp.html create mode 100644 api/ZeroInstall.Commands.Desktop.AppCommand.html create mode 100644 api/ZeroInstall.Commands.Desktop.Central.html create mode 100644 api/ZeroInstall.Commands.Desktop.ImportApps.html create mode 100644 api/ZeroInstall.Commands.Desktop.IntegrateApp.html create mode 100644 api/ZeroInstall.Commands.Desktop.IntegrationCommand.html create mode 100644 api/ZeroInstall.Commands.Desktop.ListApps.html create mode 100644 api/ZeroInstall.Commands.Desktop.RemoveAllApps.html create mode 100644 api/ZeroInstall.Commands.Desktop.RemoveApp.html create mode 100644 api/ZeroInstall.Commands.Desktop.RepairApps.html create mode 100644 api/ZeroInstall.Commands.Desktop.Self.Deploy.html create mode 100644 api/ZeroInstall.Commands.Desktop.Self.Remove.html create mode 100644 api/ZeroInstall.Commands.Desktop.Self.RemoveSubCommandBase.html create mode 100644 api/ZeroInstall.Commands.Desktop.Self.SelfSubCommand.html create mode 100644 api/ZeroInstall.Commands.Desktop.Self.Update.html create mode 100644 api/ZeroInstall.Commands.Desktop.Self.html create mode 100644 api/ZeroInstall.Commands.Desktop.SelfManager.html create mode 100644 api/ZeroInstall.Commands.Desktop.SyncApps.html create mode 100644 api/ZeroInstall.Commands.Desktop.UpdateApps.html create mode 100644 api/ZeroInstall.Commands.Desktop.html create mode 100644 api/ZeroInstall.Commands.EnvironmentBuilderExtensions.html create mode 100644 api/ZeroInstall.Commands.ExitCode.html create mode 100644 api/ZeroInstall.Commands.ICliSubCommand.html create mode 100644 api/ZeroInstall.Commands.ICommandHandler.html create mode 100644 api/ZeroInstall.Commands.NeedsGuiException.html create mode 100644 api/ZeroInstall.Commands.ProgramUtils.html create mode 100644 api/ZeroInstall.Commands.Properties.Resources.html create mode 100644 api/ZeroInstall.Commands.Properties.html create mode 100644 api/ZeroInstall.Commands.ScopedOperation.html create mode 100644 api/ZeroInstall.Commands.UnsuitableInstallBaseException.html create mode 100644 api/ZeroInstall.Commands.ZeroInstallInstance.html create mode 100644 api/ZeroInstall.Commands.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPoint.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPointList.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.AppAlias.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.AutoPlay.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.AutoStart.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.CapabilityRegistration.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.CommandAccessPoint.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.ContextMenu.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultAccessPoint.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultProgram.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.DesktopIcon.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.FileType.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.IconAccessPoint.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.MenuEntry.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.MockAccessPoint.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.QuickLaunch.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.SendTo.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.UrlProtocol.html create mode 100644 api/ZeroInstall.DesktopIntegration.AccessPoints.html create mode 100644 api/ZeroInstall.DesktopIntegration.AppEntry.html create mode 100644 api/ZeroInstall.DesktopIntegration.AppList.html create mode 100644 api/ZeroInstall.DesktopIntegration.CapabilityExtensions.html create mode 100644 api/ZeroInstall.DesktopIntegration.CategoryIntegrationManager.html create mode 100644 api/ZeroInstall.DesktopIntegration.ConflictData.html create mode 100644 api/ZeroInstall.DesktopIntegration.ConflictDataUtils.html create mode 100644 api/ZeroInstall.DesktopIntegration.ConflictException.html create mode 100644 api/ZeroInstall.DesktopIntegration.ICategoryIntegrationManager.html create mode 100644 api/ZeroInstall.DesktopIntegration.IIntegrationManager.html create mode 100644 api/ZeroInstall.DesktopIntegration.IconStores.html create mode 100644 api/ZeroInstall.DesktopIntegration.IntegrationManager.html create mode 100644 api/ZeroInstall.DesktopIntegration.IntegrationManagerBase.html create mode 100644 api/ZeroInstall.DesktopIntegration.Suggest.html create mode 100644 api/ZeroInstall.DesktopIntegration.SyncIntegrationManager.html create mode 100644 api/ZeroInstall.DesktopIntegration.SyncRaceException.html create mode 100644 api/ZeroInstall.DesktopIntegration.SyncResetMode.html create mode 100644 api/ZeroInstall.DesktopIntegration.Unix.AppAlias.html create mode 100644 api/ZeroInstall.DesktopIntegration.Unix.ContextMenu.html create mode 100644 api/ZeroInstall.DesktopIntegration.Unix.DefaultProgram.html create mode 100644 api/ZeroInstall.DesktopIntegration.Unix.FileType.html create mode 100644 api/ZeroInstall.DesktopIntegration.Unix.FreeDesktop.html create mode 100644 api/ZeroInstall.DesktopIntegration.Unix.UrlProtocol.html create mode 100644 api/ZeroInstall.DesktopIntegration.Unix.html create mode 100644 api/ZeroInstall.DesktopIntegration.ViewModel.AutoPlayModel.html create mode 100644 api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModel.html create mode 100644 api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModelExtensions.html create mode 100644 api/ZeroInstall.DesktopIntegration.ViewModel.ContextMenuModel.html create mode 100644 api/ZeroInstall.DesktopIntegration.ViewModel.DefaultProgramModel.html create mode 100644 api/ZeroInstall.DesktopIntegration.ViewModel.FileTypeModel.html create mode 100644 api/ZeroInstall.DesktopIntegration.ViewModel.IconCapabilityModel.html create mode 100644 api/ZeroInstall.DesktopIntegration.ViewModel.IntegrationState.html create mode 100644 api/ZeroInstall.DesktopIntegration.ViewModel.UrlProtocolModel.html create mode 100644 api/ZeroInstall.DesktopIntegration.ViewModel.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.AppAlias.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.AppRegistration.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.AutoPlay.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.ComServer.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.ContextMenu.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.DefaultProgram.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.FileType.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.PathEnv.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.Shortcut.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.StubBuilder.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.UninstallEntry.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.UrlProtocol.html create mode 100644 api/ZeroInstall.DesktopIntegration.Windows.html create mode 100644 api/ZeroInstall.DesktopIntegration.html create mode 100644 api/ZeroInstall.Model.Architecture.html create mode 100644 api/ZeroInstall.Model.ArchitectureExtensions.html create mode 100644 api/ZeroInstall.Model.Archive.html create mode 100644 api/ZeroInstall.Model.Arg.html create mode 100644 api/ZeroInstall.Model.ArgBase.html create mode 100644 api/ZeroInstall.Model.Binding.html create mode 100644 api/ZeroInstall.Model.Capabilities.AppRegistration.html create mode 100644 api/ZeroInstall.Model.Capabilities.AutoPlay.html create mode 100644 api/ZeroInstall.Model.Capabilities.AutoPlayEvent.html create mode 100644 api/ZeroInstall.Model.Capabilities.Capability.html create mode 100644 api/ZeroInstall.Model.Capabilities.CapabilityList.html create mode 100644 api/ZeroInstall.Model.Capabilities.CapabilityListExtensions.html create mode 100644 api/ZeroInstall.Model.Capabilities.ComServer.html create mode 100644 api/ZeroInstall.Model.Capabilities.ContextMenu.html create mode 100644 api/ZeroInstall.Model.Capabilities.ContextMenuTarget.html create mode 100644 api/ZeroInstall.Model.Capabilities.DefaultCapability.html create mode 100644 api/ZeroInstall.Model.Capabilities.DefaultProgram.html create mode 100644 api/ZeroInstall.Model.Capabilities.FileType.html create mode 100644 api/ZeroInstall.Model.Capabilities.FileTypeExtension.html create mode 100644 api/ZeroInstall.Model.Capabilities.IconCapability.html create mode 100644 api/ZeroInstall.Model.Capabilities.InstallCommands.html create mode 100644 api/ZeroInstall.Model.Capabilities.KnownProtocolPrefix.html create mode 100644 api/ZeroInstall.Model.Capabilities.RemoveHook.html create mode 100644 api/ZeroInstall.Model.Capabilities.UrlProtocol.html create mode 100644 api/ZeroInstall.Model.Capabilities.Verb.html create mode 100644 api/ZeroInstall.Model.Capabilities.VerbCapability.html create mode 100644 api/ZeroInstall.Model.Capabilities.html create mode 100644 api/ZeroInstall.Model.Catalog.html create mode 100644 api/ZeroInstall.Model.Category.html create mode 100644 api/ZeroInstall.Model.Command.html create mode 100644 api/ZeroInstall.Model.Constraint.html create mode 100644 api/ZeroInstall.Model.CopyFromStep.html create mode 100644 api/ZeroInstall.Model.Cpu.html create mode 100644 api/ZeroInstall.Model.Dependency.html create mode 100644 api/ZeroInstall.Model.DependencyContainerExtensions.html create mode 100644 api/ZeroInstall.Model.Design.ArgBaseConverter.html create mode 100644 api/ZeroInstall.Model.Design.CategoryNameConverter.html create mode 100644 api/ZeroInstall.Model.Design.html create mode 100644 api/ZeroInstall.Model.DownloadRetrievalMethod.html create mode 100644 api/ZeroInstall.Model.Element.html create mode 100644 api/ZeroInstall.Model.ElementCollectionExtensions.html create mode 100644 api/ZeroInstall.Model.EntryPoint.html create mode 100644 api/ZeroInstall.Model.EnvironmentBinding.html create mode 100644 api/ZeroInstall.Model.EnvironmentMode.html create mode 100644 api/ZeroInstall.Model.ExecutableInBinding.html create mode 100644 api/ZeroInstall.Model.ExecutableInPath.html create mode 100644 api/ZeroInstall.Model.ExecutableInVar.html create mode 100644 api/ZeroInstall.Model.Feed.html create mode 100644 api/ZeroInstall.Model.FeedElement.html create mode 100644 api/ZeroInstall.Model.FeedReference.html create mode 100644 api/ZeroInstall.Model.FeedTarget.html create mode 100644 api/ZeroInstall.Model.FeedUri.html create mode 100644 api/ZeroInstall.Model.ForEachArgs.html create mode 100644 api/ZeroInstall.Model.GenericBinding.html create mode 100644 api/ZeroInstall.Model.Group.html create mode 100644 api/ZeroInstall.Model.IArgBaseContainer.html create mode 100644 api/ZeroInstall.Model.IBindingContainer.html create mode 100644 api/ZeroInstall.Model.IDependencyContainer.html create mode 100644 api/ZeroInstall.Model.IDescriptionContainer.html create mode 100644 api/ZeroInstall.Model.IElementContainer.html create mode 100644 api/ZeroInstall.Model.IIconContainer.html create mode 100644 api/ZeroInstall.Model.IInterfaceUri.html create mode 100644 api/ZeroInstall.Model.IInterfaceUriBindingContainer.html create mode 100644 api/ZeroInstall.Model.IRecipeStep.html create mode 100644 api/ZeroInstall.Model.ISummaryContainer.html create mode 100644 api/ZeroInstall.Model.Icon.html create mode 100644 api/ZeroInstall.Model.IconExtensions.html create mode 100644 api/ZeroInstall.Model.Implementation.html create mode 100644 api/ZeroInstall.Model.ImplementationBase.html create mode 100644 api/ZeroInstall.Model.ImplementationVersion.html create mode 100644 api/ZeroInstall.Model.Importance.html create mode 100644 api/ZeroInstall.Model.InterfaceReference.html create mode 100644 api/ZeroInstall.Model.ManifestDigest.html create mode 100644 api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer-1.html create mode 100644 api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer.html create mode 100644 api/ZeroInstall.Model.ModelUtils.html create mode 100644 api/ZeroInstall.Model.OS.html create mode 100644 api/ZeroInstall.Model.OverlayBinding.html create mode 100644 api/ZeroInstall.Model.PackageImplementation.html create mode 100644 api/ZeroInstall.Model.Preferences.FeedPreferences.html create mode 100644 api/ZeroInstall.Model.Preferences.ImplementationPreferences.html create mode 100644 api/ZeroInstall.Model.Preferences.InterfacePreferences.html create mode 100644 api/ZeroInstall.Model.Preferences.html create mode 100644 api/ZeroInstall.Model.Recipe.html create mode 100644 api/ZeroInstall.Model.RemoveStep.html create mode 100644 api/ZeroInstall.Model.RenameStep.html create mode 100644 api/ZeroInstall.Model.Requirements.html create mode 100644 api/ZeroInstall.Model.Restriction.html create mode 100644 api/ZeroInstall.Model.RetrievalMethod.html create mode 100644 api/ZeroInstall.Model.Runner.html create mode 100644 api/ZeroInstall.Model.Selection.ImplementationSelection.html create mode 100644 api/ZeroInstall.Model.Selection.SelectionCandidate.html create mode 100644 api/ZeroInstall.Model.Selection.SelectionCandidateExtensions.html create mode 100644 api/ZeroInstall.Model.Selection.Selections.html create mode 100644 api/ZeroInstall.Model.Selection.TestCase.html create mode 100644 api/ZeroInstall.Model.Selection.TestCaseSet.html create mode 100644 api/ZeroInstall.Model.Selection.html create mode 100644 api/ZeroInstall.Model.SingleFile.html create mode 100644 api/ZeroInstall.Model.Stability.html create mode 100644 api/ZeroInstall.Model.TargetBase.html create mode 100644 api/ZeroInstall.Model.VersionDottedList.html create mode 100644 api/ZeroInstall.Model.VersionModifier.html create mode 100644 api/ZeroInstall.Model.VersionPart.html create mode 100644 api/ZeroInstall.Model.VersionRange.html create mode 100644 api/ZeroInstall.Model.VersionRangePart.html create mode 100644 api/ZeroInstall.Model.VersionRangePartExact.html create mode 100644 api/ZeroInstall.Model.VersionRangePartExclude.html create mode 100644 api/ZeroInstall.Model.VersionRangePartRange.html create mode 100644 api/ZeroInstall.Model.WorkingDir.html create mode 100644 api/ZeroInstall.Model.XmlUnknown.html create mode 100644 api/ZeroInstall.Model.ZeroInstallDeployment.html create mode 100644 api/ZeroInstall.Model.ZeroInstallEnvironment.html create mode 100644 api/ZeroInstall.Model.html create mode 100644 api/ZeroInstall.Publish.BuilderExtensions.html create mode 100644 api/ZeroInstall.Publish.Capture.CaptureSession.html create mode 100644 api/ZeroInstall.Publish.Capture.CommandMapper.html create mode 100644 api/ZeroInstall.Publish.Capture.Snapshot.html create mode 100644 api/ZeroInstall.Publish.Capture.SnapshotDiff.html create mode 100644 api/ZeroInstall.Publish.Capture.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.BashScript.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.Candidate.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.DetectCandidates.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.DotNetDll.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.DotNetExe.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.DotNetFrameworkExe.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.DotNetRuntimeType.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.IIconContainer.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.InterpretedScript.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.Java.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.JavaClass.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.JavaJar.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.MacOSApp.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.NativeExecutable.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDataDirectory.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDosHeader.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageFileHeader.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader32.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader64.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PEHeader.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PEMachineType.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PESubsystem.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PerlScript.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PhpScript.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PosixBinary.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PosixExecutable.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PosixScript.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PowerShellScript.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PowerShellType.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.PythonScript.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.RubyScript.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.WindowsBatch.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.WindowsExe.html create mode 100644 api/ZeroInstall.Publish.EntryPoints.html create mode 100644 api/ZeroInstall.Publish.FeedBuilder.html create mode 100644 api/ZeroInstall.Publish.FeedEditing.html create mode 100644 api/ZeroInstall.Publish.FeedUtils.html create mode 100644 api/ZeroInstall.Publish.ImplementationExtensions.html create mode 100644 api/ZeroInstall.Publish.RetrievalMethodExtensions.html create mode 100644 api/ZeroInstall.Publish.SignedCatalog.html create mode 100644 api/ZeroInstall.Publish.SignedFeed.html create mode 100644 api/ZeroInstall.Publish.html create mode 100644 api/ZeroInstall.Services.Executors.EnvironmentBuilder.html create mode 100644 api/ZeroInstall.Services.Executors.Executor.html create mode 100644 api/ZeroInstall.Services.Executors.ExecutorException.html create mode 100644 api/ZeroInstall.Services.Executors.IEnvironmentBuilder.html create mode 100644 api/ZeroInstall.Services.Executors.IExecutor.html create mode 100644 api/ZeroInstall.Services.Executors.html create mode 100644 api/ZeroInstall.Services.Feeds.CatalogManager.html create mode 100644 api/ZeroInstall.Services.Feeds.CatalogManagerExtensions.html create mode 100644 api/ZeroInstall.Services.Feeds.FeedManager.html create mode 100644 api/ZeroInstall.Services.Feeds.FeedManagerExtensions.html create mode 100644 api/ZeroInstall.Services.Feeds.ICatalogManager.html create mode 100644 api/ZeroInstall.Services.Feeds.IFeedManager.html create mode 100644 api/ZeroInstall.Services.Feeds.ITrustManager.html create mode 100644 api/ZeroInstall.Services.Feeds.OpenPgpKeyCallback.html create mode 100644 api/ZeroInstall.Services.Feeds.ReplayAttackException.html create mode 100644 api/ZeroInstall.Services.Feeds.TrustManager.html create mode 100644 api/ZeroInstall.Services.Feeds.html create mode 100644 api/ZeroInstall.Services.Fetchers.Fetcher.html create mode 100644 api/ZeroInstall.Services.Fetchers.IFetcher.html create mode 100644 api/ZeroInstall.Services.Fetchers.IImplementationDiscovery.html create mode 100644 api/ZeroInstall.Services.Fetchers.ImplementationDiscovery.html create mode 100644 api/ZeroInstall.Services.Fetchers.ImplementationDiscoveryExtensions.html create mode 100644 api/ZeroInstall.Services.Fetchers.RetrievalMethodRanker.html create mode 100644 api/ZeroInstall.Services.Fetchers.html create mode 100644 api/ZeroInstall.Services.ISelectionsManager.html create mode 100644 api/ZeroInstall.Services.Native.CompositePackageManager.html create mode 100644 api/ZeroInstall.Services.Native.ExternalImplementation.html create mode 100644 api/ZeroInstall.Services.Native.ExternalRetrievalMethod.html create mode 100644 api/ZeroInstall.Services.Native.IPackageManager.html create mode 100644 api/ZeroInstall.Services.Native.PackageManagerBase.html create mode 100644 api/ZeroInstall.Services.Native.PackageManagers.html create mode 100644 api/ZeroInstall.Services.Native.WindowsPackageManager.html create mode 100644 api/ZeroInstall.Services.Native.html create mode 100644 api/ZeroInstall.Services.SelectionsManager.html create mode 100644 api/ZeroInstall.Services.SelectionsManagerExtensions.html create mode 100644 api/ZeroInstall.Services.ServiceCollectionExtensions.html create mode 100644 api/ZeroInstall.Services.ServiceProvider.html create mode 100644 api/ZeroInstall.Services.Solvers.BacktrackingSolver.html create mode 100644 api/ZeroInstall.Services.Solvers.ExternalSolver.html create mode 100644 api/ZeroInstall.Services.Solvers.FallbackSolver.html create mode 100644 api/ZeroInstall.Services.Solvers.ISelectionCandidateProvider.html create mode 100644 api/ZeroInstall.Services.Solvers.ISolver.html create mode 100644 api/ZeroInstall.Services.Solvers.SelectionCandidateComparer.html create mode 100644 api/ZeroInstall.Services.Solvers.SelectionCandidateProvider.html create mode 100644 api/ZeroInstall.Services.Solvers.SolverDemand.html create mode 100644 api/ZeroInstall.Services.Solvers.SolverException.html create mode 100644 api/ZeroInstall.Services.Solvers.SolverExtensions.html create mode 100644 api/ZeroInstall.Services.Solvers.SolverRunBase.html create mode 100644 api/ZeroInstall.Services.Solvers.SolverUtils.html create mode 100644 api/ZeroInstall.Services.Solvers.html create mode 100644 api/ZeroInstall.Services.WebExceptionExtensions.html create mode 100644 api/ZeroInstall.Services.html create mode 100644 api/ZeroInstall.Store.Configuration.Config.html create mode 100644 api/ZeroInstall.Store.Configuration.ConfigTab.html create mode 100644 api/ZeroInstall.Store.Configuration.NetworkLevel.html create mode 100644 api/ZeroInstall.Store.Configuration.html create mode 100644 api/ZeroInstall.Store.Deployment.ClearDirectory.html create mode 100644 api/ZeroInstall.Store.Deployment.DeployDirectory.html create mode 100644 api/ZeroInstall.Store.Deployment.DirectoryOperation.html create mode 100644 api/ZeroInstall.Store.Deployment.html create mode 100644 api/ZeroInstall.Store.Feeds.FeedCache.html create mode 100644 api/ZeroInstall.Store.Feeds.FeedCaches.html create mode 100644 api/ZeroInstall.Store.Feeds.FeedUtils.html create mode 100644 api/ZeroInstall.Store.Feeds.IFeedCache.html create mode 100644 api/ZeroInstall.Store.Feeds.SearchResult.html create mode 100644 api/ZeroInstall.Store.Feeds.SearchResults.html create mode 100644 api/ZeroInstall.Store.Feeds.html create mode 100644 api/ZeroInstall.Store.FileSystem.BuilderExtensions.html create mode 100644 api/ZeroInstall.Store.FileSystem.DirectoryBuilder.html create mode 100644 api/ZeroInstall.Store.FileSystem.IBuilder.html create mode 100644 api/ZeroInstall.Store.FileSystem.IForwardOnlyBuilder.html create mode 100644 api/ZeroInstall.Store.FileSystem.ImplFileUtils.html create mode 100644 api/ZeroInstall.Store.FileSystem.PrefixBuilder.html create mode 100644 api/ZeroInstall.Store.FileSystem.ReadDirectory.html create mode 100644 api/ZeroInstall.Store.FileSystem.html create mode 100644 api/ZeroInstall.Store.Icons.IIconStore.html create mode 100644 api/ZeroInstall.Store.Icons.IconStore.html create mode 100644 api/ZeroInstall.Store.Icons.IconStoreExtensions.html create mode 100644 api/ZeroInstall.Store.Icons.html create mode 100644 api/ZeroInstall.Store.Implementations.CompositeImplementationSink.html create mode 100644 api/ZeroInstall.Store.Implementations.CompositeImplementationStore.html create mode 100644 api/ZeroInstall.Store.Implementations.DigestMismatchException.html create mode 100644 api/ZeroInstall.Store.Implementations.IImplementationSink.html create mode 100644 api/ZeroInstall.Store.Implementations.IImplementationStore.html create mode 100644 api/ZeroInstall.Store.Implementations.ImplementationAlreadyInStoreException.html create mode 100644 api/ZeroInstall.Store.Implementations.ImplementationNotFoundException.html create mode 100644 api/ZeroInstall.Store.Implementations.ImplementationSink.html create mode 100644 api/ZeroInstall.Store.Implementations.ImplementationStore.html create mode 100644 api/ZeroInstall.Store.Implementations.ImplementationStoreKind.html create mode 100644 api/ZeroInstall.Store.Implementations.ImplementationStoreUtils.html create mode 100644 api/ZeroInstall.Store.Implementations.ImplementationStores.html create mode 100644 api/ZeroInstall.Store.Implementations.html create mode 100644 api/ZeroInstall.Store.ManagerBase.html create mode 100644 api/ZeroInstall.Store.Manifests.Manifest.html create mode 100644 api/ZeroInstall.Store.Manifests.ManifestBuilder.html create mode 100644 api/ZeroInstall.Store.Manifests.ManifestElement.html create mode 100644 api/ZeroInstall.Store.Manifests.ManifestExecutableFile.html create mode 100644 api/ZeroInstall.Store.Manifests.ManifestFile.html create mode 100644 api/ZeroInstall.Store.Manifests.ManifestFormat.html create mode 100644 api/ZeroInstall.Store.Manifests.ManifestNormalFile.html create mode 100644 api/ZeroInstall.Store.Manifests.ManifestSymlink.html create mode 100644 api/ZeroInstall.Store.Manifests.html create mode 100644 api/ZeroInstall.Store.Trust.BadSignature.html create mode 100644 api/ZeroInstall.Store.Trust.BouncyCastle.html create mode 100644 api/ZeroInstall.Store.Trust.Domain.html create mode 100644 api/ZeroInstall.Store.Trust.DomainSet.html create mode 100644 api/ZeroInstall.Store.Trust.ErrorSignature.html create mode 100644 api/ZeroInstall.Store.Trust.GnuPG.html create mode 100644 api/ZeroInstall.Store.Trust.IFingerprintContainer.html create mode 100644 api/ZeroInstall.Store.Trust.IKeyIDContainer.html create mode 100644 api/ZeroInstall.Store.Trust.IOpenPgp.html create mode 100644 api/ZeroInstall.Store.Trust.Key.html create mode 100644 api/ZeroInstall.Store.Trust.MissingKeySignature.html create mode 100644 api/ZeroInstall.Store.Trust.OpenPgp.html create mode 100644 api/ZeroInstall.Store.Trust.OpenPgpExtensions.html create mode 100644 api/ZeroInstall.Store.Trust.OpenPgpFingerprint.html create mode 100644 api/ZeroInstall.Store.Trust.OpenPgpSecretKey.html create mode 100644 api/ZeroInstall.Store.Trust.OpenPgpSignature.html create mode 100644 api/ZeroInstall.Store.Trust.OpenPgpUtils.html create mode 100644 api/ZeroInstall.Store.Trust.SignatureException.html create mode 100644 api/ZeroInstall.Store.Trust.TrustDB.html create mode 100644 api/ZeroInstall.Store.Trust.ValidSignature.html create mode 100644 api/ZeroInstall.Store.Trust.WrongPassphraseException.html create mode 100644 api/ZeroInstall.Store.Trust.html create mode 100644 api/ZeroInstall.Store.ViewModel.CacheNode.html create mode 100644 api/ZeroInstall.Store.ViewModel.CacheNodeBuilder.html create mode 100644 api/ZeroInstall.Store.ViewModel.FeedNode.html create mode 100644 api/ZeroInstall.Store.ViewModel.ImplementationNode.html create mode 100644 api/ZeroInstall.Store.ViewModel.OwnedImplementationNode.html create mode 100644 api/ZeroInstall.Store.ViewModel.SelectionsDiffNode.html create mode 100644 api/ZeroInstall.Store.ViewModel.SelectionsTreeNode.html create mode 100644 api/ZeroInstall.Store.ViewModel.TempDirectoryNode.html create mode 100644 api/ZeroInstall.Store.ViewModel.TrustNode.html create mode 100644 api/ZeroInstall.Store.ViewModel.TrustNodeExtensions.html create mode 100644 api/ZeroInstall.Store.ViewModel.html create mode 100644 api/ZeroInstall.Store.html create mode 100644 api/ZeroInstall.html create mode 100644 api/toc.html create mode 100644 api/toc.json create mode 100644 cli.html create mode 100644 client.html create mode 100644 docs/toc.html create mode 100644 docs/toc.json create mode 100644 favicon.ico create mode 100644 file-system.html create mode 100644 index.html create mode 100644 index.json create mode 100644 logo.svg create mode 100644 manifest.json create mode 100644 model.html create mode 100644 public/blockDiagram-9f4a6865-KQGFBXS7.min.js create mode 100644 public/blockDiagram-9f4a6865-KQGFBXS7.min.js.map create mode 100644 public/bootstrap-icons-OCU552PF.woff create mode 100644 public/bootstrap-icons-X6UQXWUS.woff2 create mode 100644 public/c4Diagram-ae766693-CZAYTAZR.min.js create mode 100644 public/c4Diagram-ae766693-CZAYTAZR.min.js.map create mode 100644 public/chunk-5FWMXAFW.min.js create mode 100644 public/chunk-5FWMXAFW.min.js.map create mode 100644 public/chunk-CA32PY7O.min.js create mode 100644 public/chunk-CA32PY7O.min.js.map create mode 100644 public/chunk-K2MRC2FE.min.js create mode 100644 public/chunk-K2MRC2FE.min.js.map create mode 100644 public/chunk-K4EHOM77.min.js create mode 100644 public/chunk-K4EHOM77.min.js.map create mode 100644 public/chunk-LUX5WYVM.min.js create mode 100644 public/chunk-LUX5WYVM.min.js.map create mode 100644 public/chunk-LXB37CFX.min.js create mode 100644 public/chunk-LXB37CFX.min.js.map create mode 100644 public/chunk-M7PQX5EB.min.js create mode 100644 public/chunk-M7PQX5EB.min.js.map create mode 100644 public/chunk-N4EFGQ5G.min.js create mode 100644 public/chunk-N4EFGQ5G.min.js.map create mode 100644 public/chunk-NRE4YRK7.min.js create mode 100644 public/chunk-NRE4YRK7.min.js.map create mode 100644 public/chunk-QRBMAIWT.min.js create mode 100644 public/chunk-QRBMAIWT.min.js.map create mode 100644 public/chunk-RNO6SWHZ.min.js create mode 100644 public/chunk-RNO6SWHZ.min.js.map create mode 100644 public/chunk-XUHMPXWX.min.js create mode 100644 public/chunk-XUHMPXWX.min.js.map create mode 100644 public/chunk-YEACHCAA.min.js create mode 100644 public/chunk-YEACHCAA.min.js.map create mode 100644 public/classDiagram-fb54d2a0-HROX7LLG.min.js create mode 100644 public/classDiagram-fb54d2a0-HROX7LLG.min.js.map create mode 100644 public/classDiagram-v2-a2b738ad-P3OHMUUZ.min.js create mode 100644 public/classDiagram-v2-a2b738ad-P3OHMUUZ.min.js.map create mode 100644 public/docfx.min.css create mode 100644 public/docfx.min.css.map create mode 100644 public/docfx.min.js create mode 100644 public/docfx.min.js.map create mode 100644 public/erDiagram-09d1c15f-DTEA6AXO.min.js create mode 100644 public/erDiagram-09d1c15f-DTEA6AXO.min.js.map create mode 100644 public/es-NKDSMAKG.min.js create mode 100644 public/es-NKDSMAKG.min.js.map create mode 100644 public/flowDiagram-b222e15a-KHGBC5KH.min.js create mode 100644 public/flowDiagram-b222e15a-KHGBC5KH.min.js.map create mode 100644 public/flowDiagram-v2-13329dc7-7HQDDRUE.min.js create mode 100644 public/flowDiagram-v2-13329dc7-7HQDDRUE.min.js.map create mode 100644 public/flowchart-elk-definition-ae0efee6-MAQF265M.min.js create mode 100644 public/flowchart-elk-definition-ae0efee6-MAQF265M.min.js.map create mode 100644 public/ganttDiagram-b62c793e-AG7E44IT.min.js create mode 100644 public/ganttDiagram-b62c793e-AG7E44IT.min.js.map create mode 100644 public/gitGraphDiagram-942e62fe-MKYST3PD.min.js create mode 100644 public/gitGraphDiagram-942e62fe-MKYST3PD.min.js.map create mode 100644 public/infoDiagram-94cd232f-QDJEABPW.min.js create mode 100644 public/infoDiagram-94cd232f-QDJEABPW.min.js.map create mode 100644 public/journeyDiagram-6625b456-5PROY5YP.min.js create mode 100644 public/journeyDiagram-6625b456-5PROY5YP.min.js.map create mode 100644 public/katex-F45OXAZ7.min.js create mode 100644 public/katex-F45OXAZ7.min.js.map create mode 100644 public/lunr.ar-JYYLL55L.min.js create mode 100644 public/lunr.ar-JYYLL55L.min.js.map create mode 100644 public/lunr.da-ABNGX3GR.min.js create mode 100644 public/lunr.da-ABNGX3GR.min.js.map create mode 100644 public/lunr.de-N7IL7F5Q.min.js create mode 100644 public/lunr.de-N7IL7F5Q.min.js.map create mode 100644 public/lunr.du-4P4FUVNV.min.js create mode 100644 public/lunr.du-4P4FUVNV.min.js.map create mode 100644 public/lunr.el-XMPY4SDR.min.js create mode 100644 public/lunr.el-XMPY4SDR.min.js.map create mode 100644 public/lunr.es-QJ3NV5ZH.min.js create mode 100644 public/lunr.es-QJ3NV5ZH.min.js.map create mode 100644 public/lunr.fi-OGLGHFAM.min.js create mode 100644 public/lunr.fi-OGLGHFAM.min.js.map create mode 100644 public/lunr.fr-6WMI3F4I.min.js create mode 100644 public/lunr.fr-6WMI3F4I.min.js.map create mode 100644 public/lunr.he-EZUSRANM.min.js create mode 100644 public/lunr.he-EZUSRANM.min.js.map create mode 100644 public/lunr.hi-GKOIC2XP.min.js create mode 100644 public/lunr.hi-GKOIC2XP.min.js.map create mode 100644 public/lunr.hu-XPANPY4P.min.js create mode 100644 public/lunr.hu-XPANPY4P.min.js.map create mode 100644 public/lunr.hy-E2P7YR63.min.js create mode 100644 public/lunr.hy-E2P7YR63.min.js.map create mode 100644 public/lunr.it-RN72ONT7.min.js create mode 100644 public/lunr.it-RN72ONT7.min.js.map create mode 100644 public/lunr.ja-RG3AQVTE.min.js create mode 100644 public/lunr.ja-RG3AQVTE.min.js.map create mode 100644 public/lunr.jp-P5CLAZPO.min.js create mode 100644 public/lunr.jp-P5CLAZPO.min.js.map create mode 100644 public/lunr.kn-5Z3IOBMD.min.js create mode 100644 public/lunr.kn-5Z3IOBMD.min.js.map create mode 100644 public/lunr.ko-XMG7MEQU.min.js create mode 100644 public/lunr.ko-XMG7MEQU.min.js.map create mode 100644 public/lunr.nl-XJLTQY4R.min.js create mode 100644 public/lunr.nl-XJLTQY4R.min.js.map create mode 100644 public/lunr.no-E5T5VKQC.min.js create mode 100644 public/lunr.no-E5T5VKQC.min.js.map create mode 100644 public/lunr.pt-KEDPJIZQ.min.js create mode 100644 public/lunr.pt-KEDPJIZQ.min.js.map create mode 100644 public/lunr.ro-WWA7JY55.min.js create mode 100644 public/lunr.ro-WWA7JY55.min.js.map create mode 100644 public/lunr.ru-NQVTAHVP.min.js create mode 100644 public/lunr.ru-NQVTAHVP.min.js.map create mode 100644 public/lunr.sa-R4RRHON7.min.js create mode 100644 public/lunr.sa-R4RRHON7.min.js.map create mode 100644 public/lunr.sv-GCGNSHUK.min.js create mode 100644 public/lunr.sv-GCGNSHUK.min.js.map create mode 100644 public/lunr.ta-KO56CLDU.min.js create mode 100644 public/lunr.ta-KO56CLDU.min.js.map create mode 100644 public/lunr.te-2RZIMFIT.min.js create mode 100644 public/lunr.te-2RZIMFIT.min.js.map create mode 100644 public/lunr.th-RUK2AEUT.min.js create mode 100644 public/lunr.th-RUK2AEUT.min.js.map create mode 100644 public/lunr.tr-2MGZGM7A.min.js create mode 100644 public/lunr.tr-2MGZGM7A.min.js.map create mode 100644 public/lunr.vi-QNO46JPR.min.js create mode 100644 public/lunr.vi-QNO46JPR.min.js.map create mode 100644 public/main.css create mode 100644 public/main.js create mode 100644 public/mermaid.core-SEZKZMNB.min.js create mode 100644 public/mermaid.core-SEZKZMNB.min.js.map create mode 100644 public/mindmap-definition-307c710a-X5KDYKIG.min.js create mode 100644 public/mindmap-definition-307c710a-X5KDYKIG.min.js.map create mode 100644 public/pieDiagram-bb1d19e5-S5GML3CT.min.js create mode 100644 public/pieDiagram-bb1d19e5-S5GML3CT.min.js.map create mode 100644 public/quadrantDiagram-c759a472-M63GQYLB.min.js create mode 100644 public/quadrantDiagram-c759a472-M63GQYLB.min.js.map create mode 100644 public/requirementDiagram-87253d64-XJI5VOSH.min.js create mode 100644 public/requirementDiagram-87253d64-XJI5VOSH.min.js.map create mode 100644 public/sankeyDiagram-707fac0f-3GVBJS6H.min.js create mode 100644 public/sankeyDiagram-707fac0f-3GVBJS6H.min.js.map create mode 100644 public/search-worker.min.js create mode 100644 public/search-worker.min.js.map create mode 100644 public/sequenceDiagram-6894f283-AJU5ZNMQ.min.js create mode 100644 public/sequenceDiagram-6894f283-AJU5ZNMQ.min.js.map create mode 100644 public/stateDiagram-5dee940d-56243UMQ.min.js create mode 100644 public/stateDiagram-5dee940d-56243UMQ.min.js.map create mode 100644 public/stateDiagram-v2-1992cada-ZUI7IUPQ.min.js create mode 100644 public/stateDiagram-v2-1992cada-ZUI7IUPQ.min.js.map create mode 100644 public/tex-svg-full-JPZ3Q247.min.js create mode 100644 public/tex-svg-full-JPZ3Q247.min.js.map create mode 100644 public/timeline-definition-bf702344-YJZ3MVX7.min.js create mode 100644 public/timeline-definition-bf702344-YJZ3MVX7.min.js.map create mode 100644 public/xychartDiagram-f11f50a6-N45Z7OOP.min.js create mode 100644 public/xychartDiagram-f11f50a6-N45Z7OOP.min.js.map create mode 100644 publish.html create mode 100644 services.html create mode 100644 toc.html create mode 100644 toc.json create mode 100644 xrefmap.yml diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..725483fd0 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +dotnet.0install.net diff --git a/api/ZeroInstall.Archives.BuilderExtensions.html b/api/ZeroInstall.Archives.BuilderExtensions.html new file mode 100644 index 000000000..acfc644d8 --- /dev/null +++ b/api/ZeroInstall.Archives.BuilderExtensions.html @@ -0,0 +1,289 @@ + + + + + Class BuilderExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class BuilderExtensions +

+ +
+
Namespace
ZeroInstall.Archives
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Helpers for adding Archives to IBuilders.

+
+
+ +
+
public static class BuilderExtensions
+
+ + + + +
+
Inheritance
+
+ +
BuilderExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Add(IBuilder, DownloadRetrievalMethod, Stream, ITaskHandler, object?) + +

+ +

Adds a downloaded file to the implementation.

+
+
+ +
+
public static void Add(this IBuilder builder, DownloadRetrievalMethod retrievalMethod, Stream stream, ITaskHandler handler, object? tag = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder.

+
+
retrievalMethod DownloadRetrievalMethod
+

The metadata of the file.

+
+
stream Stream
+

The contents of the file.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
tag object
+

A Tag used to group progress bars. Usually Best.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ AddArchive(IBuilder, Archive, Stream, ITaskHandler, object?) + +

+ +

Adds an archive to the implementation.

+
+
+ +
+
public static void AddArchive(this IBuilder builder, Archive archive, Stream stream, ITaskHandler handler, object? tag = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder.

+
+
archive Archive
+

The metadata of the archive.

+
+
stream Stream
+

The archive data to be extracted.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
tag object
+

A Tag used to group progress bars. Usually Best.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Builders.ArchiveBuilder.html b/api/ZeroInstall.Archives.Builders.ArchiveBuilder.html new file mode 100644 index 000000000..5db7ff12b --- /dev/null +++ b/api/ZeroInstall.Archives.Builders.ArchiveBuilder.html @@ -0,0 +1,378 @@ + + + + + Class ArchiveBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ArchiveBuilder +

+ +
+
Namespace
ZeroInstall.Archives.Builders
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Builds implementation archive files.

+
+
+ +
+
public static class ArchiveBuilder
+
+ + + + +
+
Inheritance
+
+ +
ArchiveBuilder
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ SupportedMimeTypes + +

+ +

All supported MIME types for creating archives. This is a subset of KnownMimeTypes

+
+
+ +
+
public static readonly string[] SupportedMimeTypes
+
+ + + + +

Field Value

+
+
string[]
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Create(Stream, string, bool) + +

+ +

Creates a new ArchiveBuilder for creating an archive and writing it to a stream.

+
+
+ +
+
[MustDisposeResource]
+public static IArchiveBuilder Create(Stream stream, string mimeType, bool fast = false)
+
+ +

Parameters

+
+
stream Stream
+

The stream to write the archive to. Will be disposed when the builder is disposed.

+
+
mimeType string
+

The MIME type of archive format to create.

+
+
fast bool
+

The compression operation should complete as quickly as possible, even if the resulting file is not optimally compressed.

+
+
+ +

Returns

+
+
IArchiveBuilder
+
+
+ + + + + + + + +

Exceptions

+
+
NotSupportedException
+

The mimeType doesn't belong to a known and supported archive type.

+
+
+ + + + + +

+ Create(string, string, bool) + +

+ +

Creates a new ArchiveBuilder for creating an archive and writing it to a file.

+
+
+ +
+
[MustDisposeResource]
+public static IArchiveBuilder Create(string path, string mimeType, bool fast = false)
+
+ +

Parameters

+
+
path string
+

The path of the archive file to create.

+
+
mimeType string
+

The MIME type of archive format to create.

+
+
fast bool
+

The compression operation should complete as quickly as possible, even if the resulting file is not optimally compressed.

+
+
+ +

Returns

+
+
IArchiveBuilder
+
+
+ + + + + + + + +

Exceptions

+
+
NotSupportedException
+

The mimeType doesn't belong to a known and supported archive type.

+
+
IOException
+

Failed to create the archive file.

+
+
UnauthorizedAccessException
+

Write access to the archive file was denied.

+
+
+ + + + + +

+ RunForDirectory(string, string, string, ITaskHandler) + +

+ +

Create an an archive from a directory and writes it to a file.

+
+
+ +
+
public static void RunForDirectory(string sourcePath, string archivePath, string mimeType, ITaskHandler handler)
+
+ +

Parameters

+
+
sourcePath string
+

The path of the directory to read.

+
+
archivePath string
+

The path of the archive file to create.

+
+
mimeType string
+

The MIME type of archive format to create.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + + +

Exceptions

+
+
NotSupportedException
+

The mimeType doesn't belong to a known and supported archive type.

+
+
IOException
+

Failed to read the directory or create the archive file.

+
+
UnauthorizedAccessException
+

Read access to the directory or write access to the archive file was denied.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Builders.IArchiveBuilder.html b/api/ZeroInstall.Archives.Builders.IArchiveBuilder.html new file mode 100644 index 000000000..7b2219ed2 --- /dev/null +++ b/api/ZeroInstall.Archives.Builders.IArchiveBuilder.html @@ -0,0 +1,164 @@ + + + + + Interface IArchiveBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IArchiveBuilder +

+ +
+
Namespace
ZeroInstall.Archives.Builders
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Builds an implementation archive file.

+
+
+ +
+
public interface IArchiveBuilder : IForwardOnlyBuilder, IDisposable
+
+ + + + + + + +
+
Inherited Members
+
+ + + + + +
+ + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Builders.TarBuilder.html b/api/ZeroInstall.Archives.Builders.TarBuilder.html new file mode 100644 index 000000000..01e066163 --- /dev/null +++ b/api/ZeroInstall.Archives.Builders.TarBuilder.html @@ -0,0 +1,452 @@ + + + + + Class TarBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarBuilder +

+ +
+
Namespace
ZeroInstall.Archives.Builders
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Builds a TAR archive (.tar).

+
+
+ +
+
[MustDisposeResource]
+public class TarBuilder : IArchiveBuilder, IForwardOnlyBuilder, IDisposable
+
+ + + + +
+
Inheritance
+
+ +
TarBuilder
+
+
+ +
+
Implements
+
+ + + +
+
+ +
+
Derived
+
+ + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ TarBuilder(Stream) + +

+ +

Builds a TAR archive (.tar).

+
+
+ +
+
public TarBuilder(Stream stream)
+
+ +

Parameters

+
+
stream Stream
+

The stream to write the archive to. Will be disposed when the builder is disposed.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ AddDirectory(string) + +

+ +

Adds a subdirectory to the implementation.

+
+
+ +
+
public void AddDirectory(string path)
+
+ +

Parameters

+
+
path string
+

The path of the directory to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ AddFile(string, Stream, UnixTime, bool) + +

+ +

Adds a file to the implementation.

+
+
+ +
+
public void AddFile(string path, Stream stream, UnixTime modifiedTime, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the file to create relative to the implementation root.

+
+
stream Stream
+

The contents of the file.

+
+
modifiedTime UnixTime
+

The last write time to set for the file.

+
+
executable bool
+

true if the file's executable bit is to be set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + + + +

Adds a hardlink to the implementation.

+
+
+ +
+
public void AddHardlink(string path, string target, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the hardlink to create relative to the implementation root.

+
+
target string
+

The path of the existing file the hardlink shall be based on relative to the implementation root. Must point

+
+
executable bool
+

true if the executable bit of the hardlink is set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
NotSupportedException
+

The currently platform or builder does not support hardlinks. Use AddFile(string, Stream, UnixTime, bool) instead.

+
+
+ + + + + + + +

Adds a symbolic link to the implementation.

+
+
+ +
+
public void AddSymlink(string path, string target)
+
+ +

Parameters

+
+
path string
+

The path of the symlink to create relative to the implementation root.

+
+
target string
+

The target the symbolic link shall point to relative to path. May use non-native path separators.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Dispose() + +

+ +

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.

+
+
+ +
+
public virtual void Dispose()
+
+ + + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Builders.TarBz2Builder.html b/api/ZeroInstall.Archives.Builders.TarBz2Builder.html new file mode 100644 index 000000000..0ba58da1b --- /dev/null +++ b/api/ZeroInstall.Archives.Builders.TarBz2Builder.html @@ -0,0 +1,242 @@ + + + + + Class TarBz2Builder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarBz2Builder +

+ +
+
Namespace
ZeroInstall.Archives.Builders
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Builds a BZip2-compressed TAR archive (.tar.bz2).

+
+
+ +
+
[MustDisposeResource]
+public class TarBz2Builder : TarBuilder, IArchiveBuilder, IForwardOnlyBuilder, IDisposable
+
+ + + + +
+
Inheritance
+
+ + +
TarBz2Builder
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ TarBz2Builder(Stream, bool) + +

+ +

Builds a BZip2-compressed TAR archive (.tar.bz2).

+
+
+ +
+
public TarBz2Builder(Stream stream, bool fast = false)
+
+ +

Parameters

+
+
stream Stream
+

The stream to write the archive to. Will be disposed when the builder is disposed.

+
+
fast bool
+

The compression operation should complete as quickly as possible, even if the resulting file is not optimally compressed.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Builders.TarGzBuilder.html b/api/ZeroInstall.Archives.Builders.TarGzBuilder.html new file mode 100644 index 000000000..949ce8cdd --- /dev/null +++ b/api/ZeroInstall.Archives.Builders.TarGzBuilder.html @@ -0,0 +1,242 @@ + + + + + Class TarGzBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarGzBuilder +

+ +
+
Namespace
ZeroInstall.Archives.Builders
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Builds a GZip-compressed TAR archive (.tar.gz).

+
+
+ +
+
[MustDisposeResource]
+public class TarGzBuilder : TarBuilder, IArchiveBuilder, IForwardOnlyBuilder, IDisposable
+
+ + + + +
+
Inheritance
+
+ + +
TarGzBuilder
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ TarGzBuilder(Stream, bool) + +

+ +

Builds a GZip-compressed TAR archive (.tar.gz).

+
+
+ +
+
public TarGzBuilder(Stream stream, bool fast = false)
+
+ +

Parameters

+
+
stream Stream
+

The stream to write the archive to. Will be disposed when the builder is disposed.

+
+
fast bool
+

The compression operation should complete as quickly as possible, even if the resulting file is not optimally compressed.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Builders.TarLzipBuilder.html b/api/ZeroInstall.Archives.Builders.TarLzipBuilder.html new file mode 100644 index 000000000..0fcc60b11 --- /dev/null +++ b/api/ZeroInstall.Archives.Builders.TarLzipBuilder.html @@ -0,0 +1,239 @@ + + + + + Class TarLzipBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarLzipBuilder +

+ +
+
Namespace
ZeroInstall.Archives.Builders
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Builds a Lzip-compressed TAR archive (.tar.lz).

+
+
+ +
+
[MustDisposeResource]
+public class TarLzipBuilder : TarBuilder, IArchiveBuilder, IForwardOnlyBuilder, IDisposable
+
+ + + + +
+
Inheritance
+
+ + +
TarLzipBuilder
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ TarLzipBuilder(Stream) + +

+ +

Builds a Lzip-compressed TAR archive (.tar.lz).

+
+
+ +
+
public TarLzipBuilder(Stream stream)
+
+ +

Parameters

+
+
stream Stream
+

The stream to write the archive to. Will be disposed when the builder is disposed.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Builders.TarZstandardBuilder.html b/api/ZeroInstall.Archives.Builders.TarZstandardBuilder.html new file mode 100644 index 000000000..d1377d6ae --- /dev/null +++ b/api/ZeroInstall.Archives.Builders.TarZstandardBuilder.html @@ -0,0 +1,270 @@ + + + + + Class TarZstandardBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarZstandardBuilder +

+ +
+
Namespace
ZeroInstall.Archives.Builders
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Builds a Zstandard-compressed TAR archive (tar.zst).

+
+
+ +
+
[MustDisposeResource]
+public class TarZstandardBuilder : TarBuilder, IArchiveBuilder, IForwardOnlyBuilder, IDisposable
+
+ + + + +
+
Inheritance
+
+ + +
TarZstandardBuilder
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ TarZstandardBuilder(Stream, bool) + +

+ +

Builds a Zstandard-compressed TAR archive (tar.zst).

+
+
+ +
+
public TarZstandardBuilder(Stream stream, bool fast = false)
+
+ +

Parameters

+
+
stream Stream
+

The stream to write the archive to. Will be disposed when the builder is disposed.

+
+
fast bool
+

The compression operation should complete as quickly as possible, even if the resulting file is not optimally compressed.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ Dispose() + +

+ +

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.

+
+
+ +
+
public override void Dispose()
+
+ + + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Builders.ZipBuilder.html b/api/ZeroInstall.Archives.Builders.ZipBuilder.html new file mode 100644 index 000000000..85f94811a --- /dev/null +++ b/api/ZeroInstall.Archives.Builders.ZipBuilder.html @@ -0,0 +1,443 @@ + + + + + Class ZipBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ZipBuilder +

+ +
+
Namespace
ZeroInstall.Archives.Builders
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Builds a ZIP archive (.zip).

+
+
+ +
+
[MustDisposeResource]
+public class ZipBuilder : IArchiveBuilder, IForwardOnlyBuilder, IDisposable
+
+ + + + +
+
Inheritance
+
+ +
ZipBuilder
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ZipBuilder(Stream) + +

+ +

Builds a ZIP archive (.zip).

+
+
+ +
+
public ZipBuilder(Stream stream)
+
+ +

Parameters

+
+
stream Stream
+

The stream to write the archive to. Will be disposed when the builder is disposed.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ AddDirectory(string) + +

+ +

Adds a subdirectory to the implementation.

+
+
+ +
+
public void AddDirectory(string path)
+
+ +

Parameters

+
+
path string
+

The path of the directory to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ AddFile(string, Stream, UnixTime, bool) + +

+ +

Adds a file to the implementation.

+
+
+ +
+
public void AddFile(string path, Stream stream, UnixTime modifiedTime, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the file to create relative to the implementation root.

+
+
stream Stream
+

The contents of the file.

+
+
modifiedTime UnixTime
+

The last write time to set for the file.

+
+
executable bool
+

true if the file's executable bit is to be set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + + + +

Adds a hardlink to the implementation.

+
+
+ +
+
public void AddHardlink(string path, string target, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the hardlink to create relative to the implementation root.

+
+
target string
+

The path of the existing file the hardlink shall be based on relative to the implementation root. Must point

+
+
executable bool
+

true if the executable bit of the hardlink is set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
NotSupportedException
+

The currently platform or builder does not support hardlinks. Use AddFile(string, Stream, UnixTime, bool) instead.

+
+
+ + + + + + + +

Adds a symbolic link to the implementation.

+
+
+ +
+
public void AddSymlink(string path, string target)
+
+ +

Parameters

+
+
path string
+

The path of the symlink to create relative to the implementation root.

+
+
target string
+

The target the symbolic link shall point to relative to path. May use non-native path separators.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Dispose() + +

+ +

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.

+
+
+ +
+
public void Dispose()
+
+ + + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Builders.html b/api/ZeroInstall.Archives.Builders.html new file mode 100644 index 000000000..09e2216b4 --- /dev/null +++ b/api/ZeroInstall.Archives.Builders.html @@ -0,0 +1,168 @@ + + + + + Namespace ZeroInstall.Archives.Builders | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Archives.Builders

+
+

Building archives (.zip, .tar, etc.).

+
+
+
+ +

+Classes +

+
+
ArchiveBuilder
+

Builds implementation archive files.

+
+
+
+
TarBuilder
+

Builds a TAR archive (.tar).

+
+
+
+
TarBz2Builder
+

Builds a BZip2-compressed TAR archive (.tar.bz2).

+
+
+
+
TarGzBuilder
+

Builds a GZip-compressed TAR archive (.tar.gz).

+
+
+
+
TarLzipBuilder
+

Builds a Lzip-compressed TAR archive (.tar.lz).

+
+
+
+
TarZstandardBuilder
+

Builds a Zstandard-compressed TAR archive (tar.zst).

+
+
+
+
ZipBuilder
+

Builds a ZIP archive (.zip).

+
+
+

+Interfaces +

+
+
IArchiveBuilder
+

Builds an implementation archive file.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.ArchiveExtractor.html b/api/ZeroInstall.Archives.Extractors.ArchiveExtractor.html new file mode 100644 index 000000000..42693887e --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.ArchiveExtractor.html @@ -0,0 +1,552 @@ + + + + + Class ArchiveExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ArchiveExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts implementation archives.

+
+
+ +
+
public abstract class ArchiveExtractor : IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ +
ArchiveExtractor
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + + + + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ArchiveExtractor(ITaskHandler) + +

+ +

Extracts implementation archives.

+
+
+ +
+
protected ArchiveExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Handler + +

+ +

A callback object used when the user needs to be informed about IO tasks.

+
+
+ +
+
protected readonly ITaskHandler Handler
+
+ + + + +

Field Value

+
+
ITaskHandler
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Tag + +

+ +

A Tag to set for see cref="ITask"/>s spawned by this extractor; can be null.

+
+
+ +
+
public object? Tag { get; set; }
+
+ + + + + +

Property Value

+
+
object
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ EnsureFile(Stream, Action<string>) + +

+ +

Ensures that a Stream represents an on-disk file, creating a temporary on-disk copy if necessary.

+
+
+ +
+
protected static void EnsureFile(Stream stream, Action<string> callback)
+
+ +

Parameters

+
+
stream Stream
+

The stream to read. May be Close()d.

+
+
callback Action<string>
+

Called with the file path.

+
+
+ + + + + + + + + + + + + + +

+ EnsureSeekable(Stream, Action<Stream>) + +

+ +

Ensures that a Stream is fully seekable, creating a temporary on-disk copy if necessary.

+
+
+ +
+
protected void EnsureSeekable(Stream stream, Action<Stream> callback)
+
+ +

Parameters

+
+
stream Stream
+

The stream to read.

+
+
callback Action<Stream>
+

Called with the original stream or a temporary seekable copy.

+
+
+ + + + + + + + + + + + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public abstract void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + + +

+ For(string, ITaskHandler) + +

+ +

Creates a new IArchiveExtractor for a specific type of archive.

+
+
+ +
+
public static IArchiveExtractor For(string mimeType, ITaskHandler handler)
+
+ +

Parameters

+
+
mimeType string
+

The MIME type of archive format to extract.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ +

Returns

+
+
IArchiveExtractor
+
+
+ + + + + + + + +

Exceptions

+
+
NotSupportedException
+

No extractor registered for mimeType.

+
+
+ + + + + +

+ NormalizePath(string?, string?) + +

+ +

Normalizes the path of an archive entry.

+
+
+ +
+
protected static string? NormalizePath(string? path, string? subDir)
+
+ +

Parameters

+
+
path string
+

The Unix-style path of the archive entry relative to the archive's root.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ +

Returns

+
+
string
+

The relative path without the subDir; null if the path doesn't lie within the subDir.

+
+
+ + + + + + + + + + + + + +

+ Register(string, Func<ITaskHandler, IArchiveExtractor>) + +

+ +

Registers an additional IArchiveExtractor.

+
+
+ +
+
public static void Register(string mimeType, Func<ITaskHandler, IArchiveExtractor> factory)
+
+ +

Parameters

+
+
mimeType string
+

The MIME type of archive format the extractor handles.

+
+
factory Func<ITaskHandler, IArchiveExtractor>
+

Callback providing instances of the extractor.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.CabExtractor.html b/api/ZeroInstall.Archives.Extractors.CabExtractor.html new file mode 100644 index 000000000..84e14aef9 --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.CabExtractor.html @@ -0,0 +1,306 @@ + + + + + Class CabExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CabExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts MS Cabinets (.cab).

+
+
+ +
+
public class CabExtractor : ArchiveExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + +
CabExtractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ CabExtractor(ITaskHandler) + +

+ +

Extracts MS Cabinets (.cab).

+
+
+ +
+
public CabExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ +

Exceptions

+
+
PlatformNotSupportedException
+

The current platform is not Windows.

+
+
+ + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.DmgExtractor.html b/api/ZeroInstall.Archives.Extractors.DmgExtractor.html new file mode 100644 index 000000000..47bce3a7e --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.DmgExtractor.html @@ -0,0 +1,306 @@ + + + + + Class DmgExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DmgExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts Apple Disk images (.dmg).

+
+
+ +
+
public class DmgExtractor : ArchiveExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + +
DmgExtractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ DmgExtractor(ITaskHandler) + +

+ +

Extracts Apple Disk images (.dmg).

+
+
+ +
+
public DmgExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ +

Exceptions

+
+
PlatformNotSupportedException
+

The current platform is not macOS.

+
+
+ + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.IArchiveExtractor.html b/api/ZeroInstall.Archives.Extractors.IArchiveExtractor.html new file mode 100644 index 000000000..db949a392 --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.IArchiveExtractor.html @@ -0,0 +1,236 @@ + + + + + Interface IArchiveExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IArchiveExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts implementation archives.

+
+
+ +
+
public interface IArchiveExtractor
+
+ + + + + + + + + + + +

Remarks

+

Implementations of this interface are immutable and thread-safe.

+
+ + +

Properties +

+ + + + +

+ Tag + +

+ +

A Tag to set for see cref="ITask"/>s spawned by this extractor; can be null.

+
+
+ +
+
object? Tag { get; set; }
+
+ + + + + +

Property Value

+
+
object
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.MsiExtractor.html b/api/ZeroInstall.Archives.Extractors.MsiExtractor.html new file mode 100644 index 000000000..96f504f86 --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.MsiExtractor.html @@ -0,0 +1,306 @@ + + + + + Class MsiExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class MsiExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts Windows Installer packages (.msi) with one or more embedded CAB archives.

+
+
+ +
+
public class MsiExtractor : ArchiveExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + +
MsiExtractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ MsiExtractor(ITaskHandler) + +

+ +

Extracts Windows Installer packages (.msi) with one or more embedded CAB archives.

+
+
+ +
+
public MsiExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ +

Exceptions

+
+
PlatformNotSupportedException
+

The current platform is not Windows.

+
+
+ + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.RarExtractor.html b/api/ZeroInstall.Archives.Extractors.RarExtractor.html new file mode 100644 index 000000000..4772e91e0 --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.RarExtractor.html @@ -0,0 +1,300 @@ + + + + + Class RarExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RarExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts RAR archives (.rar).

+
+
+ +
+
public class RarExtractor : ArchiveExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + +
RarExtractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ RarExtractor(ITaskHandler) + +

+ +

Extracts RAR archives (.rar).

+
+
+ +
+
public RarExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.RubyGemExtractor.html b/api/ZeroInstall.Archives.Extractors.RubyGemExtractor.html new file mode 100644 index 000000000..82a937574 --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.RubyGemExtractor.html @@ -0,0 +1,308 @@ + + + + + Class RubyGemExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RubyGemExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts Ruby Gem archives (.gem).

+
+
+ +
+
public class RubyGemExtractor : TarGzExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + + + +
RubyGemExtractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ RubyGemExtractor(ITaskHandler) + +

+ +

Extracts Ruby Gem archives (.gem).

+
+
+ +
+
public RubyGemExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.SevenZipExtractor.html b/api/ZeroInstall.Archives.Extractors.SevenZipExtractor.html new file mode 100644 index 000000000..97d8af508 --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.SevenZipExtractor.html @@ -0,0 +1,300 @@ + + + + + Class SevenZipExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SevenZipExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts 7-zip archives (.7z).

+
+
+ +
+
public class SevenZipExtractor : ArchiveExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + +
SevenZipExtractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ SevenZipExtractor(ITaskHandler) + +

+ +

Extracts 7-zip archives (.7z).

+
+
+ +
+
public SevenZipExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.TarBz2Extractor.html b/api/ZeroInstall.Archives.Extractors.TarBz2Extractor.html new file mode 100644 index 000000000..a3ea2bf7d --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.TarBz2Extractor.html @@ -0,0 +1,307 @@ + + + + + Class TarBz2Extractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarBz2Extractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts BZip2-compressed TAR archives (.tar.bz2).

+
+
+ +
+
public class TarBz2Extractor : TarExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + + +
TarBz2Extractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ TarBz2Extractor(ITaskHandler) + +

+ +

Extracts BZip2-compressed TAR archives (.tar.bz2).

+
+
+ +
+
public TarBz2Extractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.TarExtractor.html b/api/ZeroInstall.Archives.Extractors.TarExtractor.html new file mode 100644 index 000000000..aa7ecc9c9 --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.TarExtractor.html @@ -0,0 +1,377 @@ + + + + + Class TarExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts TAR archives (.tar).

+
+
+ +
+
public class TarExtractor : ArchiveExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + +
TarExtractor
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + + + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ TarExtractor(ITaskHandler) + +

+ +

Extracts TAR archives (.tar).

+
+
+ +
+
public TarExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Fields +

+ + + +

+ DefaultMode + +

+ +

The default Mode.

+
+
+ +
+
public const int DefaultMode = 420
+
+ + + + +

Field Value

+
+
int
+
+
+ + + + + + + + + + +

+ ExecuteMode + +

+ +

The Mode that indicate a TAR entry is an executable.

+
+
+ +
+
public const int ExecuteMode = 73
+
+ + + + +

Field Value

+
+
int
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.TarGzExtractor.html b/api/ZeroInstall.Archives.Extractors.TarGzExtractor.html new file mode 100644 index 000000000..1cbc7f16c --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.TarGzExtractor.html @@ -0,0 +1,313 @@ + + + + + Class TarGzExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarGzExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts GZip-compressed TAR archives (.tar.gz).

+
+
+ +
+
public class TarGzExtractor : TarExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + + +
TarGzExtractor
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ TarGzExtractor(ITaskHandler) + +

+ +

Extracts GZip-compressed TAR archives (.tar.gz).

+
+
+ +
+
public TarGzExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.TarLzipExtractor.html b/api/ZeroInstall.Archives.Extractors.TarLzipExtractor.html new file mode 100644 index 000000000..216da28ec --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.TarLzipExtractor.html @@ -0,0 +1,307 @@ + + + + + Class TarLzipExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarLzipExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts Lzip-compressed TAR archives (.tar.lz).

+
+
+ +
+
public class TarLzipExtractor : TarExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + + +
TarLzipExtractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ TarLzipExtractor(ITaskHandler) + +

+ +

Extracts Lzip-compressed TAR archives (.tar.lz).

+
+
+ +
+
public TarLzipExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.TarLzmaExtractor.html b/api/ZeroInstall.Archives.Extractors.TarLzmaExtractor.html new file mode 100644 index 000000000..367b3d0aa --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.TarLzmaExtractor.html @@ -0,0 +1,307 @@ + + + + + Class TarLzmaExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarLzmaExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts LZMA-compressed TAR archives (.tar.lzma).

+
+
+ +
+
public class TarLzmaExtractor : TarExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + + +
TarLzmaExtractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ TarLzmaExtractor(ITaskHandler) + +

+ +

Extracts LZMA-compressed TAR archives (.tar.lzma).

+
+
+ +
+
public TarLzmaExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.TarXzExtractor.html b/api/ZeroInstall.Archives.Extractors.TarXzExtractor.html new file mode 100644 index 000000000..d3170e7fd --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.TarXzExtractor.html @@ -0,0 +1,307 @@ + + + + + Class TarXzExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarXzExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts XZ-compressed TAR archives (tar.xz).

+
+
+ +
+
public class TarXzExtractor : TarExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + + +
TarXzExtractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ TarXzExtractor(ITaskHandler) + +

+ +

Extracts XZ-compressed TAR archives (tar.xz).

+
+
+ +
+
public TarXzExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.TarZstandardExtractor.html b/api/ZeroInstall.Archives.Extractors.TarZstandardExtractor.html new file mode 100644 index 000000000..ae7028113 --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.TarZstandardExtractor.html @@ -0,0 +1,307 @@ + + + + + Class TarZstandardExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TarZstandardExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts Zstandard-compressed TAR archives (tar.zst).

+
+
+ +
+
public class TarZstandardExtractor : TarExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + + +
TarZstandardExtractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ TarZstandardExtractor(ITaskHandler) + +

+ +

Extracts Zstandard-compressed TAR archives (tar.zst).

+
+
+ +
+
public TarZstandardExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.ZipExtractor.html b/api/ZeroInstall.Archives.Extractors.ZipExtractor.html new file mode 100644 index 000000000..512ea4693 --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.ZipExtractor.html @@ -0,0 +1,390 @@ + + + + + Class ZipExtractor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ZipExtractor +

+ +
+
Namespace
ZeroInstall.Archives.Extractors
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Extracts ZIP archives (.zip).

+
+
+ +
+
public class ZipExtractor : ArchiveExtractor, IArchiveExtractor
+
+ + + + +
+
Inheritance
+
+ + +
ZipExtractor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ZipExtractor(ITaskHandler) + +

+ +

Extracts ZIP archives (.zip).

+
+
+ +
+
public ZipExtractor(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ DefaultAttributes + +

+ +

The default ExternalFileAttributes.

+
+
+ +
+
public const int DefaultAttributes = 27525120
+
+ + + + +

Field Value

+
+
int
+
+
+ + + + + + + + + + +

+ ExecuteAttributes + +

+ +

The ExternalFileAttributes that indicate a ZIP entry is an executable file.

+
+
+ +
+
public const int ExecuteAttributes = 4784128
+
+ + + + +

Field Value

+
+
int
+
+
+ + + + + + + + + + +

+ SymlinkAttributes + +

+ +

The ExternalFileAttributes that indicate a ZIP entry is a symlink.

+
+
+ +
+
public const int SymlinkAttributes = 536870912
+
+ + + + +

Field Value

+
+
int
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Extract(IBuilder, Stream, string?) + +

+ +

Extracts an archive.

+
+
+ +
+
public override void Extract(IBuilder builder, Stream stream, string? subDir = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder receiving the extracted files.

+
+
stream Stream
+

The archive data to be extracted.

+
+
subDir string
+

The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The operation was canceled.

+
+
IOException
+

A problem occurred while extracting the archive.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.Extractors.html b/api/ZeroInstall.Archives.Extractors.html new file mode 100644 index 000000000..a698b0524 --- /dev/null +++ b/api/ZeroInstall.Archives.Extractors.html @@ -0,0 +1,208 @@ + + + + + Namespace ZeroInstall.Archives.Extractors | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Archives.Extractors

+
+

Extracting archives (.zip, .tar, etc.).

+
+
+
+ +

+Classes +

+
+
ArchiveExtractor
+

Extracts implementation archives.

+
+
+
+
CabExtractor
+

Extracts MS Cabinets (.cab).

+
+
+
+
DmgExtractor
+

Extracts Apple Disk images (.dmg).

+
+
+
+
MsiExtractor
+

Extracts Windows Installer packages (.msi) with one or more embedded CAB archives.

+
+
+
+
RarExtractor
+

Extracts RAR archives (.rar).

+
+
+
+
RubyGemExtractor
+

Extracts Ruby Gem archives (.gem).

+
+
+
+
SevenZipExtractor
+

Extracts 7-zip archives (.7z).

+
+
+
+
TarBz2Extractor
+

Extracts BZip2-compressed TAR archives (.tar.bz2).

+
+
+
+
TarExtractor
+

Extracts TAR archives (.tar).

+
+
+
+
TarGzExtractor
+

Extracts GZip-compressed TAR archives (.tar.gz).

+
+
+
+
TarLzipExtractor
+

Extracts Lzip-compressed TAR archives (.tar.lz).

+
+
+
+
TarLzmaExtractor
+

Extracts LZMA-compressed TAR archives (.tar.lzma).

+
+
+
+
TarXzExtractor
+

Extracts XZ-compressed TAR archives (tar.xz).

+
+
+
+
TarZstandardExtractor
+

Extracts Zstandard-compressed TAR archives (tar.zst).

+
+
+
+
ZipExtractor
+

Extracts ZIP archives (.zip).

+
+
+

+Interfaces +

+
+
IArchiveExtractor
+

Extracts implementation archives.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.ImplementationServer.html b/api/ZeroInstall.Archives.ImplementationServer.html new file mode 100644 index 000000000..c0209cd5e --- /dev/null +++ b/api/ZeroInstall.Archives.ImplementationServer.html @@ -0,0 +1,334 @@ + + + + + Class ImplementationServer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationServer +

+ +
+
Namespace
ZeroInstall.Archives
+
Assembly
ZeroInstall.Archives.dll
+
+ +

Simple HTTP web server that serves implementations as on-demand generated archives.

+
+
+ +
+
public sealed class ImplementationServer : HttpServer, IDisposable
+
+ + + + +
+
Inheritance
+
+ + +
ImplementationServer
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ImplementationServer(IImplementationStore, ushort, bool) + +

+ +

Starts serving implementations as archives via HTTP.

+
+
+ +
+
public ImplementationServer(IImplementationStore implementationStore, ushort port = 0, bool localOnly = false)
+
+ +

Parameters

+
+
implementationStore IImplementationStore
+

The implementation store to serve implementations from.

+
+
port ushort
+

The TCP port to listen on; 0 to automatically pick free port.

+
+
localOnly bool
+

true to only respond to requests from the local machine instead of the network. Useful for unit tests.

+
+
+ + + + + + + + + +

Exceptions

+
+
WebException
+

Unable to serve on the specified port.

+
+
NotAdminException
+

Needs admin rights to serve HTTP requests.

+
+
+ + + +

Fields +

+ + + +

+ DnsServiceName + +

+ +

DNS name for discovering Zero Install implementation stores.

+
+
+ +
+
public const string DnsServiceName = "_0install-store._tcp"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Dispose() + +

+ +

Stops serving implementations.

+
+
+ +
+
public override void Dispose()
+
+ + + + + + + + + + + + + + + +

+ HandleRequest(HttpListenerContext) + +

+ +

Handles a single HTTP request.

+
+
+ +
+
protected override void HandleRequest(HttpListenerContext context)
+
+ +

Parameters

+
+
context HttpListenerContext
+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Archives.html b/api/ZeroInstall.Archives.html new file mode 100644 index 000000000..bb4105528 --- /dev/null +++ b/api/ZeroInstall.Archives.html @@ -0,0 +1,151 @@ + + + + + Namespace ZeroInstall.Archives | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Archives

+
+

Extracting and building archives (.zip, .tar, etc.).

+

NuGet package: ZeroInstall.Archives

+
+
+
+ +

+Namespaces +

+
+
ZeroInstall.Archives.Builders
+
+

Building archives (.zip, .tar, etc.).

+
+
+
+
ZeroInstall.Archives.Extractors
+
+

Extracting archives (.zip, .tar, etc.).

+
+
+

+Classes +

+
+
BuilderExtensions
+

Helpers for adding Archives to IBuilders.

+
+
+
+
ImplementationServer
+

Simple HTTP web server that serves implementations as on-demand generated archives.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Client.IZeroInstallClient.html b/api/ZeroInstall.Client.IZeroInstallClient.html new file mode 100644 index 000000000..3f8bebcb4 --- /dev/null +++ b/api/ZeroInstall.Client.IZeroInstallClient.html @@ -0,0 +1,765 @@ + + + + + Interface IZeroInstallClient | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IZeroInstallClient +

+ +
+
Namespace
ZeroInstall.Client
+
Assembly
ZeroInstall.Client.dll
+
+ +

Client for invoking Zero Install commands from within other applications.

+
+
+ +
+
public interface IZeroInstallClient
+
+ + + + + + + + + + + + + +

Methods +

+ + + + +

+ DownloadAsync(Requirements, bool) + +

+ +

Downloads a program and compatible versions of all of its dependencies.

+
+
+ +
+
Task<Selections> DownloadAsync(Requirements requirements, bool refresh = false)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements describing the program.

+
+
refresh bool
+

Fetch fresh copies of all used feeds.

+
+
+ +

Returns

+
+
Task<Selections>
+

The downloaded implementations.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file, an invalid signature or digest mismatch.

+
+
InvalidOperationException
+

0install reported a solver error.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ FetchAsync(Implementation) + +

+ +

Downloads a set of Implementations.

+
+
+ +
+
Task FetchAsync(Implementation implementation)
+
+ +

Parameters

+
+
implementation Implementation
+

The implementations to download.

+
+
+ +

Returns

+
+
Task
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file, an invalid signature or digest mismatch.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ GetIntegration(FeedUri, bool) + +

+ +

Returns the desktop integration categories that are currently applied for a specific feed.

+
+
+ +
+
ISet<string> GetIntegration(FeedUri uri, bool machineWide = false)
+
+ +

Parameters

+
+
uri FeedUri
+

The feed URI of the application.

+
+
machineWide bool
+

Get machine-wide desktop integration instead of just for the current user.

+
+
+ +

Returns

+
+
ISet<string>
+

The access point categories (e.g., capability-registration, menu-entry, desktop-icon).

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ GetRunStartInfo(Requirements, bool, bool, params string[]) + +

+ +

Provides a ProcessStartInfo for running a program via Zero Install. +This allows you to wait for the program to exit and/or to capture its output.

+
+
+ +
+
ProcessStartInfo GetRunStartInfo(Requirements requirements, bool refresh = false, bool needsTerminal = false, params string[] arguments)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements describing the program.

+
+
refresh bool
+

Fetch fresh copies of all used feeds.

+
+
needsTerminal bool
+

Indicates that the program requires a terminal in order to run.

+
+
arguments string[]
+

Additional arguments to pass to the program.

+
+
+ +

Returns

+
+
ProcessStartInfo
+
+
+ + + + + + + + + + + + + +

+ IntegrateAsync(FeedUri, IEnumerable<string>?, IEnumerable<string>?, bool) + +

+ +

Adds an application to the application list (if missing) and integrates it into the desktop environment.

+
+
+ +
+
Task IntegrateAsync(FeedUri uri, IEnumerable<string>? add = null, IEnumerable<string>? remove = null, bool machineWide = false)
+
+ +

Parameters

+
+
uri FeedUri
+

The feed URI of the application.

+
+
add IEnumerable<string>
+

The access point categories to add (e.g., capability-registration, menu-entry, desktop-icon).

+
+
remove IEnumerable<string>
+

The access point categories to remove (e.g., capability-registration, menu-entry, desktop-icon).

+
+
machineWide bool
+

Apply the operation machine-wide instead of just for the current user.

+
+
+ +

Returns

+
+
Task
+
+
+ + + + + + + + +

Exceptions

+
+
NotAdminException
+

machineWide was set but the current process is not running with admin rights.

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file or an invalid signature.

+
+
InvalidOperationException
+

0install reported a conflict with existing desktop integration.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ Remove(FeedUri, bool) + +

+ +

Removes an application from the application list and undoes any desktop environment integration.

+
+
+ +
+
void Remove(FeedUri uri, bool machineWide = false)
+
+ +

Parameters

+
+
uri FeedUri
+

The feed URI of the application.

+
+
machineWide bool
+

Apply the operation machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
NotAdminException
+

machineWide was set but the current process is not running with admin rights.

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ Run(Requirements, bool, bool, params string[]) + +

+ +

Runs a program via Zero Install. Does not wait for the program to exit.

+
+
+ +
+
void Run(Requirements requirements, bool refresh = false, bool needsTerminal = false, params string[] arguments)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements describing the program.

+
+
refresh bool
+

Fetch fresh copies of all used feeds.

+
+
needsTerminal bool
+

Indicates that the program requires a terminal in order to run.

+
+
arguments string[]
+

Additional arguments to pass to the program.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file, an invalid signature or digest mismatch.

+
+
InvalidOperationException
+

0install reported a solver or executor error.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install or the target program returned an error.

+
+
+ + + + + +

+ SelectAsync(Requirements, bool, bool) + +

+ +

Selects a program and compatible versions of all of its dependencies.

+
+
+ +
+
Task<Selections> SelectAsync(Requirements requirements, bool refresh = false, bool offline = false)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements describing the program.

+
+
refresh bool
+

Fetch fresh copies of all used feeds.

+
+
offline bool
+

Do not refresh feeds even if they are out-of-date and don't select newer versions of programs for downloading even if they are already known.

+
+
+ +

Returns

+
+
Task<Selections>
+

The selected implementations.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file or an invalid signature.

+
+
InvalidOperationException
+

0install reported a solver error.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ TrustKey(string, string) + +

+ +

Trusts feeds from a specific domain when signed with a specific key.

+
+
+ +
+
void TrustKey(string fingerprint, string domain)
+
+ +

Parameters

+
+
fingerprint string
+

The fingerprint of the key to trust.

+
+
domain string
+

The domain the key should be trusted for.

+
+
+ + + + + + + + + + + + + + +

+ UpdateAsync(Requirements) + +

+ +

Checks for updates to a program and downloads them if found.

+
+
+ +
+
Task<bool> UpdateAsync(Requirements requirements)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements describing the program.

+
+
+ +

Returns

+
+
Task<bool>
+

true if updates where found and downloaded; false if no updates where found.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file, an invalid signature or digest mismatch.

+
+
InvalidOperationException
+

0install reported a solver error.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Client.TemporarilyUnavailableException.html b/api/ZeroInstall.Client.TemporarilyUnavailableException.html new file mode 100644 index 000000000..a867036a6 --- /dev/null +++ b/api/ZeroInstall.Client.TemporarilyUnavailableException.html @@ -0,0 +1,244 @@ + + + + + Class TemporarilyUnavailableException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TemporarilyUnavailableException +

+ +
+
Namespace
ZeroInstall.Client
+
Assembly
ZeroInstall.Client.dll
+
+ +

Zero Install is temporarily unavailable. Try again in a few seconds.

+
+
+ +
+
public class TemporarilyUnavailableException : Exception, ISerializable
+
+ + + + +
+
Inheritance
+
+ + +
TemporarilyUnavailableException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ TemporarilyUnavailableException() + +

+ +
+
+ +
+
public TemporarilyUnavailableException()
+
+ + + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Client.ZeroInstallClient.html b/api/ZeroInstall.Client.ZeroInstallClient.html new file mode 100644 index 000000000..471675a22 --- /dev/null +++ b/api/ZeroInstall.Client.ZeroInstallClient.html @@ -0,0 +1,915 @@ + + + + + Class ZeroInstallClient | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ZeroInstallClient +

+ +
+
Namespace
ZeroInstall.Client
+
Assembly
ZeroInstall.Client.dll
+
+ +

Client for invoking Zero Install commands from within other applications.

+
+
+ +
+
public class ZeroInstallClient : IZeroInstallClient
+
+ + + + +
+
Inheritance
+
+ +
ZeroInstallClient
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ZeroInstallClient(IProcessLauncher, IProcessLauncher?) + +

+ +

Client for invoking Zero Install commands from within other applications.

+
+
+ +
+
public ZeroInstallClient(IProcessLauncher launcher, IProcessLauncher? guiLauncher = null)
+
+ +

Parameters

+
+
launcher IProcessLauncher
+

Used to launch 0install as a child process.

+
+
guiLauncher IProcessLauncher
+

Used to launch 0install-win as a child process.

+
+
+ + + + + + + + + + + + + + +

+ ZeroInstallClient(string, string?) + +

+ +

Creates a new Zero Install client.

+
+
+ +
+
public ZeroInstallClient(string commandLine, string? guiCommandLine = null)
+
+ +

Parameters

+
+
commandLine string
+

The command-line used to launch 0install. Whitespace must be properly escaped.

+
+
guiCommandLine string
+

The optional command-line used to launch 0install-win. Whitespace must be properly escaped.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Detect + +

+ +

Creates a Zero Install client by detecting the location of 0install using environment variables or the Windows registry.

+
+
+ +
+
public static IZeroInstallClient Detect { get; }
+
+ + + + + +

Property Value

+
+
IZeroInstallClient
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ DownloadAsync(Requirements, bool) + +

+ +

Downloads a program and compatible versions of all of its dependencies.

+
+
+ +
+
public Task<Selections> DownloadAsync(Requirements requirements, bool refresh = false)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements describing the program.

+
+
refresh bool
+

Fetch fresh copies of all used feeds.

+
+
+ +

Returns

+
+
Task<Selections>
+

The downloaded implementations.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file, an invalid signature or digest mismatch.

+
+
InvalidOperationException
+

0install reported a solver error.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ FetchAsync(Implementation) + +

+ +

Downloads a set of Implementations.

+
+
+ +
+
public Task FetchAsync(Implementation implementation)
+
+ +

Parameters

+
+
implementation Implementation
+

The implementations to download.

+
+
+ +

Returns

+
+
Task
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file, an invalid signature or digest mismatch.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ GetIntegration(FeedUri, bool) + +

+ +

Returns the desktop integration categories that are currently applied for a specific feed.

+
+
+ +
+
public ISet<string> GetIntegration(FeedUri uri, bool machineWide = false)
+
+ +

Parameters

+
+
uri FeedUri
+

The feed URI of the application.

+
+
machineWide bool
+

Get machine-wide desktop integration instead of just for the current user.

+
+
+ +

Returns

+
+
ISet<string>
+

The access point categories (e.g., capability-registration, menu-entry, desktop-icon).

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ GetRunStartInfo(Requirements, bool, bool, params string[]) + +

+ +

Provides a ProcessStartInfo for running a program via Zero Install. +This allows you to wait for the program to exit and/or to capture its output.

+
+
+ +
+
public ProcessStartInfo GetRunStartInfo(Requirements requirements, bool refresh = false, bool needsTerminal = false, params string[] arguments)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements describing the program.

+
+
refresh bool
+

Fetch fresh copies of all used feeds.

+
+
needsTerminal bool
+

Indicates that the program requires a terminal in order to run.

+
+
arguments string[]
+

Additional arguments to pass to the program.

+
+
+ +

Returns

+
+
ProcessStartInfo
+
+
+ + + + + + + + + + + + + +

+ IntegrateAsync(FeedUri, IEnumerable<string>?, IEnumerable<string>?, bool) + +

+ +

Adds an application to the application list (if missing) and integrates it into the desktop environment.

+
+
+ +
+
public Task IntegrateAsync(FeedUri uri, IEnumerable<string>? add = null, IEnumerable<string>? remove = null, bool machineWide = false)
+
+ +

Parameters

+
+
uri FeedUri
+

The feed URI of the application.

+
+
add IEnumerable<string>
+

The access point categories to add (e.g., capability-registration, menu-entry, desktop-icon).

+
+
remove IEnumerable<string>
+

The access point categories to remove (e.g., capability-registration, menu-entry, desktop-icon).

+
+
machineWide bool
+

Apply the operation machine-wide instead of just for the current user.

+
+
+ +

Returns

+
+
Task
+
+
+ + + + + + + + +

Exceptions

+
+
NotAdminException
+

machineWide was set but the current process is not running with admin rights.

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file or an invalid signature.

+
+
InvalidOperationException
+

0install reported a conflict with existing desktop integration.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ Remove(FeedUri, bool) + +

+ +

Removes an application from the application list and undoes any desktop environment integration.

+
+
+ +
+
public void Remove(FeedUri uri, bool machineWide = false)
+
+ +

Parameters

+
+
uri FeedUri
+

The feed URI of the application.

+
+
machineWide bool
+

Apply the operation machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
NotAdminException
+

machineWide was set but the current process is not running with admin rights.

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ Run(Requirements, bool, bool, params string[]) + +

+ +

Runs a program via Zero Install. Does not wait for the program to exit.

+
+
+ +
+
public void Run(Requirements requirements, bool refresh = false, bool needsTerminal = false, params string[] arguments)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements describing the program.

+
+
refresh bool
+

Fetch fresh copies of all used feeds.

+
+
needsTerminal bool
+

Indicates that the program requires a terminal in order to run.

+
+
arguments string[]
+

Additional arguments to pass to the program.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file, an invalid signature or digest mismatch.

+
+
InvalidOperationException
+

0install reported a solver or executor error.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install or the target program returned an error.

+
+
+ + + + + +

+ SelectAsync(Requirements, bool, bool) + +

+ +

Selects a program and compatible versions of all of its dependencies.

+
+
+ +
+
public Task<Selections> SelectAsync(Requirements requirements, bool refresh = false, bool offline = false)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements describing the program.

+
+
refresh bool
+

Fetch fresh copies of all used feeds.

+
+
offline bool
+

Do not refresh feeds even if they are out-of-date and don't select newer versions of programs for downloading even if they are already known.

+
+
+ +

Returns

+
+
Task<Selections>
+

The selected implementations.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file or an invalid signature.

+
+
InvalidOperationException
+

0install reported a solver error.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + + +

+ TrustKey(string, string) + +

+ +

Trusts feeds from a specific domain when signed with a specific key.

+
+
+ +
+
public void TrustKey(string fingerprint, string domain)
+
+ +

Parameters

+
+
fingerprint string
+

The fingerprint of the key to trust.

+
+
domain string
+

The domain the key should be trusted for.

+
+
+ + + + + + + + + + + + + + +

+ UpdateAsync(Requirements) + +

+ +

Checks for updates to a program and downloads them if found.

+
+
+ +
+
public Task<bool> UpdateAsync(Requirements requirements)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements describing the program.

+
+
+ +

Returns

+
+
Task<bool>
+

true if updates where found and downloaded; false if no updates where found.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

0install could not be launched or reported a problem accessing the filesystem.

+
+
UnauthorizedAccessException
+

0install reported that access to a resource was denied.

+
+
WebException
+

0install reported a problem downloading a file.

+
+
InvalidDataException
+

0install reported a problem parsing a file, an invalid signature or digest mismatch.

+
+
InvalidOperationException
+

0install reported a solver error.

+
+
OperationCanceledException
+

The user canceled the operation.

+
+
TemporarilyUnavailableException
+

0install is temporarily unavailable. Try again in a few seconds.

+
+
ExitCodeException
+

0install returned another error.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Client.html b/api/ZeroInstall.Client.html new file mode 100644 index 000000000..983987442 --- /dev/null +++ b/api/ZeroInstall.Client.html @@ -0,0 +1,144 @@ + + + + + Namespace ZeroInstall.Client | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Client

+
+

Client library for invoking Zero Install commands from within other applications.

+

NuGet package: ZeroInstall.Client

+
+
+
+ +

+Classes +

+
+
TemporarilyUnavailableException
+

Zero Install is temporarily unavailable. Try again in a few seconds.

+
+
+
+
ZeroInstallClient
+

Client for invoking Zero Install commands from within other applications.

+
+
+

+Interfaces +

+
+
IZeroInstallClient
+

Client for invoking Zero Install commands from within other applications.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.AddFeed.html b/api/ZeroInstall.Commands.Basic.AddFeed.html new file mode 100644 index 000000000..f88fbba64 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.AddFeed.html @@ -0,0 +1,452 @@ + + + + + Class AddFeed | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AddFeed +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Register an additional source of implementations (versions) of a program.

+
+
+ +
+
public class AddFeed : AddRemoveFeedCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
AddFeed
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ AddFeed(ICommandHandler) + +

+ +

Register an additional source of implementations (versions) of a program.

+
+
+ +
+
public AddFeed(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "add-feed"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ExecuteHelper(IEnumerable<FeedUri>, FeedReference, Stability) + +

+ +

Registers or unregisters an additional feed source for a set of interfaces.

+
+
+ +
+
protected override ExitCode ExecuteHelper(IEnumerable<FeedUri> interfaces, FeedReference source, Stability suggestedStabilityPolicy)
+
+ +

Parameters

+
+
interfaces IEnumerable<FeedUri>
+

The set of interface URIs to register the feed source for.

+
+
source FeedReference
+

The feed reference to register for the interfaces.

+
+
suggestedStabilityPolicy Stability
+

The suggested value for StabilityPolicy. Will be Unset unless there is exactly one Implementation in the Feed.

+
+
+ +

Returns

+
+
ExitCode
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.AddRemoveFeedCommand.html b/api/ZeroInstall.Commands.Basic.AddRemoveFeedCommand.html new file mode 100644 index 000000000..485d2e2ac --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.AddRemoveFeedCommand.html @@ -0,0 +1,558 @@ + + + + + Class AddRemoveFeedCommand | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AddRemoveFeedCommand +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Common base class for AddFeed and RemoveFeed.

+
+
+ +
+
public abstract class AddRemoveFeedCommand : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
AddRemoveFeedCommand
+
+
+ + +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ AddRemoveFeedCommand(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
protected AddRemoveFeedCommand(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + + +

+ ExecuteHelper(IEnumerable<FeedUri>, FeedReference, Stability) + +

+ +

Registers or unregisters an additional feed source for a set of interfaces.

+
+
+ +
+
protected abstract ExitCode ExecuteHelper(IEnumerable<FeedUri> interfaces, FeedReference source, Stability suggestedStabilityPolicy)
+
+ +

Parameters

+
+
interfaces IEnumerable<FeedUri>
+

The set of interface URIs to register the feed source for.

+
+
source FeedReference
+

The feed reference to register for the interfaces.

+
+
suggestedStabilityPolicy Stability
+

The suggested value for StabilityPolicy. Will be Unset unless there is exactly one Implementation in the Feed.

+
+
+ +

Returns

+
+
ExitCode
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.CatalogMan.html b/api/ZeroInstall.Commands.Basic.CatalogMan.html new file mode 100644 index 000000000..eebe064bb --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.CatalogMan.html @@ -0,0 +1,414 @@ + + + + + Class CatalogMan | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CatalogMan +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Manages the Catalogs provided by the ICatalogManager.

+
+
+ +
+
public sealed class CatalogMan : CliMultiCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
CatalogMan
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ CatalogMan(ICommandHandler) + +

+ +

Manages the Catalogs provided by the ICatalogManager.

+
+
+ +
+
public CatalogMan(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "catalog"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ SubCommandNames + +

+ +

A list of sub-command names (without alternatives) as used in command-line arguments in lower-case.

+
+
+ +
+
public override IEnumerable<string> SubCommandNames { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ GetCommand(string) + +

+ +

Creates a new sub-CliCommand based on a name.

+
+
+ +
+
public override CliCommand GetCommand(string commandName)
+
+ +

Parameters

+
+
commandName string
+

The command name to look for; case-insensitive.

+
+
+ +

Returns

+
+
CliCommand
+

The requested sub-CliCommand.

+
+
+ + + + + + + + +

Exceptions

+
+
OptionException
+

commandName is an unknown command.

+
+
IOException
+

There was a problem accessing a configuration file or one of the stores.

+
+
UnauthorizedAccessException
+

Access to a configuration file or one of the stores was not permitted.

+
+
InvalidDataException
+

A configuration file is damaged.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Configure.html b/api/ZeroInstall.Commands.Basic.Configure.html new file mode 100644 index 000000000..8cbc6be73 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Configure.html @@ -0,0 +1,541 @@ + + + + + Class Configure | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Configure +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

View or change Config.

+
+
+ +
+
public class Configure : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
Configure
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Configure(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
public Configure(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "config"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.DefaultCommand.html b/api/ZeroInstall.Commands.Basic.DefaultCommand.html new file mode 100644 index 000000000..d93aea6e2 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.DefaultCommand.html @@ -0,0 +1,507 @@ + + + + + Class DefaultCommand | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DefaultCommand +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

The default command used when no command is explicitly specified.

+
+
+ +
+
public class DefaultCommand : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
DefaultCommand
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ DefaultCommand(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
public DefaultCommand(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Digest.html b/api/ZeroInstall.Commands.Basic.Digest.html new file mode 100644 index 000000000..fc519a01a --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Digest.html @@ -0,0 +1,570 @@ + + + + + Class Digest | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Digest +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Calculate the manifest digest of a directory or archive.

+
+
+ +
+
public class Digest : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
Digest
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Digest(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
public Digest(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "digest"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Download.html b/api/ZeroInstall.Commands.Basic.Download.html new file mode 100644 index 000000000..f57893287 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Download.html @@ -0,0 +1,750 @@ + + + + + Class Download | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Download +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

This behaves similarly to Selection, except that it also downloads the selected versions if they are not already cached.

+
+
+ +
+
public class Download : Selection
+
+ + + + +
+
Inheritance
+
+ + + + + +
Download
+
+
+ + +
+
Derived
+
+ + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Download(ICommandHandler) + +

+ +

Creates a new download command.

+
+
+ +
+
public Download(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + + + +

+ Download(ICommandHandler, bool, bool, bool) + +

+ +

Creates a new download command.

+
+
+ +
+
protected Download(ICommandHandler handler, bool outputOptions = true, bool refreshOptions = true, bool customizeOptions = true)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
outputOptions bool
+

Whether to add command-line options controlling output.

+
+
refreshOptions bool
+

Whether to add command-line options controlling refresh behavior.

+
+
customizeOptions bool
+

Whether to add command-line options for customizing selected implementations.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "download"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ UncachedImplementations + +

+ +

Implementations referenced in Selections that are not available in the IImplementationStore.

+
+
+ +
+
protected List<Implementation>? UncachedImplementations
+
+ + + + +

Field Value

+
+
List<Implementation>
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ MinimumNetworkUseForBackgroundSelfUpdate + +

+ +

The minimum EffectiveNetworkUse at which BackgroundSelfUpdate() will consider an update check.

+
+
+ +
+
protected override NetworkLevel MinimumNetworkUseForBackgroundSelfUpdate { get; }
+
+ + + + + +

Property Value

+
+
NetworkLevel
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ BackgroundSelfUpdateAndClean() + +

+ +

Automatically updates Zero Install itself in a background process. +If no update check is due and we are in IsLibraryMode instead removes outdated implementations in a background process.

+
+
+ +
+
protected void BackgroundSelfUpdateAndClean()
+
+ + + + + + + + + + + + + + + +

+ DownloadUncachedImplementations() + +

+ +

Downloads any Implementations in Selection that are missing from IImplementationStore.

+
+
+ +
+
protected void DownloadUncachedImplementations()
+
+ + + + + + + + + +

Remarks

+

Makes sure ISolver ran with up-to-date feeds before downloading any implementations.

+
+ + + + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + + +

+ ShowOutput() + +

+ +
+
+ +
+
protected override ExitCode ShowOutput()
+
+ + +

Returns

+
+
ExitCode
+
+
+ + + + + + + + + + + + + +

+ Solve() + +

+ +

Runs Solve(Requirements) (unless SelectionsDocument is true) and stores the result in Selections.

+
+
+ +
+
protected override void Solve()
+
+ + + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
IOException
+

An external application or file required by the solver could not be accessed.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Export.html b/api/ZeroInstall.Commands.Basic.Export.html new file mode 100644 index 000000000..de9c1e087 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Export.html @@ -0,0 +1,648 @@ + + + + + Class Export | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Export +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Exports all feeds and implementations required to launch the program specified by URI.

+
+
+ +
+
public sealed class Export : Download
+
+ + + + +
+
Inheritance
+
+ + + + + + +
Export
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Export(ICommandHandler) + +

+ +

Creates a new export command.

+
+
+ +
+
public Export(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "export"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + + +

+ Parse(IReadOnlyList<string>) + +

+ +

Parses command-line arguments and stores the result in the command.

+
+
+ +
+
public override void Parse(IReadOnlyList<string> args)
+
+ +

Parameters

+
+
args IReadOnlyList<string>
+

The command-line arguments to be parsed.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user asked to see help information, version information, etc..

+
+
OptionException
+

args contains unknown options.

+
+
IOException
+

An IO operation failed.

+
+
UnauthorizedAccessException
+

More privileges are required.

+
+
UriFormatException
+

The URI or local path specified is invalid.

+
+
+ + + + + +

+ ShowOutput() + +

+ +
+
+ +
+
protected override ExitCode ShowOutput()
+
+ + +

Returns

+
+
ExitCode
+
+
+ + + + + + + + + + + + + +

+ Solve() + +

+ +

Runs Solve(Requirements) (unless SelectionsDocument is true) and stores the result in Selections.

+
+
+ +
+
protected override void Solve()
+
+ + + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
IOException
+

An external application or file required by the solver could not be accessed.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.ExportHelp.html b/api/ZeroInstall.Commands.Basic.ExportHelp.html new file mode 100644 index 000000000..d5d1d4c7f --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.ExportHelp.html @@ -0,0 +1,540 @@ + + + + + Class ExportHelp | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ExportHelp +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Exports all CliCommand help texts as HTML.

+
+
+ +
+
public class ExportHelp : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
ExportHelp
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ExportHelp(ICommandHandler) + +

+ +

Exports all CliCommand help texts as HTML.

+
+
+ +
+
public ExportHelp(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "export-help"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Exporters.Exporter.html b/api/ZeroInstall.Commands.Basic.Exporters.Exporter.html new file mode 100644 index 000000000..a935ab9d2 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Exporters.Exporter.html @@ -0,0 +1,413 @@ + + + + + Class Exporter | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Exporter +

+ +
+
Namespace
ZeroInstall.Commands.Basic.Exporters
+
Assembly
0install.dll
+
+ +

Exports feeds and implementations listed in a Selections document.

+
+
+ +
+
public class Exporter
+
+ + + + +
+
Inheritance
+
+ +
Exporter
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Exporter(Selections, Architecture, string) + +

+ +

Creates a new exporter.

+
+
+ +
+
public Exporter(Selections selections, Architecture architecture, string destination)
+
+ +

Parameters

+
+
selections Selections
+

A list of ImplementationSelections to check for referenced feeds.

+
+
architecture Architecture
+

The Architecture the Selections were generated for.

+
+
destination string
+

The path of the directory to export to.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

The directory destination could not be created.

+
+
UnauthorizedAccessException
+

Creating the directory destination is not permitted.

+
+
+ + + +

Methods +

+ + + + +

+ DeployImportScript() + +

+ +

Deploys a script for importing exported feeds and implementations.

+
+
+ +
+
public void DeployImportScript()
+
+ + + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing the script.

+
+
UnauthorizedAccessException
+

Write access to the script is not permitted.

+
+
+ + + + + +

+ ExportFeeds(IFeedCache, IOpenPgp) + +

+ +

Exports all feeds listed in a Selections document along with any OpenPGP public key files required for validation.

+
+
+ +
+
public void ExportFeeds(IFeedCache feedCache, IOpenPgp openPgp)
+
+ +

Parameters

+
+
feedCache IFeedCache
+

Used to get local feed files.

+
+
openPgp IOpenPgp
+

Used to get export keys feeds were signed with.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A feed or GnuPG could not be read from the cache.

+
+
UnauthorizedAccessException
+

Read or access to a file is not permitted.

+
+
+ + + + + +

+ ExportIcons(IEnumerable<Icon>, IIconStore) + +

+ +

Exports all specified icons.

+
+
+ +
+
public void ExportIcons(IEnumerable<Icon> icons, IIconStore iconStore)
+
+ +

Parameters

+
+
icons IEnumerable<Icon>
+

The icons to export.

+
+
iconStore IIconStore
+

The icon store to export the icons from.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while reading or writing a file.

+
+
UnauthorizedAccessException
+

Read or access to a file is not permitted.

+
+
WebException
+

A problem occurred while downloading icons.

+
+
+ + + + + +

+ ExportImplementations(IImplementationStore, ITaskHandler) + +

+ +

Exports all implementations listed in a Selections document as archives.

+
+
+ +
+
public void ExportImplementations(IImplementationStore implementationStore, ITaskHandler handler)
+
+ +

Parameters

+
+
implementationStore IImplementationStore
+

Used to get cached implementations.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

An implementation archive could not be created.

+
+
UnauthorizedAccessException
+

Read or access to a file is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Exporters.HelpExporterBase.html b/api/ZeroInstall.Commands.Basic.Exporters.HelpExporterBase.html new file mode 100644 index 000000000..f6ceae9e6 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Exporters.HelpExporterBase.html @@ -0,0 +1,456 @@ + + + + + Class HelpExporterBase | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class HelpExporterBase +

+ +
+
Namespace
ZeroInstall.Commands.Basic.Exporters
+
Assembly
0install.dll
+
+ +

Common base class for exporting all CliCommand help texts in a structured text format.

+
+
+ +
+
public abstract class HelpExporterBase
+
+ + + + +
+
Inheritance
+
+ +
HelpExporterBase
+
+
+ + +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ CommandDetails(string?, string, string) + +

+ +
+
+ +
+
protected abstract string CommandDetails(string? name, string description, string usage)
+
+ +

Parameters

+
+
name string
+
+
description string
+
+
usage string
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ CommandListEntry(string?, string) + +

+ +
+
+ +
+
protected abstract string CommandListEntry(string? name, string description)
+
+ +

Parameters

+
+
name string
+
+
description string
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ CommandListFooter() + +

+ +
+
+ +
+
protected abstract string CommandListFooter()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ CommandListHeader() + +

+ +
+
+ +
+
protected abstract string CommandListHeader()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ OptionListEntry(IEnumerable<string>, string) + +

+ +
+
+ +
+
protected abstract string OptionListEntry(IEnumerable<string> prototypes, string description)
+
+ +

Parameters

+
+
prototypes IEnumerable<string>
+
+
description string
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ OptionListFooter() + +

+ +
+
+ +
+
protected abstract string OptionListFooter()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ OptionListHeader() + +

+ +
+
+ +
+
protected abstract string OptionListHeader()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns all CliCommand help texts in a structured text format.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Exporters.HtmlHelpExporter.html b/api/ZeroInstall.Commands.Basic.Exporters.HtmlHelpExporter.html new file mode 100644 index 000000000..920547aab --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Exporters.HtmlHelpExporter.html @@ -0,0 +1,422 @@ + + + + + Class HtmlHelpExporter | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class HtmlHelpExporter +

+ +
+
Namespace
ZeroInstall.Commands.Basic.Exporters
+
Assembly
0install.dll
+
+ +

Exports all CliCommand help texts as HTML.

+
+
+ +
+
public class HtmlHelpExporter : HelpExporterBase
+
+ + + + +
+
Inheritance
+
+ + +
HtmlHelpExporter
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ CommandDetails(string?, string, string) + +

+ +
+
+ +
+
protected override string CommandDetails(string? name, string description, string usage)
+
+ +

Parameters

+
+
name string
+
+
description string
+
+
usage string
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ CommandListEntry(string?, string) + +

+ +
+
+ +
+
protected override string CommandListEntry(string? name, string description)
+
+ +

Parameters

+
+
name string
+
+
description string
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ CommandListFooter() + +

+ +
+
+ +
+
protected override string CommandListFooter()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ CommandListHeader() + +

+ +
+
+ +
+
protected override string CommandListHeader()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ OptionListEntry(IEnumerable<string>, string) + +

+ +
+
+ +
+
protected override string OptionListEntry(IEnumerable<string> prototypes, string description)
+
+ +

Parameters

+
+
prototypes IEnumerable<string>
+
+
description string
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ OptionListFooter() + +

+ +
+
+ +
+
protected override string OptionListFooter()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ OptionListHeader() + +

+ +
+
+ +
+
protected override string OptionListHeader()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Exporters.html b/api/ZeroInstall.Commands.Basic.Exporters.html new file mode 100644 index 000000000..2f771ea22 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Exporters.html @@ -0,0 +1,140 @@ + + + + + Namespace ZeroInstall.Commands.Basic.Exporters | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Commands.Basic.Exporters

+
+

Utilitiy classes for exporting data from Zero Install.

+
+
+
+ +

+Classes +

+
+
Exporter
+

Exports feeds and implementations listed in a Selections document.

+
+
+
+
HelpExporterBase
+

Common base class for exporting all CliCommand help texts in a structured text format.

+
+
+
+
HtmlHelpExporter
+

Exports all CliCommand help texts as HTML.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Fetch.html b/api/ZeroInstall.Commands.Basic.Fetch.html new file mode 100644 index 000000000..afda67b5c --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Fetch.html @@ -0,0 +1,541 @@ + + + + + Class Fetch | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Fetch +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Downloads a set of Implementations piped in as XML via stdin (for programmatic use). Use Feed format with no inner linebreaks and terminated by a single linebreak.

+
+
+ +
+
public class Fetch : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
Fetch
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Fetch(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
public Fetch(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "fetch"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Import.html b/api/ZeroInstall.Commands.Basic.Import.html new file mode 100644 index 000000000..60fc355ef --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Import.html @@ -0,0 +1,546 @@ + + + + + Class Import | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Import +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Import a feed from a local file, as if it had been downloaded from the network.

+
+
+ +
+
public class Import : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
Import
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

This is useful when testing a feed file, to avoid uploading it to a remote server in order to download it again. The file must have a trusted digital signature, as when fetching from the network.

+
+ + +

Constructors +

+ + + + +

+ Import(ICommandHandler) + +

+ +

Import a feed from a local file, as if it had been downloaded from the network.

+
+
+ +
+
public Import(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + +

Remarks

+

This is useful when testing a feed file, to avoid uploading it to a remote server in order to download it again. The file must have a trusted digital signature, as when fetching from the network.

+
+ + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "import"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.List.html b/api/ZeroInstall.Commands.Basic.List.html new file mode 100644 index 000000000..7594c77d2 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.List.html @@ -0,0 +1,546 @@ + + + + + Class List | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class List +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

List all known interface (program) URIs.

+
+
+ +
+
public class List : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
List
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

If a search term is given, only URIs containing that string are shown (case insensitive).

+
+ + +

Constructors +

+ + + + +

+ List(ICommandHandler) + +

+ +

List all known interface (program) URIs.

+
+
+ +
+
public List(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + +

Remarks

+

If a search term is given, only URIs containing that string are shown (case insensitive).

+
+ + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "list"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.ListFeeds.html b/api/ZeroInstall.Commands.Basic.ListFeeds.html new file mode 100644 index 000000000..754c891e1 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.ListFeeds.html @@ -0,0 +1,569 @@ + + + + + Class ListFeeds | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ListFeeds +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

List all known feed URIs for a specific interface.

+
+
+ +
+
public class ListFeeds : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
ListFeeds
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ListFeeds(ICommandHandler) + +

+ +

List all known feed URIs for a specific interface.

+
+
+ +
+
public ListFeeds(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "list-feeds"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.RemoveFeed.html b/api/ZeroInstall.Commands.Basic.RemoveFeed.html new file mode 100644 index 000000000..5b032b44e --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.RemoveFeed.html @@ -0,0 +1,452 @@ + + + + + Class RemoveFeed | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RemoveFeed +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Un-register a feed, reversing the effect of AddFeed.

+
+
+ +
+
public class RemoveFeed : AddRemoveFeedCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
RemoveFeed
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ RemoveFeed(ICommandHandler) + +

+ +

Un-register a feed, reversing the effect of AddFeed.

+
+
+ +
+
public RemoveFeed(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "remove-feed"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ExecuteHelper(IEnumerable<FeedUri>, FeedReference, Stability) + +

+ +

Registers or unregisters an additional feed source for a set of interfaces.

+
+
+ +
+
protected override ExitCode ExecuteHelper(IEnumerable<FeedUri> interfaces, FeedReference source, Stability suggestedStabilityPolicy)
+
+ +

Parameters

+
+
interfaces IEnumerable<FeedUri>
+

The set of interface URIs to register the feed source for.

+
+
source FeedReference
+

The feed reference to register for the interfaces.

+
+
suggestedStabilityPolicy Stability
+

The suggested value for StabilityPolicy. Will be Unset unless there is exactly one Implementation in the Feed.

+
+
+ +

Returns

+
+
ExitCode
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Run.html b/api/ZeroInstall.Commands.Basic.Run.html new file mode 100644 index 000000000..64fd2e288 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Run.html @@ -0,0 +1,621 @@ + + + + + Class Run | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Run +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

This behaves similarly to Download, except that it also runs the program after ensuring it is in the cache.

+
+
+ +
+
public class Run : Download
+
+ + + + +
+
Inheritance
+
+ + + + + + +
Run
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Run(ICommandHandler) + +

+ +

Creates a new run command.

+
+
+ +
+
public Run(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "run"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + + +

+ Solve() + +

+ +

Runs Solve(Requirements) (unless SelectionsDocument is true) and stores the result in Selections.

+
+
+ +
+
protected override void Solve()
+
+ + + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
IOException
+

An external application or file required by the solver could not be accessed.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Search.html b/api/ZeroInstall.Commands.Basic.Search.html new file mode 100644 index 000000000..f22b542b2 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Search.html @@ -0,0 +1,540 @@ + + + + + Class Search | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Search +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Searches for feeds indexed by the mirror server.

+
+
+ +
+
public class Search : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
Search
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Search(ICommandHandler) + +

+ +

Searches for feeds indexed by the mirror server.

+
+
+ +
+
public Search(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "search"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Selection.html b/api/ZeroInstall.Commands.Basic.Selection.html new file mode 100644 index 000000000..8beb5f619 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Selection.html @@ -0,0 +1,981 @@ + + + + + Class Selection | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Selection +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Select a version of the program identified by URI, and compatible versions of all of its dependencies.

+
+
+ +
+
public class Selection : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
Selection
+
+
+ + +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Selection(ICommandHandler) + +

+ +

Creates a new select command.

+
+
+ +
+
public Selection(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + + + +

+ Selection(ICommandHandler, bool, bool, bool) + +

+ +

Creates a new select command.

+
+
+ +
+
protected Selection(ICommandHandler handler, bool outputOptions = true, bool refreshOptions = true, bool customizeOptions = true)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
outputOptions bool
+

Whether to add command-line options controlling output.

+
+
refreshOptions bool
+

Whether to add command-line options controlling refresh behavior.

+
+
customizeOptions bool
+

Whether to add command-line options for customizing selected implementations.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ CustomizeSelections + +

+ +

Indicates the user wants a UI to modify the Selections.

+
+
+ +
+
protected bool CustomizeSelections
+
+ + + + +

Field Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "select"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ Selections + +

+ +

Cached ISolver results.

+
+
+ +
+
protected Selections? Selections
+
+ + + + +

Field Value

+
+
Selections
+
+
+ + + + + + + + + + +

+ SelectionsDocument + +

+ +

Indicates the user provided a pre-computed Selections XML document instead of using the ISolver.

+
+
+ +
+
protected bool SelectionsDocument
+
+ + + + +

Field Value

+
+
bool
+
+
+ + + + + + + + + + +

+ ShowXml + +

+ +

Indicates the user wants a machine-readable output.

+
+
+ +
+
protected bool ShowXml
+
+ + + + +

Field Value

+
+
bool
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Requirements + +

+ +

A set of requirements/restrictions imposed by the user on the implementation selection process as parsed from the command-line arguments.

+
+
+ +
+
protected Requirements Requirements { get; }
+
+ + + + + +

Property Value

+
+
Requirements
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + + +

+ Parse(IReadOnlyList<string>) + +

+ +

Parses command-line arguments and stores the result in the command.

+
+
+ +
+
public override void Parse(IReadOnlyList<string> args)
+
+ +

Parameters

+
+
args IReadOnlyList<string>
+

The command-line arguments to be parsed.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user asked to see help information, version information, etc..

+
+
OptionException
+

args contains unknown options.

+
+
IOException
+

An IO operation failed.

+
+
UnauthorizedAccessException
+

More privileges are required.

+
+
UriFormatException
+

The URI or local path specified is invalid.

+
+
+ + + + + +

+ RefreshSolve() + +

+ +

Run Solve() with Refresh set to true.

+
+
+ +
+
protected void RefreshSolve()
+
+ + + + + + + + + + + + + + + +

+ SetInterfaceUri(FeedUri) + +

+ +

Sets InterfaceUri and applies Requirements options that need to be deferred to the end of the parsing process.

+
+
+ +
+
protected void SetInterfaceUri(FeedUri uri)
+
+ +

Parameters

+
+
uri FeedUri
+
+
+ + + + + + + + + + + + + + +

+ ShowOutput() + +

+ +
+
+ +
+
protected virtual ExitCode ShowOutput()
+
+ + +

Returns

+
+
ExitCode
+
+
+ + + + + + + + + + + + + +

+ ShowSelections() + +

+ +

Displays the Selections to the user.

+
+
+ +
+
protected void ShowSelections()
+
+ + + + + + + + + + + + + + + +

+ Solve() + +

+ +

Runs Solve(Requirements) (unless SelectionsDocument is true) and stores the result in Selections.

+
+
+ +
+
protected virtual void Solve()
+
+ + + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
IOException
+

An external application or file required by the solver could not be accessed.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.Add.html b/api/ZeroInstall.Commands.Basic.StoreMan.Add.html new file mode 100644 index 000000000..6b2cf2e73 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.Add.html @@ -0,0 +1,554 @@ + + + + + Class StoreMan.Add | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.Add +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.Add : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.Add
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Add(ICommandHandler) + +

+ +
+
+ +
+
public Add(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "add"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.Audit.html b/api/ZeroInstall.Commands.Basic.StoreMan.Audit.html new file mode 100644 index 000000000..f224eb703 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.Audit.html @@ -0,0 +1,525 @@ + + + + + Class StoreMan.Audit | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.Audit +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.Audit : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.Audit
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Audit(ICommandHandler) + +

+ +
+
+ +
+
public Audit(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "audit"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.Copy.html b/api/ZeroInstall.Commands.Basic.StoreMan.Copy.html new file mode 100644 index 000000000..dc3d74be6 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.Copy.html @@ -0,0 +1,583 @@ + + + + + Class StoreMan.Copy | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.Copy +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.Copy : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.Copy
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Copy(ICommandHandler) + +

+ +
+
+ +
+
public Copy(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "copy"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.Export.html b/api/ZeroInstall.Commands.Basic.StoreMan.Export.html new file mode 100644 index 000000000..2fb3d6b07 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.Export.html @@ -0,0 +1,583 @@ + + + + + Class StoreMan.Export | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.Export +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.Export : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.Export
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Export(ICommandHandler) + +

+ +
+
+ +
+
public Export(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "export"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.Find.html b/api/ZeroInstall.Commands.Basic.StoreMan.Find.html new file mode 100644 index 000000000..d6e861411 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.Find.html @@ -0,0 +1,583 @@ + + + + + Class StoreMan.Find | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.Find +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.Find : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.Find
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Find(ICommandHandler) + +

+ +
+
+ +
+
public Find(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "find"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.List.html b/api/ZeroInstall.Commands.Basic.StoreMan.List.html new file mode 100644 index 000000000..a93e94db3 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.List.html @@ -0,0 +1,554 @@ + + + + + Class StoreMan.List | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.List +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.List : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.List
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ List(ICommandHandler) + +

+ +
+
+ +
+
public List(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "list"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.ListImplementations.html b/api/ZeroInstall.Commands.Basic.StoreMan.ListImplementations.html new file mode 100644 index 000000000..fa70863b1 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.ListImplementations.html @@ -0,0 +1,584 @@ + + + + + Class StoreMan.ListImplementations | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.ListImplementations +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.ListImplementations : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.ListImplementations
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ListImplementations(ICommandHandler) + +

+ +
+
+ +
+
public ListImplementations(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "manage"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "list-implementations"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.Optimise.html b/api/ZeroInstall.Commands.Basic.StoreMan.Optimise.html new file mode 100644 index 000000000..9d62394cb --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.Optimise.html @@ -0,0 +1,555 @@ + + + + + Class StoreMan.Optimise | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.Optimise +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.Optimise : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.Optimise
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Optimise(ICommandHandler) + +

+ +
+
+ +
+
public Optimise(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "optimize"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "optimise"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.Purge.html b/api/ZeroInstall.Commands.Basic.StoreMan.Purge.html new file mode 100644 index 000000000..895052fe1 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.Purge.html @@ -0,0 +1,525 @@ + + + + + Class StoreMan.Purge | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.Purge +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.Purge : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.Purge
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Purge(ICommandHandler) + +

+ +
+
+ +
+
public Purge(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "purge"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.Remove.html b/api/ZeroInstall.Commands.Basic.StoreMan.Remove.html new file mode 100644 index 000000000..ad3f7a7c0 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.Remove.html @@ -0,0 +1,554 @@ + + + + + Class StoreMan.Remove | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.Remove +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.Remove : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.Remove
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Remove(ICommandHandler) + +

+ +
+
+ +
+
public Remove(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "remove"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.Serve.html b/api/ZeroInstall.Commands.Basic.StoreMan.Serve.html new file mode 100644 index 000000000..54306127d --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.Serve.html @@ -0,0 +1,554 @@ + + + + + Class StoreMan.Serve | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.Serve +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.Serve : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.Serve
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Serve(ICommandHandler) + +

+ +
+
+ +
+
public Serve(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "serve"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.StoreSubCommand.html b/api/ZeroInstall.Commands.Basic.StoreMan.StoreSubCommand.html new file mode 100644 index 000000000..2b873c3a2 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.StoreSubCommand.html @@ -0,0 +1,492 @@ + + + + + Class StoreMan.StoreSubCommand | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.StoreSubCommand +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public abstract class StoreMan.StoreSubCommand : CliCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
StoreMan.StoreSubCommand
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + + + + + + + + + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ StoreSubCommand(ICommandHandler) + +

+ +
+
+ +
+
protected StoreSubCommand(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ ParentName + +

+ +

The name of the CliMultiCommand this command is a sub-command of.

+
+
+ +
+
public string ParentName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ AddToStore(ManifestDigest, Action<IBuilder>) + +

+ +

Adds a new implementation to the ImplementationStore.

+
+
+ +
+
protected ExitCode AddToStore(ManifestDigest manifestDigest, Action<IBuilder> build)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest the implementation is supposed to match.

+
+
build Action<IBuilder>
+

Callback for building the implementation.

+
+
+ +

Returns

+
+
ExitCode
+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
DigestMismatchException
+

The implementation's content doesn't match the manifestDigest.

+
+
+ + + + + +

+ SetStorePaths(IReadOnlyList<string>) + +

+ +

Sets the paths of the directories to use as ImplementationStores. +Keeps using the defaults if the list is empty.

+
+
+ +
+
protected void SetStorePaths(IReadOnlyList<string> paths)
+
+ +

Parameters

+
+
paths IReadOnlyList<string>
+
+
+ + + + + + + + + +

Exceptions

+
+
DirectoryNotFoundException
+

A specified directory does not exist.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.Verify.html b/api/ZeroInstall.Commands.Basic.StoreMan.Verify.html new file mode 100644 index 000000000..bddb825d8 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.Verify.html @@ -0,0 +1,583 @@ + + + + + Class StoreMan.Verify | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan.Verify +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class StoreMan.Verify : StoreMan.StoreSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan.Verify
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Verify(ICommandHandler) + +

+ +
+
+ +
+
public Verify(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "verify"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.StoreMan.html b/api/ZeroInstall.Commands.Basic.StoreMan.html new file mode 100644 index 000000000..5c88aa463 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.StoreMan.html @@ -0,0 +1,414 @@ + + + + + Class StoreMan | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StoreMan +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Manages the contents of the IImplementationStores.

+
+
+ +
+
public sealed class StoreMan : CliMultiCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
StoreMan
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ StoreMan(ICommandHandler) + +

+ +

Manages the contents of the IImplementationStores.

+
+
+ +
+
public StoreMan(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "store"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ SubCommandNames + +

+ +

A list of sub-command names (without alternatives) as used in command-line arguments in lower-case.

+
+
+ +
+
public override IEnumerable<string> SubCommandNames { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ GetCommand(string) + +

+ +

Creates a new sub-CliCommand based on a name.

+
+
+ +
+
public override CliCommand GetCommand(string commandName)
+
+ +

Parameters

+
+
commandName string
+

The command name to look for; case-insensitive.

+
+
+ +

Returns

+
+
CliCommand
+

The requested sub-CliCommand.

+
+
+ + + + + + + + +

Exceptions

+
+
OptionException
+

commandName is an unknown command.

+
+
IOException
+

There was a problem accessing a configuration file or one of the stores.

+
+
UnauthorizedAccessException
+

Access to a configuration file or one of the stores was not permitted.

+
+
InvalidDataException
+

A configuration file is damaged.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.TrustMan.Add.html b/api/ZeroInstall.Commands.Basic.TrustMan.Add.html new file mode 100644 index 000000000..9c9bb68db --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.TrustMan.Add.html @@ -0,0 +1,583 @@ + + + + + Class TrustMan.Add | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TrustMan.Add +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class TrustMan.Add : TrustMan.TrustSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
TrustMan.Add
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Add(ICommandHandler) + +

+ +
+
+ +
+
public Add(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "add"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.TrustMan.List.html b/api/ZeroInstall.Commands.Basic.TrustMan.List.html new file mode 100644 index 000000000..ff657e7d7 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.TrustMan.List.html @@ -0,0 +1,554 @@ + + + + + Class TrustMan.List | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TrustMan.List +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class TrustMan.List : TrustMan.TrustSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
TrustMan.List
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ List(ICommandHandler) + +

+ +
+
+ +
+
public List(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "list"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.TrustMan.Remove.html b/api/ZeroInstall.Commands.Basic.TrustMan.Remove.html new file mode 100644 index 000000000..52d29aac1 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.TrustMan.Remove.html @@ -0,0 +1,583 @@ + + + + + Class TrustMan.Remove | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TrustMan.Remove +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public class TrustMan.Remove : TrustMan.TrustSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
TrustMan.Remove
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Remove(ICommandHandler) + +

+ +
+
+ +
+
public Remove(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "remove"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.TrustMan.TrustSubCommand.html b/api/ZeroInstall.Commands.Basic.TrustMan.TrustSubCommand.html new file mode 100644 index 000000000..679471e29 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.TrustMan.TrustSubCommand.html @@ -0,0 +1,453 @@ + + + + + Class TrustMan.TrustSubCommand | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TrustMan.TrustSubCommand +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +
+
+ +
+
public abstract class TrustMan.TrustSubCommand : CliCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
TrustMan.TrustSubCommand
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ TrustSubCommand(ICommandHandler) + +

+ +
+
+ +
+
protected TrustSubCommand(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ MachineWide + +

+ +
+
+ +
+
protected bool MachineWide
+
+ + + + +

Field Value

+
+
bool
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ ParentName + +

+ +

The name of the CliMultiCommand this command is a sub-command of.

+
+
+ +
+
public string ParentName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Load() + +

+ +
+
+ +
+
protected TrustDB Load()
+
+ + +

Returns

+
+
TrustDB
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.TrustMan.html b/api/ZeroInstall.Commands.Basic.TrustMan.html new file mode 100644 index 000000000..510ef19fe --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.TrustMan.html @@ -0,0 +1,414 @@ + + + + + Class TrustMan | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TrustMan +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Manages the contents of the TrustDB.

+
+
+ +
+
public sealed class TrustMan : CliMultiCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
TrustMan
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ TrustMan(ICommandHandler) + +

+ +

Manages the contents of the TrustDB.

+
+
+ +
+
public TrustMan(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "trust"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ SubCommandNames + +

+ +

A list of sub-command names (without alternatives) as used in command-line arguments in lower-case.

+
+
+ +
+
public override IEnumerable<string> SubCommandNames { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ GetCommand(string) + +

+ +

Creates a new sub-CliCommand based on a name.

+
+
+ +
+
public override CliCommand GetCommand(string commandName)
+
+ +

Parameters

+
+
commandName string
+

The command name to look for; case-insensitive.

+
+
+ +

Returns

+
+
CliCommand
+

The requested sub-CliCommand.

+
+
+ + + + + + + + +

Exceptions

+
+
OptionException
+

commandName is an unknown command.

+
+
IOException
+

There was a problem accessing a configuration file or one of the stores.

+
+
UnauthorizedAccessException
+

Access to a configuration file or one of the stores was not permitted.

+
+
InvalidDataException
+

A configuration file is damaged.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.Update.html b/api/ZeroInstall.Commands.Basic.Update.html new file mode 100644 index 000000000..58c5b8f9a --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.Update.html @@ -0,0 +1,553 @@ + + + + + Class Update | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Update +

+ +
+
Namespace
ZeroInstall.Commands.Basic
+
Assembly
0install.dll
+
+ +

Check for updates to the program and download them if found.

+
+
+ +
+
public class Update : Download
+
+ + + + +
+
Inheritance
+
+ + + + + + +
Update
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Update(ICommandHandler) + +

+ +

Creates a new update command.

+
+
+ +
+
public Update(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "update"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + + +

+ ShowOutput() + +

+ +

Shows a list of changes found by the update process.

+
+
+ +
+
protected override ExitCode ShowOutput()
+
+ + +

Returns

+
+
ExitCode
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Basic.html b/api/ZeroInstall.Commands.Basic.html new file mode 100644 index 000000000..5cf75fe69 --- /dev/null +++ b/api/ZeroInstall.Commands.Basic.html @@ -0,0 +1,302 @@ + + + + + Namespace ZeroInstall.Commands.Basic | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Commands.Basic

+
+

CLI commands for Zero Install's core features.

+
+
+
+ +

+Namespaces +

+
+
ZeroInstall.Commands.Basic.Exporters
+
+

Utilitiy classes for exporting data from Zero Install.

+
+
+

+Classes +

+
+
AddFeed
+

Register an additional source of implementations (versions) of a program.

+
+
+
+
AddRemoveFeedCommand
+

Common base class for AddFeed and RemoveFeed.

+
+
+
+
CatalogMan
+

Manages the Catalogs provided by the ICatalogManager.

+
+
+
+
Configure
+

View or change Config.

+
+
+
+
DefaultCommand
+

The default command used when no command is explicitly specified.

+
+
+
+
Digest
+

Calculate the manifest digest of a directory or archive.

+
+
+
+
Download
+

This behaves similarly to Selection, except that it also downloads the selected versions if they are not already cached.

+
+
+
+
Export
+

Exports all feeds and implementations required to launch the program specified by URI.

+
+
+
+
ExportHelp
+

Exports all CliCommand help texts as HTML.

+
+
+
+
Fetch
+

Downloads a set of Implementations piped in as XML via stdin (for programmatic use). Use Feed format with no inner linebreaks and terminated by a single linebreak.

+
+
+
+
Import
+

Import a feed from a local file, as if it had been downloaded from the network.

+
+
+
+
List
+

List all known interface (program) URIs.

+
+
+
+
ListFeeds
+

List all known feed URIs for a specific interface.

+
+
+
+
RemoveFeed
+

Un-register a feed, reversing the effect of AddFeed.

+
+
+
+
Run
+

This behaves similarly to Download, except that it also runs the program after ensuring it is in the cache.

+
+
+
+
Search
+

Searches for feeds indexed by the mirror server.

+
+
+
+
Selection
+

Select a version of the program identified by URI, and compatible versions of all of its dependencies.

+
+
+
+
StoreMan
+

Manages the contents of the IImplementationStores.

+
+
+
+
StoreMan.Add
+
+
+
+
StoreMan.Audit
+
+
+
+
StoreMan.Copy
+
+
+
+
StoreMan.Export
+
+
+
+
StoreMan.Find
+
+
+
+
StoreMan.List
+
+
+
+
StoreMan.ListImplementations
+
+
+
+
StoreMan.Optimise
+
+
+
+
StoreMan.Purge
+
+
+
+
StoreMan.Remove
+
+
+
+
StoreMan.Serve
+
+
+
+
StoreMan.StoreSubCommand
+
+
+
+
StoreMan.Verify
+
+
+
+
TrustMan
+

Manages the contents of the TrustDB.

+
+
+
+
TrustMan.Add
+
+
+
+
TrustMan.List
+
+
+
+
TrustMan.Remove
+
+
+
+
TrustMan.TrustSubCommand
+
+
+
+
Update
+

Check for updates to the program and download them if found.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.CliCommand.html b/api/ZeroInstall.Commands.CliCommand.html new file mode 100644 index 000000000..d163df4cc --- /dev/null +++ b/api/ZeroInstall.Commands.CliCommand.html @@ -0,0 +1,1124 @@ + + + + + Class CliCommand | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CliCommand +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

Represents a command invoked via command-line arguments.

+
+
+ +
+
public abstract class CliCommand : ScopedOperation
+
+ + + + +
+
Inheritance
+
+ + + +
CliCommand
+
+
+ + +
+
Derived
+
+ + + + + + + + + + + + + + + + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

Specific sub-classes of this class are used to handle a commands like "0install COMMAND [OPTIONS]".

+
+ + +

Constructors +

+ + + + +

+ CliCommand(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
protected CliCommand(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ AdditionalArgs + +

+ +

Feeds to add, terms to search for, etc.

+
+
+ +
+
protected readonly List<string> AdditionalArgs
+
+ + + + +

Field Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ Options + +

+ +

The command-line argument parser used to evaluate user input.

+
+
+ +
+
protected readonly OptionSet Options
+
+ + + + +

Field Value

+
+
OptionSet
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected virtual int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected virtual int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public abstract string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FullName + +

+ +

The full name of this command (including sub-commands) as used in command-line arguments in lower-case.

+
+
+ +
+
public string FullName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Handler + +

+ +

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ +
+
public ICommandHandler Handler { get; }
+
+ + + + + +

Property Value

+
+
ICommandHandler
+
+
+ + + + + + + + + + +

+ HelpText + +

+ +

The help text describing the available command-line options and their effects.

+
+
+ +
+
protected string HelpText { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ImplementationsInReadOnlyStores + +

+ +

Indicates whether there are currently any implementations stored in read-only IImplementationStores.

+
+
+ +
+
protected bool ImplementationsInReadOnlyStores { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public abstract string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ AddDiscoverOptions() + +

+ +

Adds command-line options related to ImplementationDiscovery.

+
+
+ +
+
protected void AddDiscoverOptions()
+
+ + + + + + + + + + + + + + + +

+ AsParallel<T>(IEnumerable<T>) + +

+ +

Prepares the elements for parallel processing while respecting MaxParallelDownloads and CancellationToken.

+
+
+ +
+
protected ParallelQuery<T> AsParallel<T>(IEnumerable<T> elements)
+
+ +

Parameters

+
+
elements IEnumerable<T>
+
+
+ +

Returns

+
+
ParallelQuery<T>
+
+
+ +

Type Parameters

+
+
T
+
+
+ + + + + + + + + + + + +

+ Create(string?, ICommandHandler) + +

+ +

Creates a new CliCommand based on a name.

+
+
+ +
+
public static CliCommand Create(string? commandName, ICommandHandler handler)
+
+ +

Parameters

+
+
commandName string
+

The command name to look for; case-insensitive; can be null.

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ +

Returns

+
+
CliCommand
+

The requested CliCommand or DefaultCommand if commandName was null.

+
+
+ + + + + + + + +

Exceptions

+
+
OptionException
+

commandName is an unknown command.

+
+
IOException
+

There was a problem accessing a configuration file or one of the stores.

+
+
UnauthorizedAccessException
+

Access to a configuration file or one of the stores was not permitted.

+
+
InvalidDataException
+

A configuration file is damaged.

+
+
+ + + + + +

+ CreateAndParse(IReadOnlyList<string>, ICommandHandler) + +

+ +

Parses command-line arguments, automatically creating an appropriate CliCommand.

+
+
+ +
+
public static CliCommand CreateAndParse(IReadOnlyList<string> args, ICommandHandler handler)
+
+ +

Parameters

+
+
args IReadOnlyList<string>
+

The command-line arguments to be parsed.

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ +

Returns

+
+
CliCommand
+

The newly created CliCommand after Parse(IReadOnlyList<string>) has been called.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user asked to see help information, version information, etc..

+
+
OptionException
+

args contains unknown options or specified an unknown command.

+
+
IOException
+

A problem occurred while creating a directory.

+
+
UnauthorizedAccessException
+

Creating a directory is not permitted.

+
+
InvalidDataException
+

A configuration file is damaged.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
+ + + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public abstract ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + + +

+ FetchAll(IEnumerable<Implementation>) + +

+ +

Downloads a set of Implementations to the ZeroInstall.Store in parallel.

+
+
+ +
+
protected void FetchAll(IEnumerable<Implementation> implementations)
+
+ +

Parameters

+
+
implementations IEnumerable<Implementation>
+

The Implementations to be downloaded.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

A download or IO task was canceled from another thread.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted.

+
+
UnauthorizedAccessException
+

Write access to IImplementationStore is not permitted.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
+ + + + + +

+ GetCommandName(ref IReadOnlyList<string>) + +

+ +

Determines the command name specified in the command-line arguments.

+
+
+ +
+
public static string? GetCommandName(ref IReadOnlyList<string> args)
+
+ +

Parameters

+
+
args IReadOnlyList<string>
+

The command-line arguments to search for a command name. The collection is replaced with a copy with the command removed from it.

+
+
+ +

Returns

+
+
string
+

The name of the command that was found or null if none was specified.

+
+
+ + + + + + + + + + + + + +

+ Parse(IReadOnlyList<string>) + +

+ +

Parses command-line arguments and stores the result in the command.

+
+
+ +
+
public virtual void Parse(IReadOnlyList<string> args)
+
+ +

Parameters

+
+
args IReadOnlyList<string>
+

The command-line arguments to be parsed.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user asked to see help information, version information, etc..

+
+
OptionException
+

args contains unknown options.

+
+
IOException
+

An IO operation failed.

+
+
UnauthorizedAccessException
+

More privileges are required.

+
+
UriFormatException
+

The URI or local path specified is invalid.

+
+
+ + + + + +

+ SupportedValues<T>() + +

+ +

Generates a localized instruction string describing multiple selectable enum values.

+
+
+ +
+
protected static string SupportedValues<T>()
+
+ + +

Returns

+
+
string
+
+
+ +

Type Parameters

+
+
T
+

The enum type to list values for.

+
+
+ + + + + + + + + + + + +

+ SupportedValues<T>(params T[]) + +

+ +

Generates a localized instruction string describing multiple selectable values.

+
+
+ +
+
protected static string SupportedValues<T>(params T[] values)
+
+ +

Parameters

+
+
values T[]
+

The values to list.

+
+
+ +

Returns

+
+
string
+
+
+ +

Type Parameters

+
+
T
+
+
+ + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.CliCommandHandler.html b/api/ZeroInstall.Commands.CliCommandHandler.html new file mode 100644 index 000000000..b0dc52b78 --- /dev/null +++ b/api/ZeroInstall.Commands.CliCommandHandler.html @@ -0,0 +1,488 @@ + + + + + Class CliCommandHandler | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CliCommandHandler +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

Uses the stdin/stderr streams to allow users to interact with CliCommands.

+
+
+ +
+
[MustDisposeResource]
+public sealed class CliCommandHandler : AnsiCliTaskHandler, ICommandHandler, ITaskHandler, IDisposable
+
+ + + + +
+
Inheritance
+
+ + + + +
CliCommandHandler
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Background + +

+ +

Always returns false.

+
+
+ +
+
public bool Background { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ FeedUri + +

+ +

The URI of the Zero Install feed the current operation relates to.

+
+
+ +
+
public FeedUri? FeedUri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + +

Remarks

+

This can be used to apply application-specific visual branding.

+
+ + + + + + +

+ IsGui + +

+ +

Always returns false.

+
+
+ +
+
public bool IsGui { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CloseUI() + +

+ +

Closes any persistent UI elements that were created.

+
+
+ +
+
public void CloseUI()
+
+ + + + + + + + + + + + + + + +

+ CustomizeSelections(Func<Selections>) + +

+ +

Allows the user to customize the interface preferences and rerun the solver if desired. +Returns once the user is finished.

+
+
+ +
+
public void CustomizeSelections(Func<Selections> solveCallback)
+
+ +

Parameters

+
+
solveCallback Func<Selections>
+

Called after interface preferences have been changed and the solver needs to be rerun.

+
+
+ + + + + + + + + + + + + + +

+ DisableUI() + +

+ +

Disables any persistent UI elements that were created but still leaves them visible.

+
+
+ +
+
public void DisableUI()
+
+ + + + + + + + + + + + + + + +

+ ShowIntegrateApp(IntegrationState) + +

+ +

Displays application integration options to the user. +Returns once the user is finished.

+
+
+ +
+
public void ShowIntegrateApp(IntegrationState state)
+
+ +

Parameters

+
+
state IntegrationState
+

A View-Model for modifying the current desktop integration state.

+
+
+ + + + + + + + +

Remarks

+

The caller is responsible for applying changes.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user does not want any changes to be applied.

+
+
+ + + + + +

+ ShowSelections(Selections, IFeedManager) + +

+ +

Shows the Selections made by the solver to the user. +Returns immediately. May be ignored by some implementations.

+
+
+ +
+
public void ShowSelections(Selections selections, IFeedManager feedManager)
+
+ +

Parameters

+
+
selections Selections
+

The Selections as provided by the solver.

+
+
feedManager IFeedManager
+

The feed manager used to retrieve feeds for additional information about implementations.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.CliMultiCommand.html b/api/ZeroInstall.Commands.CliMultiCommand.html new file mode 100644 index 000000000..247f53205 --- /dev/null +++ b/api/ZeroInstall.Commands.CliMultiCommand.html @@ -0,0 +1,650 @@ + + + + + Class CliMultiCommand | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CliMultiCommand +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

Common base class for commands that provide multiple sub-CliCommands.

+
+
+ +
+
public abstract class CliMultiCommand : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
CliMultiCommand
+
+
+ + +
+
Derived
+
+ + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ CliMultiCommand(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
protected CliMultiCommand(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SubCommandNames + +

+ +

A list of sub-command names (without alternatives) as used in command-line arguments in lower-case.

+
+
+ +
+
public abstract IEnumerable<string> SubCommandNames { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + + +

+ GetCommand(string) + +

+ +

Creates a new sub-CliCommand based on a name.

+
+
+ +
+
public abstract CliCommand GetCommand(string commandName)
+
+ +

Parameters

+
+
commandName string
+

The command name to look for; case-insensitive.

+
+
+ +

Returns

+
+
CliCommand
+

The requested sub-CliCommand.

+
+
+ + + + + + + + +

Exceptions

+
+
OptionException
+

commandName is an unknown command.

+
+
IOException
+

There was a problem accessing a configuration file or one of the stores.

+
+
UnauthorizedAccessException
+

Access to a configuration file or one of the stores was not permitted.

+
+
InvalidDataException
+

A configuration file is damaged.

+
+
+ + + + + +

+ Parse(IReadOnlyList<string>) + +

+ +

Parses command-line arguments and stores the result in the command.

+
+
+ +
+
public override void Parse(IReadOnlyList<string> args)
+
+ +

Parameters

+
+
args IReadOnlyList<string>
+

The command-line arguments to be parsed.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user asked to see help information, version information, etc..

+
+
OptionException
+

args contains unknown options.

+
+
IOException
+

An IO operation failed.

+
+
UnauthorizedAccessException
+

More privileges are required.

+
+
UriFormatException
+

The URI or local path specified is invalid.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.AddAlias.html b/api/ZeroInstall.Commands.Desktop.AddAlias.html new file mode 100644 index 000000000..d5abd01c4 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.AddAlias.html @@ -0,0 +1,551 @@ + + + + + Class AddAlias | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AddAlias +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Create an alias for a Run command.

+
+
+ +
+
public class AddAlias : AppCommand
+
+ + + + +
+
Inheritance
+
+ + + + + + +
AddAlias
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ AddAlias(ICommandHandler) + +

+ +

Common base class for commands that manage an AppList.

+
+
+ +
+
public AddAlias(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "add-alias"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "alias"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ExecuteHelper() + +

+ +

Template method that performs the actual operation.

+
+
+ +
+
protected override ExitCode ExecuteHelper()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.AddApp.html b/api/ZeroInstall.Commands.Desktop.AddApp.html new file mode 100644 index 000000000..173df6d6f --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.AddApp.html @@ -0,0 +1,582 @@ + + + + + Class AddApp | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AddApp +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Add an application to the AppList.

+
+
+ +
+
public class AddApp : AppCommand
+
+ + + + +
+
Inheritance
+
+ + + + + + +
AddApp
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ AddApp(ICommandHandler) + +

+ +

Common base class for commands that manage an AppList.

+
+
+ +
+
public AddApp(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ AddedNonCatalogAppWindowMessageID + +

+ +

The window message ID (for use with BroadcastMessage(int)) that signals that an application that is not listed in the Catalog was added.

+
+
+ +
+
public static readonly int AddedNonCatalogAppWindowMessageID
+
+ + + + +

Field Value

+
+
int
+
+
+ + + + + + + + + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "add-app"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "add"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ExecuteHelper() + +

+ +

Template method that performs the actual operation.

+
+
+ +
+
protected override ExitCode ExecuteHelper()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.AppCommand.html b/api/ZeroInstall.Commands.Desktop.AppCommand.html new file mode 100644 index 000000000..45e2b7cb7 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.AppCommand.html @@ -0,0 +1,638 @@ + + + + + Class AppCommand | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AppCommand +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Common base class for commands that manage an AppList.

+
+
+ +
+
public abstract class AppCommand : IntegrationCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
AppCommand
+
+
+ + +
+
Derived
+
+ + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ AppCommand(ICommandHandler) + +

+ +

Common base class for commands that manage an AppList.

+
+
+ +
+
protected AppCommand(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ InterfaceUri + +

+ +

The interface for the application to perform the operation on.

+
+
+ +
+
protected FeedUri InterfaceUri
+
+ + + + +

Field Value

+
+
FeedUri
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ IntegrationManager + +

+ +

Manages desktop integration operations.

+
+
+ +
+
protected CategoryIntegrationManager IntegrationManager { get; }
+
+ + + + + +

Property Value

+
+
CategoryIntegrationManager
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CreateAlias(AppEntry, string, string?) + +

+ +

Creates a new alias.

+
+
+ +
+
protected void CreateAlias(AppEntry appEntry, string aliasName, string? command = null)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The app entry to add the alias to.

+
+
aliasName string
+

The name of the alias to create.

+
+
command string
+

A command within the interface the alias shall point to; can be null.

+
+
+ + + + + + + + + + + + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + + +

+ ExecuteHelper() + +

+ +

Template method that performs the actual operation.

+
+
+ +
+
protected abstract ExitCode ExecuteHelper()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.Central.html b/api/ZeroInstall.Commands.Desktop.Central.html new file mode 100644 index 000000000..7cee73edb --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.Central.html @@ -0,0 +1,541 @@ + + + + + Class Central | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Central +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Opens the central graphical user interface for launching and managing applications.

+
+
+ +
+
public class Central : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
Central
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Central(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
public Central(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "central"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.ImportApps.html b/api/ZeroInstall.Commands.Desktop.ImportApps.html new file mode 100644 index 000000000..5f8003bd6 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.ImportApps.html @@ -0,0 +1,583 @@ + + + + + Class ImportApps | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImportApps +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Imports a set of applications and desktop integrations from an existing AppList file.

+
+
+ +
+
public class ImportApps : IntegrationCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
ImportApps
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ImportApps(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
public ImportApps(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "import-apps"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ AdditionalArgsMin + +

+ +

The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMin { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.IntegrateApp.html b/api/ZeroInstall.Commands.Desktop.IntegrateApp.html new file mode 100644 index 000000000..8216059c7 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.IntegrateApp.html @@ -0,0 +1,590 @@ + + + + + Class IntegrateApp | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IntegrateApp +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Add an application to the AppList (if missing) and integrate it into the desktop environment.

+
+
+ +
+
public class IntegrateApp : AppCommand
+
+ + + + +
+
Inheritance
+
+ + + + + + +
IntegrateApp
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ IntegrateApp(ICommandHandler) + +

+ +

Common base class for commands that manage an AppList.

+
+
+ +
+
public IntegrateApp(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "integrate-app"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ AltName2 + +

+ +
+
+ +
+
public const string AltName2 = "desktop"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "integrate"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ExecuteHelper() + +

+ +

Template method that performs the actual operation.

+
+
+ +
+
protected override ExitCode ExecuteHelper()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + + + + + + + +

+ GetAppEntry(IIntegrationManager, ref FeedUri) + +

+ +

Finds an existing AppEntry or creates a new one for a specific interface URI.

+
+
+ +
+
protected override AppEntry GetAppEntry(IIntegrationManager integrationManager, ref FeedUri interfaceUri)
+
+ +

Parameters

+
+
integrationManager IIntegrationManager
+

Manages desktop integration operations.

+
+
interfaceUri FeedUri
+

The interface URI to create an AppEntry for. Will be updated if ReplacedBy is set and accepted by the user.

+
+
+ +

Returns

+
+
AppEntry
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.IntegrationCommand.html b/api/ZeroInstall.Commands.Desktop.IntegrationCommand.html new file mode 100644 index 000000000..1d1d0483a --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.IntegrationCommand.html @@ -0,0 +1,550 @@ + + + + + Class IntegrationCommand | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IntegrationCommand +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Common base class for commands that manage ZeroInstall.DesktopIntegration.

+
+
+ +
+
public abstract class IntegrationCommand : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
IntegrationCommand
+
+
+ + +
+
Derived
+
+ + + + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ IntegrationCommand(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
protected IntegrationCommand(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ NoDownload + +

+ +

Do not download the application itself yet.

+
+
+ +
+
protected bool NoDownload
+
+ + + + +

Field Value

+
+
bool
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ CheckInstallBase() + +

+ +

Checks the current InstallBase to determine whether it is suitable for operations that persist it.

+
+
+ +
+
protected void CheckInstallBase()
+
+ + + + + + + + + +

Remarks

+

This should be called before performing any operations that persist InstallBase somewhere, e.g. in generated shortcuts or stubs. +It is not required for operations that only remove things from the system.

+
+ +

Exceptions

+
+
UnsuitableInstallBaseException
+

The current Zero Install instance is installed in a location unsuitable for the desired operation.

+
+
+ + + + + +

+ ExistingDesktopIntegration(bool) + +

+ +

Indicates whether any desktop integration for apps has been performed yet.

+
+
+ +
+
public static bool ExistingDesktopIntegration(bool machineWide = false)
+
+ +

Parameters

+
+
machineWide bool
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetAppEntry(IIntegrationManager, ref FeedUri) + +

+ +

Finds an existing AppEntry or creates a new one for a specific interface URI.

+
+
+ +
+
protected virtual AppEntry GetAppEntry(IIntegrationManager integrationManager, ref FeedUri interfaceUri)
+
+ +

Parameters

+
+
integrationManager IIntegrationManager
+

Manages desktop integration operations.

+
+
interfaceUri FeedUri
+

The interface URI to create an AppEntry for. Will be updated if ReplacedBy is set and accepted by the user.

+
+
+ +

Returns

+
+
AppEntry
+
+
+ + + + + + + + + + + + + +

+ Parse(IReadOnlyList<string>) + +

+ +

Parses command-line arguments and stores the result in the command.

+
+
+ +
+
public override void Parse(IReadOnlyList<string> args)
+
+ +

Parameters

+
+
args IReadOnlyList<string>
+

The command-line arguments to be parsed.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user asked to see help information, version information, etc..

+
+
OptionException
+

args contains unknown options.

+
+
IOException
+

An IO operation failed.

+
+
UnauthorizedAccessException
+

More privileges are required.

+
+
UriFormatException
+

The URI or local path specified is invalid.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.ListApps.html b/api/ZeroInstall.Commands.Desktop.ListApps.html new file mode 100644 index 000000000..c2a3b2cc4 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.ListApps.html @@ -0,0 +1,541 @@ + + + + + Class ListApps | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ListApps +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

List all current AppEntrys in the AppList.

+
+
+ +
+
public class ListApps : CliCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
ListApps
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ListApps(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
public ListApps(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "list-apps"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.RemoveAllApps.html b/api/ZeroInstall.Commands.Desktop.RemoveAllApps.html new file mode 100644 index 000000000..2ded2cf84 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.RemoveAllApps.html @@ -0,0 +1,583 @@ + + + + + Class RemoveAllApps | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RemoveAllApps +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Removes all applications from the AppList and undoes any desktop environment integration.

+
+
+ +
+
public class RemoveAllApps : IntegrationCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
RemoveAllApps
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ RemoveAllApps(ICommandHandler) + +

+ +

Removes all applications from the AppList and undoes any desktop environment integration.

+
+
+ +
+
public RemoveAllApps(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "remove-all-apps"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "remove-all"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.RemoveApp.html b/api/ZeroInstall.Commands.Desktop.RemoveApp.html new file mode 100644 index 000000000..335e10641 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.RemoveApp.html @@ -0,0 +1,552 @@ + + + + + Class RemoveApp | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RemoveApp +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Remove an application from the AppList and undoes any desktop environment integration.

+
+
+ +
+
public class RemoveApp : AppCommand
+
+ + + + +
+
Inheritance
+
+ + + + + + +
RemoveApp
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ RemoveApp(ICommandHandler) + +

+ +

Remove an application from the AppList and undoes any desktop environment integration.

+
+
+ +
+
public RemoveApp(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "remove-app"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ AltName2 + +

+ +
+
+ +
+
public const string AltName2 = "destory"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "remove"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ExecuteHelper() + +

+ +

Template method that performs the actual operation.

+
+
+ +
+
protected override ExitCode ExecuteHelper()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.RepairApps.html b/api/ZeroInstall.Commands.Desktop.RepairApps.html new file mode 100644 index 000000000..cc930b2ec --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.RepairApps.html @@ -0,0 +1,583 @@ + + + + + Class RepairApps | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RepairApps +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Reintegrate all applications in the AppList into the desktop environment.

+
+
+ +
+
public class RepairApps : IntegrationCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
RepairApps
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ RepairApps(ICommandHandler) + +

+ +

Reintegrate all applications in the AppList into the desktop environment.

+
+
+ +
+
public RepairApps(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "repair-apps"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "repair-all"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.Self.Deploy.html b/api/ZeroInstall.Commands.Desktop.Self.Deploy.html new file mode 100644 index 000000000..424a578d6 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.Self.Deploy.html @@ -0,0 +1,549 @@ + + + + + Class Self.Deploy | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Self.Deploy +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Deploys Zero Install to a target directory and integrates it in the system.

+
+
+ +
+
public class Self.Deploy : Self.SelfSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
Self.Deploy
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Deploy(ICommandHandler) + +

+ +
+
+ +
+
public Deploy(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "deploy"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.Self.Remove.html b/api/ZeroInstall.Commands.Desktop.Self.Remove.html new file mode 100644 index 000000000..b22e90ad4 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.Self.Remove.html @@ -0,0 +1,591 @@ + + + + + Class Self.Remove | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Self.Remove +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Removes the current instance of Zero Install from the system.

+
+
+ +
+
public class Self.Remove : Self.RemoveSubCommandBase, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + + +
Self.Remove
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Remove(ICommandHandler) + +

+ +

Removes the current instance of Zero Install from the system.

+
+
+ +
+
public Remove(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "remove"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ TargetDir + +

+ +
+
+ +
+
protected override string TargetDir { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.Self.RemoveSubCommandBase.html b/api/ZeroInstall.Commands.Desktop.Self.RemoveSubCommandBase.html new file mode 100644 index 000000000..66378ef0f --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.Self.RemoveSubCommandBase.html @@ -0,0 +1,477 @@ + + + + + Class Self.RemoveSubCommandBase | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Self.RemoveSubCommandBase +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +
+
+ +
+
public abstract class Self.RemoveSubCommandBase : Self.SelfSubCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
Self.RemoveSubCommandBase
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ RemoveSubCommandBase(ICommandHandler) + +

+ +
+
+ +
+
protected RemoveSubCommandBase(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ MachineWide + +

+ +
+
+ +
+
protected bool MachineWide { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Portable + +

+ +
+
+ +
+
protected bool Portable { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ TargetDir + +

+ +
+
+ +
+
protected abstract string TargetDir { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ PerformRemove() + +

+ +
+
+ +
+
protected void PerformRemove()
+
+ + + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.Self.SelfSubCommand.html b/api/ZeroInstall.Commands.Desktop.Self.SelfSubCommand.html new file mode 100644 index 000000000..9fe04875b --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.Self.SelfSubCommand.html @@ -0,0 +1,383 @@ + + + + + Class Self.SelfSubCommand | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Self.SelfSubCommand +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +
+
+ +
+
public abstract class Self.SelfSubCommand : CliCommand, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + +
Self.SelfSubCommand
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ SelfSubCommand(ICommandHandler) + +

+ +
+
+ +
+
protected SelfSubCommand(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ ParentName + +

+ +

The name of the CliMultiCommand this command is a sub-command of.

+
+
+ +
+
public string ParentName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.Self.Update.html b/api/ZeroInstall.Commands.Desktop.Self.Update.html new file mode 100644 index 000000000..bdac2811f --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.Self.Update.html @@ -0,0 +1,669 @@ + + + + + Class Self.Update | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Self.Update +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Updates Zero Install itself to the most recent version.

+
+
+ +
+
public class Self.Update : Download, ICliSubCommand
+
+ + + + +
+
Inheritance
+
+ + + + + + +
Self.Update
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Update(ICommandHandler) + +

+ +

Creates a new self update command.

+
+
+ +
+
public Update(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "update"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TopLevelName + +

+ +
+
+ +
+
public const string TopLevelName = "self-update"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ParentName + +

+ +

The name of the CliMultiCommand this command is a sub-command of.

+
+
+ +
+
public string ParentName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + + +

+ Parse(IReadOnlyList<string>) + +

+ +

Parses command-line arguments and stores the result in the command.

+
+
+ +
+
public override void Parse(IReadOnlyList<string> args)
+
+ +

Parameters

+
+
args IReadOnlyList<string>
+

The command-line arguments to be parsed.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user asked to see help information, version information, etc..

+
+
OptionException
+

args contains unknown options.

+
+
IOException
+

An IO operation failed.

+
+
UnauthorizedAccessException
+

More privileges are required.

+
+
UriFormatException
+

The URI or local path specified is invalid.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.Self.html b/api/ZeroInstall.Commands.Desktop.Self.html new file mode 100644 index 000000000..9becf58ec --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.Self.html @@ -0,0 +1,444 @@ + + + + + Class Self | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Self +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Manages the integration of Zero Install itself in the operating system (deployment and removal).

+
+
+ +
+
public sealed class Self : CliMultiCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
Self
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Self(ICommandHandler) + +

+ +

Manages the integration of Zero Install itself in the operating system (deployment and removal).

+
+
+ +
+
public Self(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "maintenance"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "self"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ SubCommandNames + +

+ +

A list of sub-command names (without alternatives) as used in command-line arguments in lower-case.

+
+
+ +
+
public override IEnumerable<string> SubCommandNames { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ GetCommand(string) + +

+ +

Creates a new sub-CliCommand based on a name.

+
+
+ +
+
public override CliCommand GetCommand(string commandName)
+
+ +

Parameters

+
+
commandName string
+

The command name to look for; case-insensitive.

+
+
+ +

Returns

+
+
CliCommand
+

The requested sub-CliCommand.

+
+
+ + + + + + + + +

Exceptions

+
+
OptionException
+

commandName is an unknown command.

+
+
IOException
+

There was a problem accessing a configuration file or one of the stores.

+
+
UnauthorizedAccessException
+

Access to a configuration file or one of the stores was not permitted.

+
+
InvalidDataException
+

A configuration file is damaged.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.SelfManager.html b/api/ZeroInstall.Commands.Desktop.SelfManager.html new file mode 100644 index 000000000..24e10ea35 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.SelfManager.html @@ -0,0 +1,428 @@ + + + + + Class SelfManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SelfManager +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Represents a specific Zero Install instance that is to be deployed, updated or removed.

+
+
+ +
+
public class SelfManager : ManagerBase, IDisposable
+
+ + + + +
+
Inheritance
+
+ + +
SelfManager
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + +
+ + + + +

Remarks

+

To prevent race-conditions there may only be one maintenance class instance active at any given time. +This class acquires a mutex upon calling its constructor and releases it upon calling Dispose().

+
+ + +

Constructors +

+ + + + +

+ SelfManager(string, ITaskHandler, bool, bool) + +

+ +

Creates a new maintenance manager.

+
+
+ +
+
public SelfManager(string targetDir, ITaskHandler handler, bool machineWide = false, bool portable = false)
+
+ +

Parameters

+
+
targetDir string
+

The full path to the directory containing the Zero Install instance.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
machineWide bool
+

Apply operations machine-wide instead of just for the current user.

+
+
portable bool
+

Controls whether the Zero Install instance at targetDir should be a portable instance.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ MutexName + +

+ +

The name of the cross-process mutex used to signal that a maintenance operation is currently in progress.

+
+
+ +
+
protected override string MutexName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Portable + +

+ +

Controls whether the Zero Install instance at TargetDir should be a portable instance.

+
+
+ +
+
public bool Portable { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ TargetDir + +

+ +

The full path to the directory containing the Zero Install instance.

+
+
+ +
+
public string TargetDir { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Deploy(bool) + +

+ +

Runs the deployment process.

+
+
+ +
+
public void Deploy(bool libraryMode = false)
+
+ +

Parameters

+
+
libraryMode bool
+

Deploy Zero Install as a library for use by other applications without its own desktop integration.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Remove() + +

+ +

Runs the removal process.

+
+
+ +
+
public void Remove()
+
+ + + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.SyncApps.html b/api/ZeroInstall.Commands.Desktop.SyncApps.html new file mode 100644 index 000000000..d434c661b --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.SyncApps.html @@ -0,0 +1,554 @@ + + + + + Class SyncApps | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SyncApps +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Synchronize the AppList with the server.

+
+
+ +
+
public class SyncApps : IntegrationCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
SyncApps
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ SyncApps(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
public SyncApps(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "sync"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.UpdateApps.html b/api/ZeroInstall.Commands.Desktop.UpdateApps.html new file mode 100644 index 000000000..2be2d5187 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.UpdateApps.html @@ -0,0 +1,584 @@ + + + + + Class UpdateApps | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class UpdateApps +

+ +
+
Namespace
ZeroInstall.Commands.Desktop
+
Assembly
0install.dll
+
+ +

Updates all applications in the AppList.

+
+
+ +
+
public class UpdateApps : IntegrationCommand
+
+ + + + +
+
Inheritance
+
+ + + + + +
UpdateApps
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ UpdateApps(ICommandHandler) + +

+ +

Creates a new command.

+
+
+ +
+
public UpdateApps(ICommandHandler handler)
+
+ +

Parameters

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "update-apps"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public const string Name = "update-all"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AdditionalArgsMax + +

+ +

The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList<string>).

+
+
+ +
+
protected override int AdditionalArgsMax { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Description + +

+ +

A short description of what this command does.

+
+
+ +
+
public override string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

The additional arguments to be displayed after the command name in the help text.

+
+
+ +
+
public override string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Execute() + +

+ +

Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList<string>) first!

+
+
+ +
+
public override ExitCode Execute()
+
+ + +

Returns

+
+
ExitCode
+

The exit status code to end the process with.

+
+
+ + + + + + + +

Remarks

+

When inheriting this method is usually replaced.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
OptionException
+

The number of arguments passed in on the command-line is incorrect.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed.

+
+
UnauthorizedAccessException
+

An operation failed due to insufficient rights.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data could not be handled for some reason.

+
+
FormatException
+

An URI, local path, version number, etc. is invalid.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
SolverException
+

The ISolver was unable to provide Selections that fulfill the Requirements.

+
+
ImplementationNotFoundException
+

One of the ImplementationBases is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Desktop.html b/api/ZeroInstall.Commands.Desktop.html new file mode 100644 index 000000000..e36616533 --- /dev/null +++ b/api/ZeroInstall.Commands.Desktop.html @@ -0,0 +1,223 @@ + + + + + Namespace ZeroInstall.Commands.Desktop | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Commands.Desktop

+
+

CLI commands for Zero Install's desktop integration features.

+
+
+
+ +

+Classes +

+
+
AddAlias
+

Create an alias for a Run command.

+
+
+
+
AddApp
+

Add an application to the AppList.

+
+
+
+
AppCommand
+

Common base class for commands that manage an AppList.

+
+
+
+
Central
+

Opens the central graphical user interface for launching and managing applications.

+
+
+
+
ImportApps
+

Imports a set of applications and desktop integrations from an existing AppList file.

+
+
+
+
IntegrateApp
+

Add an application to the AppList (if missing) and integrate it into the desktop environment.

+
+
+
+
IntegrationCommand
+

Common base class for commands that manage ZeroInstall.DesktopIntegration.

+
+
+
+
ListApps
+

List all current AppEntrys in the AppList.

+
+
+
+
RemoveAllApps
+

Removes all applications from the AppList and undoes any desktop environment integration.

+
+
+
+
RemoveApp
+

Remove an application from the AppList and undoes any desktop environment integration.

+
+
+
+
RepairApps
+

Reintegrate all applications in the AppList into the desktop environment.

+
+
+
+
Self
+

Manages the integration of Zero Install itself in the operating system (deployment and removal).

+
+
+
+
Self.Deploy
+

Deploys Zero Install to a target directory and integrates it in the system.

+
+
+
+
Self.Remove
+

Removes the current instance of Zero Install from the system.

+
+
+
+
Self.RemoveSubCommandBase
+
+
+
+
Self.SelfSubCommand
+
+
+
+
Self.Update
+

Updates Zero Install itself to the most recent version.

+
+
+
+
SelfManager
+

Represents a specific Zero Install instance that is to be deployed, updated or removed.

+
+
+
+
SyncApps
+

Synchronize the AppList with the server.

+
+
+
+
UpdateApps
+

Updates all applications in the AppList.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.EnvironmentBuilderExtensions.html b/api/ZeroInstall.Commands.EnvironmentBuilderExtensions.html new file mode 100644 index 000000000..e5c75b245 --- /dev/null +++ b/api/ZeroInstall.Commands.EnvironmentBuilderExtensions.html @@ -0,0 +1,218 @@ + + + + + Class EnvironmentBuilderExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class EnvironmentBuilderExtensions +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

Provides extension methods for IEnvironmentBuilder.

+
+
+ +
+
public static class EnvironmentBuilderExtensions
+
+ + + + +
+
Inheritance
+
+ +
EnvironmentBuilderExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ SetCallbackEnvironmentVariables(IEnvironmentBuilder) + +

+ +

Adds environment variables that allow the program to make calls back to Zero Install.

+
+
+ +
+
public static IEnvironmentBuilder SetCallbackEnvironmentVariables(this IEnvironmentBuilder builder)
+
+ +

Parameters

+
+
builder IEnvironmentBuilder
+
+
+ +

Returns

+
+
IEnvironmentBuilder
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.ExitCode.html b/api/ZeroInstall.Commands.ExitCode.html new file mode 100644 index 000000000..e0fc05d9c --- /dev/null +++ b/api/ZeroInstall.Commands.ExitCode.html @@ -0,0 +1,190 @@ + + + + + Enum ExitCode | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum ExitCode +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

An exit code is returned to the original caller after the application terminates, to indicate success or the reason for failure.

+
+
+ +
+
public enum ExitCode
+
+ + + + + + + + + +

Fields +

+
+
AccessDenied = 11
+

You have insufficient access rights. This can potentially be fixed by running the command as an Administrator/root. It may also indicate misconfigured file permissions.

+
+
Conflict = 15
+

A desktop integration operation could not be completed due to conflicting AccessPoints.

+
+
DigestMismatch = 26
+

The ManifestDigest of an implementation does not match the expected value. This could be caused by a damaged download or an incorrect feed.

+
+
ExecutorError = 21
+

The IExecutor was unable to launch the desired application. This usually indicates a problem with the feed.

+
+
IOError = 12
+

There was an IO problem. This encompasses issues such as missing files or insufficient disk space.

+
+
InvalidArguments = 99
+

The command-line arguments passed to the application were invalid.

+
+
InvalidData = 25
+

A data file could not be parsed. This encompasses issues such as damaged configuration files or malformed XML documents (e.g. feeds).

+
+
InvalidSignature = 27
+

There was a problem with the digital signature of a feed. The signature may be missing, damaged or not trusted for the source the feed came from.

+
+
NoChanges = 1
+

The operation resulted in no changes. This may be due to a problem with the input or simply indicate that the system is already in the desired state.

+
+
NotSupported = 50
+

The operation could not be completed because a feature that is not (yet) supported was requested. Upgrading to a newer version may resolve this issue.

+
+
OK = 0
+

The operation completed without any problems.

+
+
SolverError = 20
+

The ISolver was unable to provide Selections that fulfill the Requirements. This can be caused by a problem with the feed, an impossible request (e.g., non-existing version) or your local configuration.

+
+
UserCanceled = 100
+

The user canceled the task.

+
+
WebError = 10
+

There was a network problem. This may be intermittent and resolve itself e.g. when a Wi-Fi connection is restored.

+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.ICliSubCommand.html b/api/ZeroInstall.Commands.ICliSubCommand.html new file mode 100644 index 000000000..4648a32d3 --- /dev/null +++ b/api/ZeroInstall.Commands.ICliSubCommand.html @@ -0,0 +1,181 @@ + + + + + Interface ICliSubCommand | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface ICliSubCommand +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

Interface for CliCommands that are aggregated by a CliMultiCommand.

+
+
+ +
+
public interface ICliSubCommand
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ ParentName + +

+ +

The name of the CliMultiCommand this command is a sub-command of.

+
+
+ +
+
string ParentName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.ICommandHandler.html b/api/ZeroInstall.Commands.ICommandHandler.html new file mode 100644 index 000000000..53c56111b --- /dev/null +++ b/api/ZeroInstall.Commands.ICommandHandler.html @@ -0,0 +1,454 @@ + + + + + Interface ICommandHandler | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface ICommandHandler +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

Callback methods to allow users to interact with CliCommands.

+
+
+ +
+
public interface ICommandHandler : ITaskHandler, IDisposable
+
+ + + + + + + +
+
Inherited Members
+
+ + + + + + + + + +
+ + + + +

Remarks

+

The methods may be called from a background thread. Implementations apply appropriate thread-synchronization to update UI elements.

+
+ + +

Properties +

+ + + + +

+ Background + +

+ +

Hides the GUI and uses something like a tray icon instead. Has no effect when IsGui is false.

+
+
+ +
+
bool Background { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ FeedUri + +

+ +

The URI of the Zero Install feed the current operation relates to.

+
+
+ +
+
FeedUri? FeedUri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + +

Remarks

+

This can be used to apply application-specific visual branding.

+
+ + + + + + +

+ IsGui + +

+ +

Indicates whether this handler is a GUI.

+
+
+ +
+
bool IsGui { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CloseUI() + +

+ +

Closes any persistent UI elements that were created.

+
+
+ +
+
void CloseUI()
+
+ + + + + + + + + + + + + + + +

+ CustomizeSelections(Func<Selections>) + +

+ +

Allows the user to customize the interface preferences and rerun the solver if desired. +Returns once the user is finished.

+
+
+ +
+
void CustomizeSelections(Func<Selections> solveCallback)
+
+ +

Parameters

+
+
solveCallback Func<Selections>
+

Called after interface preferences have been changed and the solver needs to be rerun.

+
+
+ + + + + + + + + + + + + + +

+ DisableUI() + +

+ +

Disables any persistent UI elements that were created but still leaves them visible.

+
+
+ +
+
void DisableUI()
+
+ + + + + + + + + + + + + + + +

+ ShowIntegrateApp(IntegrationState) + +

+ +

Displays application integration options to the user. +Returns once the user is finished.

+
+
+ +
+
void ShowIntegrateApp(IntegrationState state)
+
+ +

Parameters

+
+
state IntegrationState
+

A View-Model for modifying the current desktop integration state.

+
+
+ + + + + + + + +

Remarks

+

The caller is responsible for applying changes.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user does not want any changes to be applied.

+
+
+ + + + + +

+ ShowSelections(Selections, IFeedManager) + +

+ +

Shows the Selections made by the solver to the user. +Returns immediately. May be ignored by some implementations.

+
+
+ +
+
void ShowSelections(Selections selections, IFeedManager feedManager)
+
+ +

Parameters

+
+
selections Selections
+

The Selections as provided by the solver.

+
+
feedManager IFeedManager
+

The feed manager used to retrieve feeds for additional information about implementations.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.NeedsGuiException.html b/api/ZeroInstall.Commands.NeedsGuiException.html new file mode 100644 index 000000000..76cbf7f30 --- /dev/null +++ b/api/ZeroInstall.Commands.NeedsGuiException.html @@ -0,0 +1,315 @@ + + + + + Class NeedsGuiException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class NeedsGuiException +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

Indicates that the requested operation requires a GUI but the current process does not have one.

+
+
+ +
+
public class NeedsGuiException : NotSupportedException, ISerializable
+
+ + + + +
+
Inheritance
+
+ + + + +
NeedsGuiException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ NeedsGuiException() + +

+ +

Initializes a new instance of the NotSupportedException class, setting the Message property of the new instance to a system-supplied message that describes the error. This message takes into account the current system culture.

+
+
+ +
+
public NeedsGuiException()
+
+ + + + + + + + + + + + + + + +

+ NeedsGuiException(string) + +

+ +

Initializes a new instance of the NotSupportedException class with a specified error message.

+
+
+ +
+
public NeedsGuiException(string message)
+
+ +

Parameters

+
+
message string
+

A string that describes the error. The content of message is intended to be understood by humans. The caller of this constructor is required to ensure that this string has been localized for the current system culture.

+
+
+ + + + + + + + + + + + + + +

+ NeedsGuiException(string, Exception) + +

+ +

Initializes a new instance of the NotSupportedException class with a specified error message and a reference to the inner exception that is the cause of this exception.

+
+
+ +
+
public NeedsGuiException(string message, Exception inner)
+
+ +

Parameters

+
+
message string
+

The error message that explains the reason for the exception.

+
+
inner Exception
+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.ProgramUtils.html b/api/ZeroInstall.Commands.ProgramUtils.html new file mode 100644 index 000000000..8da05b683 --- /dev/null +++ b/api/ZeroInstall.Commands.ProgramUtils.html @@ -0,0 +1,366 @@ + + + + + Class ProgramUtils | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ProgramUtils +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

Provides utility methods for application entry points.

+
+
+ +
+
public static class ProgramUtils
+
+ + + + +
+
Inheritance
+
+ +
ProgramUtils
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ UILanguage + +

+ +

The current UI language; null to use system default.

+
+
+ +
+
public static CultureInfo? UILanguage { get; set; }
+
+ + + + + +

Property Value

+
+
CultureInfo
+
+
+ + + + +

Remarks

+

This value is only used on Windows and is stored in the Registry. For non-Windows platforms use the LC_* environment variables instead.

+
+ + + + +

Methods +

+ + + + +

+ CliStartInfo(params string[]) + +

+ +

Creates a ProcessStartInfo for launching an instance of the 0install command-line interface.

+
+
+ +
+
public static ProcessStartInfo? CliStartInfo(params string[] arguments)
+
+ +

Parameters

+
+
arguments string[]
+
+
+ +

Returns

+
+
ProcessStartInfo
+
+
+ + + + + + + + + + + + + +

+ GuiStartInfo(params string[]) + +

+ +

Creates a ProcessStartInfo for launching an instance of the 0install graphical interface.

+
+
+ +
+
public static ProcessStartInfo? GuiStartInfo(params string[] arguments)
+
+ +

Parameters

+
+
arguments string[]
+
+
+ +

Returns

+
+
ProcessStartInfo
+
+
+ + + + + + + + + + + + + +

+ Init() + +

+ +

Common initialization code to be called by every Zero Install executable right after startup.

+
+
+ +
+
public static void Init()
+
+ + + + + + + + + + + + + + + +

+ Run(string, string[], ICommandHandler) + +

+ +

Parses command-line arguments and performs the indicated action. Performs error handling.

+
+
+ +
+
public static ExitCode Run(string exeName, string[] args, ICommandHandler handler)
+
+ +

Parameters

+
+
exeName string
+

The name of the executable to use as a reference in help messages and self-invocation.

+
+
args string[]
+

The arguments to be processed.

+
+
handler ICommandHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ +

Returns

+
+
ExitCode
+

The exit status code to end the process with. Cast to int to return from a Main method.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Properties.Resources.html b/api/ZeroInstall.Commands.Properties.Resources.html new file mode 100644 index 000000000..b3d19d9dd --- /dev/null +++ b/api/ZeroInstall.Commands.Properties.Resources.html @@ -0,0 +1,7767 @@ + + + + + Class Resources | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Resources +

+ +
+
Namespace
ZeroInstall.Commands.Properties
+
Assembly
0install.dll
+
+ +

A strongly-typed resource class, for looking up localized strings, etc.

+
+
+ +
+
public class Resources
+
+ + + + +
+
Inheritance
+
+ +
Resources
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Added0installToPath + +

+ +

Looks up a localized string similar to The command '0install' has been added to your command-line PATH..

+
+
+ +
+
public static string Added0installToPath { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AliasCreated + +

+ +

Looks up a localized string similar to An alias named '{0}' for '{1}' was created..

+
+
+ +
+
public static string AliasCreated { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AliasNotFound + +

+ +

Looks up a localized string similar to No existing alias named '{0}' was found..

+
+
+ +
+
public static string AliasNotFound { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AliasRemoved + +

+ +

Looks up a localized string similar to The alias named '{0}' for '{1}' was removed..

+
+
+ +
+
public static string AliasRemoved { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AllComponentsDownloaded + +

+ +

Looks up a localized string similar to All required components have been downloaded..

+
+
+ +
+
public static string AllComponentsDownloaded { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AllComponentsExported + +

+ +

Looks up a localized string similar to All components required to run {0} have been exported to '{1}'. +You can use the import script or Bootstrap executable in '{1}' to import these files on another computer..

+
+
+ +
+
public static string AllComponentsExported { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AlreadyInImplDirs + +

+ +

Looks up a localized string similar to '{0}' is already in the list of custom implementation caches..

+
+
+ +
+
public static string AlreadyInImplDirs { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AppAlias + +

+ +

Looks up a localized string similar to Application alias.

+
+
+ +
+
public static string AppAlias { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AppList + +

+ +

Looks up a localized string similar to Application list.

+
+
+ +
+
public static string AppList { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AskDeployMachineWide + +

+ +

Looks up a localized string similar to Setup Zero Install for all users (machine-wide) instead of just the current user?.

+
+
+ +
+
public static string AskDeployMachineWide { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AskDeployNewTarget + +

+ +

Looks up a localized string similar to Are you sure you want to deploy a new copy of Zero Install to '{0}'?.

+
+
+ +
+
public static string AskDeployNewTarget { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AskDeployZeroInstall + +

+ +

Looks up a localized string similar to This will add Zero Install to the start menu and command-line. Continue?.

+
+
+ +
+
public static string AskDeployZeroInstall { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AskRemoveZeroInstall + +

+ +

Looks up a localized string similar to Are you sure you want to remove Zero Install from this computer?.

+
+
+ +
+
public static string AskRemoveZeroInstall { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AskTryNow + +

+ +

Looks up a localized string similar to Do you want to try this now?.

+
+
+ +
+
public static string AskTryNow { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ AskUpdateCapabilities + +

+ +

Looks up a localized string similar to Do you wish to update any existing desktop integration to reflect this? +If you select 'Yes' potentially incompatible integrations will be removed. +If you select 'No' Zero Install will continue to use the old capabilities..

+
+
+ +
+
public static string AskUpdateCapabilities { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ CachedImplementations + +

+ +

Looks up a localized string similar to Cached implementations.

+
+
+ +
+
public static string CachedImplementations { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Cancel + +

+ +

Looks up a localized string similar to Cancel.

+
+
+ +
+
public static string Cancel { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ CapabilitiesChanged + +

+ +

Looks up a localized string similar to The capabilities of the application '{0}' have changed..

+
+
+ +
+
public static string CapabilitiesChanged { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ CatalogAlreadyRegistered + +

+ +

Looks up a localized string similar to The catalog URI {0} is already registered..

+
+
+ +
+
public static string CatalogAlreadyRegistered { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ CatalogNotRegistered + +

+ +

Looks up a localized string similar to The catalog URI {0} is not registered..

+
+
+ +
+
public static string CatalogNotRegistered { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ CatalogSources + +

+ +

Looks up a localized string similar to Catalog sources.

+
+
+ +
+
public static string CatalogSources { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Change + +

+ +

Looks up a localized string similar to Change.

+
+
+ +
+
public static string Change { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ChangesFound + +

+ +

Looks up a localized string similar to Changes found.

+
+
+ +
+
public static string ChangesFound { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ClickToChoose + +

+ +

Looks up a localized string similar to Click here to choose..

+
+
+ +
+
public static string ClickToChoose { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Command + +

+ +

Looks up a localized string similar to Command.

+
+
+ +
+
public static string Command { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ CommandLineArguments + +

+ +

Looks up a localized string similar to Command-line arguments.

+
+
+ +
+
public static string CommandLineArguments { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Configuration + +

+ +

Looks up a localized string similar to Configuration.

+
+
+ +
+
public static string Configuration { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ConfirmPurge + +

+ +

Looks up a localized string similar to Do you wish to remove all application files from the Zero Install cache? +These files can downloaded again if needed..

+
+
+ +
+
public static string ConfirmPurge { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ConfirmRemoveAll + +

+ +

Looks up a localized string similar to Do you wish to remove all applications from the 'My applications' list? This prevents leftover menu entries after removing Zero Install. +You can create a backup of this list by using '0install sync'..

+
+
+ +
+
public static string ConfirmRemoveAll { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Culture + +

+ +

Overrides the current thread's CurrentUICulture property for all +resource lookups using this strongly typed resource class.

+
+
+ +
+
public static CultureInfo Culture { get; set; }
+
+ + + + + +

Property Value

+
+
CultureInfo
+
+
+ + + + + + + + + + +

+ DataGridCommandAccessPointHelp + +

+ +

Looks up a localized string similar to Start entering text in the last line to create a new entry. +Select an entire line by clicking in the first column and then press DEL on the keyboard to remove an entry..

+
+
+ +
+
public static string DataGridCommandAccessPointHelp { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DataGridDefaultAccessPointHelp + +

+ +

Looks up a localized string similar to Set a checkbox to make a capability your desired default handler. +Remove a checkbox to remove a capability's default status (it still remains available)..

+
+
+ +
+
public static string DataGridDefaultAccessPointHelp { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DeleteCheckedEntries + +

+ +

Looks up a localized string similar to Do you want to delete the {0} checked element(s) from the cache?.

+
+
+ +
+
public static string DeleteCheckedEntries { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DeleteEntry + +

+ +

Looks up a localized string similar to Do you want to delete this entry from the cache?.

+
+
+ +
+
public static string DeleteEntry { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DeployMissingTargetForPortable + +

+ +

Looks up a localized string similar to When using the {0} option you must explicitly specify the target directory..

+
+
+ +
+
public static string DeployMissingTargetForPortable { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DeployTargetOutsideHome + +

+ +

Looks up a localized string similar to The specified target directory ({0}) is located outside your home directory..

+
+
+ +
+
public static string DeployTargetOutsideHome { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DeployedPortable + +

+ +

Looks up a localized string similar to A portable version of Zero Install has been deployed to '{0}'. +You can use it by running the ZeroInstall.exe file in the directory..

+
+
+ +
+
public static string DeployedPortable { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DeprecatedOption + +

+ +

Looks up a localized string similar to Deprecated option. Please use '{0}' instead..

+
+
+ +
+
public static string DeprecatedOption { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Description + +

+ +

Looks up a localized string similar to Description.

+
+
+ +
+
public static string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionAddAlias + +

+ +

Looks up a localized string similar to Create an alias for launching an application via 0install without always having to enter the full URI..

+
+
+ +
+
public static string DescriptionAddAlias { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionAddApp + +

+ +

Looks up a localized string similar to Add an application to the application list..

+
+
+ +
+
public static string DescriptionAddApp { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionAddFeed + +

+ +

Looks up a localized string similar to Register an additional source of implementations (versions) of a program..

+
+
+ +
+
public static string DescriptionAddFeed { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionCatalogAdd + +

+ +

Looks up a localized string similar to Adds an URI to the list of catalogs..

+
+
+ +
+
public static string DescriptionCatalogAdd { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionCatalogList + +

+ +

Looks up a localized string similar to Lists all registered catalogs..

+
+
+ +
+
public static string DescriptionCatalogList { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionCatalogRefresh + +

+ +

Looks up a localized string similar to Refreshes (downloads) all registered catalogs..

+
+
+ +
+
public static string DescriptionCatalogRefresh { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionCatalogRemove + +

+ +

Looks up a localized string similar to Removes an URI from the list of catalogs..

+
+
+ +
+
public static string DescriptionCatalogRemove { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionCatalogReset + +

+ +

Looks up a localized string similar to Resets the list of catalogs to the default source..

+
+
+ +
+
public static string DescriptionCatalogReset { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionCatalogSearch + +

+ +

Looks up a localized string similar to Searches registered catalogs for applications that match the specified query. If no query is given all applications in the catalogs are listed..

+
+
+ +
+
public static string DescriptionCatalogSearch { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionCentral + +

+ +

Looks up a localized string similar to Opens the central graphical user interface for launching and managing applications..

+
+
+ +
+
public static string DescriptionCentral { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionConfig + +

+ +

Looks up a localized string similar to View or change configuration settings. +With no arguments, it displays all settings and their current values. With one argument, it displays the current value of the named setting. With two arguments, it sets the setting to the given value or resets it to the default value if the value "{0}" is given..

+
+
+ +
+
public static string DescriptionConfig { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionDigest + +

+ +

Looks up a localized string similar to Calculates the manifest digest of a directory or archive..

+
+
+ +
+
public static string DescriptionDigest { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionDownload + +

+ +

Looks up a localized string similar to Behaves similarly to '0install select', except that it also downloads the selected versions if they are not already cached. +Returns an exit status of 0 if it selected a suitable set of versions and they are now all downloaded and in the cache; returns a status of 1 otherwise..

+
+
+ +
+
public static string DescriptionDownload { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionExport + +

+ +

Looks up a localized string similar to Exports all feeds and implementations required to launch the program specified by a URI to a DIRECTORY..

+
+
+ +
+
public static string DescriptionExport { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionImport + +

+ +

Looks up a localized string similar to Imports a feed from a local file, as if it had been downloaded from the network. This is useful when testing a feed file, to avoid uploading it to a remote server in order to download it again. +The file must have a trusted digital signature, as when fetching from the network..

+
+
+ +
+
public static string DescriptionImport { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionImportApps + +

+ +

Looks up a localized string similar to Imports a set of applications and desktop integrations from an existing app-list.xml file..

+
+
+ +
+
public static string DescriptionImportApps { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionIntegrateApp + +

+ +

Looks up a localized string similar to Adds an application to the application list (if missing) and integrate it into the desktop environment..

+
+
+ +
+
public static string DescriptionIntegrateApp { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionList + +

+ +

Looks up a localized string similar to Lists all locally known feed URIs. If a search term is given, only URIs containing that string are shown (case insensitive)..

+
+
+ +
+
public static string DescriptionList { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionListApps + +

+ +

Looks up a localized string similar to Lists all applications currently in your application list. If an URI is given, only the application with that feed URI is shown. If a PATTERN is given, only applications containing that string in their name are shown (case insensitive)..

+
+
+ +
+
public static string DescriptionListApps { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionListFeeds + +

+ +

Looks up a localized string similar to Lists all extra feeds added to URI using '0install add-feed'..

+
+
+ +
+
public static string DescriptionListFeeds { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionMaintenanceDeploy + +

+ +

Looks up a localized string similar to Deploys Zero Install to the specified TARGET directory or the default directory for programs and integrates it in the system..

+
+
+ +
+
public static string DescriptionMaintenanceDeploy { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionMaintenanceRemove + +

+ +

Looks up a localized string similar to Removes the current instance of Zero Install from the system..

+
+
+ +
+
public static string DescriptionMaintenanceRemove { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionRemoveAllApps + +

+ +

Looks up a localized string similar to Removes all applications from the application list and undoes any desktop environment integration. Use this command to clean up the system before removing Zero Install..

+
+
+ +
+
public static string DescriptionRemoveAllApps { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionRemoveApp + +

+ +

Looks up a localized string similar to Removes an application from the application list and undoes any desktop environment integration..

+
+
+ +
+
public static string DescriptionRemoveApp { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionRemoveFeed + +

+ +

Looks up a localized string similar to Un-registers a feed, reversing the effect of '0install add-feed'..

+
+
+ +
+
public static string DescriptionRemoveFeed { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionRepairApps + +

+ +

Looks up a localized string similar to Reapplies all desktop integrations of applications in the application list..

+
+
+ +
+
public static string DescriptionRepairApps { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionRun + +

+ +

Looks up a localized string similar to Behaves similarly to '0install download', except that it also runs the program after ensuring it is in the cache. +Returns an exit status of 1 if the download step failed. Otherwise, the exit status will be the exit status of the program being run..

+
+
+ +
+
public static string DescriptionRun { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionSearch + +

+ +

Looks up a localized string similar to Searches for feeds indexed by the mirror server that match specified keywords. Note that the default mirror server indexes all known feeds, regardless of quality; you must decide whether to trust the programs before running them..

+
+
+ +
+
public static string DescriptionSearch { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionSelect + +

+ +

Looks up a localized string similar to Selects a version of the program identified by URI, and compatible versions of all of its dependencies. +Returns an exit status of 0 if it selected a set of versions, and a status of 1 if it could not find a consistent set..

+
+
+ +
+
public static string DescriptionSelect { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionSelfUpdate + +

+ +

Looks up a localized string similar to Updates Zero Install itself to the most recent version..

+
+
+ +
+
public static string DescriptionSelfUpdate { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreAdd + +

+ +

Looks up a localized string similar to Adds the contents of a directory or archive to the cache..

+
+
+ +
+
public static string DescriptionStoreAdd { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreAddDir + +

+ +

Looks up a localized string similar to Adds a directory to the list of custom implementation caches..

+
+
+ +
+
public static string DescriptionStoreAddDir { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreAudit + +

+ +

Looks up a localized string similar to Checks that all implementations in the cache are undamaged. +Additional arguments specify custom cache locations..

+
+
+ +
+
public static string DescriptionStoreAudit { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreCopy + +

+ +

Looks up a localized string similar to Copies an implementation into the cache. Similar to '0install store add', but the digest is extracted from the directory name. +An additional arguments specifies a custom target cache location..

+
+
+ +
+
public static string DescriptionStoreCopy { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreExport + +

+ +

Looks up a localized string similar to Exports a cached implementation as an archive (ZIP, TAR, etc.). The result can be imported on another machine using '0install store add'..

+
+
+ +
+
public static string DescriptionStoreExport { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreFind + +

+ +

Looks up a localized string similar to Determines the local path of a cached implementation..

+
+
+ +
+
public static string DescriptionStoreFind { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreList + +

+ +

Looks up a localized string similar to Lists all implementation cache directories..

+
+
+ +
+
public static string DescriptionStoreList { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreListImplementations + +

+ +

Looks up a localized string similar to Lists all cached implementations. If a feed URI is specified only implementations for that particular feed are listed..

+
+
+ +
+
public static string DescriptionStoreListImplementations { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreManage + +

+ +

Looks up a localized string similar to Displays a graphical user interface for managing implementations in the cache. Shows associations with cached feeds..

+
+
+ +
+
public static string DescriptionStoreManage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreOptimise + +

+ +

Looks up a localized string similar to Saves disk space by merging identical files with hardlinks. +Additional arguments specify custom cache locations..

+
+
+ +
+
public static string DescriptionStoreOptimise { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStorePurge + +

+ +

Looks up a localized string similar to Removes all implementations from the cache. Use this command to clean up the system before removing Zero Install. Deleting cache directories manually may be difficult due to the NTFS ACLs employed to protect implementations against modification. +Additional arguments specify custom cache locations..

+
+
+ +
+
public static string DescriptionStorePurge { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreRemove + +

+ +

Looks up a localized string similar to Removes an implementation from the cache..

+
+
+ +
+
public static string DescriptionStoreRemove { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreRemoveDir + +

+ +

Looks up a localized string similar to Removes a directory from the list of custom implementation caches..

+
+
+ +
+
public static string DescriptionStoreRemoveDir { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreServe + +

+ +

Looks up a localized string similar to Serves implementations from the cache as archives via HTTP..

+
+
+ +
+
public static string DescriptionStoreServe { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionStoreVerify + +

+ +

Looks up a localized string similar to Makes sure an implementation has not been damaged (i.e. it manifest digest has not changed)..

+
+
+ +
+
public static string DescriptionStoreVerify { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionSync + +

+ +

Looks up a localized string similar to Synchronizes the application list with the server..

+
+
+ +
+
public static string DescriptionSync { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionTrustAdd + +

+ +

Looks up a localized string similar to Trusts feeds from a specific DOMAIN when signed with a specific FINGERPRINT..

+
+
+ +
+
public static string DescriptionTrustAdd { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionTrustList + +

+ +

Looks up a localized string similar to List keys trusted for signing feeds. Only list domains for which a specific FINGERPRINT is trusted, if specified..

+
+
+ +
+
public static string DescriptionTrustList { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionTrustRemove + +

+ +

Looks up a localized string similar to Stops trusting feeds signed with a specific FINGERPRINT. Only stops trusting for a specific DOMAIN, if specified..

+
+
+ +
+
public static string DescriptionTrustRemove { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionUpdate + +

+ +

Looks up a localized string similar to Checks for updates to the program and download them if found. +This is similar to '0install download --refresh', except that it prints information about whether any changes were found..

+
+
+ +
+
public static string DescriptionUpdate { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DescriptionUpdateApps + +

+ +

Looks up a localized string similar to Updates all applications in the application list..

+
+
+ +
+
public static string DescriptionUpdateApps { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DesktopIntegration + +

+ +

Looks up a localized string similar to Desktop integration.

+
+
+ +
+
public static string DesktopIntegration { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DesktopIntegrationApply + +

+ +

Looks up a localized string similar to Applying desktop integration.

+
+
+ +
+
public static string DesktopIntegrationApply { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DesktopIntegrationRemove + +

+ +

Looks up a localized string similar to Removing desktop integration.

+
+
+ +
+
public static string DesktopIntegrationRemove { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DiscoveringImplementation + +

+ +

Looks up a localized string similar to Searching in local network.

+
+
+ +
+
public static string DiscoveringImplementation { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Done + +

+ +

Looks up a localized string similar to Done.

+
+
+ +
+
public static string Done { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DownloadComplete + +

+ +

Looks up a localized string similar to Download complete.

+
+
+ +
+
public static string DownloadComplete { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ EnterCatalogUrl + +

+ +

Looks up a localized string similar to Please enter the URL or local file path of the feed catalog to add:.

+
+
+ +
+
public static string EnterCatalogUrl { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ EnterFeedUrl + +

+ +

Looks up a localized string similar to Please enter the URL of the new source of implementations for this interface:.

+
+
+ +
+
public static string EnterFeedUrl { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ExclusiveOptions + +

+ +

Looks up a localized string similar to The options {0} and {1} cannot be used together..

+
+
+ +
+
public static string ExclusiveOptions { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ExistingInstance + +

+ +

Looks up a localized string similar to An existing copy of Zero Install was detected in '{0}'..

+
+
+ +
+
public static string ExistingInstance { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ExportComplete + +

+ +

Looks up a localized string similar to Export complete..

+
+
+ +
+
public static string ExportComplete { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedAlreadyRegistered + +

+ +

Looks up a localized string similar to The feed was already registered for all appropriate interfaces..

+
+
+ +
+
public static string FeedAlreadyRegistered { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedManagement + +

+ +

Looks up a localized string similar to Feed management.

+
+
+ +
+
public static string FeedManagement { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedNotRegistered + +

+ +

Looks up a localized string similar to The feed was not registered for any interfaces..

+
+
+ +
+
public static string FeedNotRegistered { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedRegistered + +

+ +

Looks up a localized string similar to The feed was successfully registered for the following interfaces:.

+
+
+ +
+
public static string FeedRegistered { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedReplaced + +

+ +

Looks up a localized string similar to '{0}' has been replaced by '{1}'. Consider updating..

+
+
+ +
+
public static string FeedReplaced { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedReplacedAsk + +

+ +

Looks up a localized string similar to The feed for '{0}' ({1}) has been replaced by '{2}'. Do you want to use the new feed instead?.

+
+
+ +
+
public static string FeedReplacedAsk { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedUnregistered + +

+ +

Looks up a localized string similar to The feed was successfully unregistered for the following interfaces:.

+
+
+ +
+
public static string FeedUnregistered { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedsCached + +

+ +

Looks up a localized string similar to Cached feeds.

+
+
+ +
+
public static string FeedsCached { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedsRegistered + +

+ +

Looks up a localized string similar to Feeds registered for '{0}'.

+
+
+ +
+
public static string FeedsRegistered { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FileOrDirNotFound + +

+ +

Looks up a localized string similar to Unable to find file or directory '{0}'..

+
+
+ +
+
public static string FileOrDirNotFound { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FilePrefixAbsoluteUsage + +

+ +

Looks up a localized string similar to Use file:///path for absolute paths, not file:/path..

+
+
+ +
+
public static string FilePrefixAbsoluteUsage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Hide + +

+ +

Looks up a localized string similar to Hide.

+
+
+ +
+
public static string Hide { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ IgnoreMissingFeedFor + +

+ +

Looks up a localized string similar to This feed does not seem to be for the same application. Add it anyway? +A <feed-for> tag indicates feed compatibility..

+
+
+ +
+
public static string IgnoreMissingFeedFor { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ InstallService + +

+ +

Looks up a localized string similar to Installing Zero Install Store Service.

+
+
+ +
+
public static string InstallService { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Integrate + +

+ +

Looks up a localized string similar to Integrate {0}.

+
+
+ +
+
public static string Integrate { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ IntegrateAppInvalid + +

+ +

Looks up a localized string similar to Your desktop integration selections can not be applied..

+
+
+ +
+
public static string IntegrateAppInvalid { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ IntegrateAppRetry + +

+ +

Looks up a localized string similar to Do you want to change your selection and try again?.

+
+
+ +
+
public static string IntegrateAppRetry { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ IntegrateAppUseGui + +

+ +

Looks up a localized string similar to Please use the GUI version of Zero Install or specify explicit integration options using command-line arguments..

+
+
+ +
+
public static string IntegrateAppUseGui { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ InvalidArgument + +

+ +

Looks up a localized string similar to Invalid argument '{0}'..

+
+
+ +
+
public static string InvalidArgument { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ InvalidFeedUri + +

+ +

Looks up a localized string similar to '{0}' is not a valid feed URI or file path..

+
+
+ +
+
public static string InvalidFeedUri { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ KioskModeNotInCatalog + +

+ +

Looks up a localized string similar to Kiosk mode is enabled and {0} is not listed in the catalog..

+
+
+ +
+
public static string KioskModeNotInCatalog { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ LaterVersionNotSelected + +

+ +

Looks up a localized string similar to A later version ({0}) exists but was not selected. Using {1} instead..

+
+
+ +
+
public static string LaterVersionNotSelected { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ LicenseInfo + +

+ +

Looks up a localized string similar to This program comes with ABSOLUTELY NO WARRANTY, to the extent permitted by law. +You may redistribute copies of this program under the terms of the GNU Lesser General Public License..

+
+
+ +
+
public static string LicenseInfo { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ LocalPathOf + +

+ +

Looks up a localized string similar to Local path of {0}.

+
+
+ +
+
public static string LocalPathOf { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ MissingArguments + +

+ +

Looks up a localized string similar to Missing arguments..

+
+
+ +
+
public static string MissingArguments { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ MissingFeedFor + +

+ +

Looks up a localized string similar to Missing <feed-for> element in '{0}'; it can't be used as a feed for any other interface..

+
+
+ +
+
public static string MissingFeedFor { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ MissingOptionValue + +

+ +

Looks up a localized string similar to Missing required value for option {0}..

+
+
+ +
+
public static string MissingOptionValue { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ MustBeAdminForMachineWide + +

+ +

Looks up a localized string similar to You must be an administrator to perform machine-wide operations..

+
+
+ +
+
public static string MustBeAdminForMachineWide { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ MutexWait + +

+ +

Looks up a localized string similar to Waiting for all Zero Install instances to end.

+
+
+ +
+
public static string MutexWait { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ MyApps + +

+ +

Looks up a localized string similar to My applications.

+
+
+ +
+
public static string MyApps { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NeedsGui + +

+ +

Looks up a localized string similar to Please use the GUI version of Zero Install for this feature..

+
+
+ +
+
public static string NeedsGui { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NoAddCommandWithoutAlias + +

+ +

Looks up a localized string similar to {0} may only be specified together with an alias name..

+
+
+ +
+
public static string NoAddCommandWithoutAlias { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NoCustomizeSelectionsInCli + +

+ +

Looks up a localized string similar to The graphical policy editor is not available in command-line mode..

+
+
+ +
+
public static string NoCustomizeSelectionsInCli { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NoIntegrationDeployRequired + +

+ +

Looks up a localized string similar to Zero Install needs to be deployed on your system for desktop integration to work..

+
+
+ +
+
public static string NoIntegrationDeployRequired { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NoIntegrationFromPortable + +

+ +

Looks up a localized string similar to Zero Install is running in portable mode. It needs to be deployed to a permanent location for desktop integration to work. +You can do this using '{0}'. This will be completely independent from your portable copy..

+
+
+ +
+
public static string NoIntegrationFromPortable { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NoMachineWideIntegrationFromPerUser + +

+ +

Looks up a localized string similar to Zero Install is running from a user-specific directory. It needs to be deployed to a directory accessible by all users for machine-wide desktop integration to work..

+
+
+ +
+
public static string NoMachineWideIntegrationFromPerUser { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NoRunWithEmptyCommand + +

+ +

Looks up a localized string similar to When running an implementation the command may not be empty..

+
+
+ +
+
public static string NoRunWithEmptyCommand { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NoSelectionsDocumentUpdate + +

+ +

Looks up a localized string similar to Can only update with Feed URIs, not with selections documents..

+
+
+ +
+
public static string NoSelectionsDocumentUpdate { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NoUpdatesFound + +

+ +

Looks up a localized string similar to No updates found.

+
+
+ +
+
public static string NoUpdatesFound { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NotAvailableInPortableMode + +

+ +

Looks up a localized string similar to This operation is not available in portable mode..

+
+
+ +
+
public static string NotAvailableInPortableMode { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NotInImplDirs + +

+ +

Looks up a localized string similar to '{0}' is not in the list of custom implementation caches..

+
+
+ +
+
public static string NotInImplDirs { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OpenInFileManager + +

+ +

Looks up a localized string similar to &Open in file manager.

+
+
+ +
+
public static string OpenInFileManager { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptimiseComplete + +

+ +

Looks up a localized string similar to Optimization complete.

+
+
+ +
+
public static string OptimiseComplete { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionAlgorithm + +

+ +

Looks up a localized string similar to The {HASH} algorithm to use for the digest..

+
+
+ +
+
public static string OptionAlgorithm { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionAliasRemove + +

+ +

Looks up a localized string similar to Remove an existing alias..

+
+
+ +
+
public static string OptionAliasRemove { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionAliasResolve + +

+ +

Looks up a localized string similar to Print the interface URI for the given alias..

+
+
+ +
+
public static string OptionAliasResolve { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionBackground + +

+ +

Looks up a localized string similar to Hide the graphical user interface and use something like a tray icon instead..

+
+
+ +
+
public static string OptionBackground { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionBatch + +

+ +

Looks up a localized string similar to Automatically answer questions with defaults when possible and simplify console output (no tables or progress bars)..

+
+
+ +
+
public static string OptionBatch { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionBefore + +

+ +

Looks up a localized string similar to Require a version of the main program earlier than {VERSION}. i.e., force the use of an old version the program..

+
+
+ +
+
public static string OptionBefore { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionCatalogAddSkipVerify + +

+ +

Looks up a localized string similar to Skip downloading the catalog to verify it is valid before adding it to the list..

+
+
+ +
+
public static string OptionCatalogAddSkipVerify { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionClean + +

+ +

Looks up a localized string similar to Remove implementations no longer required after the update..

+
+
+ +
+
public static string OptionClean { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionCommand + +

+ +

Looks up a localized string similar to Instead of executing the default command, use {COMMAND} instead. Valid command names are specified in the program's feed. +Set to empty ("") to ignore the command during selection..

+
+
+ +
+
public static string OptionCommand { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionConfigTab + +

+ +

Looks up a localized string similar to Switch to a specific tab in the configuration GUI. Valid {TAB}s are 'updates', 'storage', 'catalog', 'trust', 'sync', 'language', 'language' and 'advanced'..

+
+
+ +
+
public static string OptionConfigTab { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionCpu + +

+ +

Looks up a localized string similar to Forces the solver to target a specific {CPU}..

+
+
+ +
+
public static string OptionCpu { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionCustomize + +

+ +

Looks up a localized string similar to Show the graphical policy editor. This allows you to customize which version of a program or library to use..

+
+
+ +
+
public static string OptionCustomize { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionDigest + +

+ +

Looks up a localized string similar to Display the manifest's digest (enabled by default if --manifest is not set)..

+
+
+ +
+
public static string OptionDigest { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionDiscover + +

+ +

Looks up a localized string similar to Try to discover implementations on other machines in the local network instead of fetching them from their original source..

+
+
+ +
+
public static string OptionDiscover { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionExportIncludeZeroInstall + +

+ +

Looks up a localized string similar to Include Zero Install itself in the export alongside the application..

+
+
+ +
+
public static string OptionExportIncludeZeroInstall { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionExportNoImplementations + +

+ +

Looks up a localized string similar to Do not include implementation archives in the export. Only export feeds..

+
+
+ +
+
public static string OptionExportNoImplementations { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionForceSelfUpdate + +

+ +

Looks up a localized string similar to Perform the update even if the currently installed version is the same or newer..

+
+
+ +
+
public static string OptionForceSelfUpdate { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionHelp + +

+ +

Looks up a localized string similar to Show the built-in help text..

+
+
+ +
+
public static string OptionHelp { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionIntegrateAdd + +

+ +

Looks up a localized string similar to Add all access points of a specific {CATEGORY}..

+
+
+ +
+
public static string OptionIntegrateAdd { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionIntegrateAddAll + +

+ +

Looks up a localized string similar to Add all available access points..

+
+
+ +
+
public static string OptionIntegrateAddAll { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionIntegrateAddStandard + +

+ +

Looks up a localized string similar to Add the recommended standard access points..

+
+
+ +
+
public static string OptionIntegrateAddStandard { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionIntegrateRemove + +

+ +

Looks up a localized string similar to Remove all access points of a specific {CATEGORY}..

+
+
+ +
+
public static string OptionIntegrateRemove { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionIntegrateRemoveAll + +

+ +

Looks up a localized string similar to Remove all access points..

+
+
+ +
+
public static string OptionIntegrateRemoveAll { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionLanguage + +

+ +

Looks up a localized string similar to Specifies the preferred language for the implementation. Use ISO short language codes (e.g. en or en-US). +You can use this option multiple times to specify multiple acceptable languages..

+
+
+ +
+
public static string OptionLanguage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionLibrary + +

+ +

Looks up a localized string similar to Deploy Zero Install as a library for use by other applications without its own desktop integration..

+
+
+ +
+
public static string OptionLibrary { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionMachine + +

+ +

Looks up a localized string similar to Apply the configuration machine-wide (for the entire computer) instead of just for the current user..

+
+
+ +
+
public static string OptionMachine { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionMain + +

+ +

Looks up a localized string similar to Run the specified executable {MAIN} instead of the default. If it starts with '/' or '' then the path is relative to the implementation's top-level directory, whereas otherwise it is relative to the directory containing the default main program. +May not contain command-line arguments! Whitespaces do not need to be escaped..

+
+
+ +
+
public static string OptionMain { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionManifest + +

+ +

Looks up a localized string similar to Display the manifest itself (one line for each file or directory)..

+
+
+ +
+
public static string OptionManifest { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionMessage + +

+ +

Looks up a localized string similar to Message to display when interacting with user..

+
+
+ +
+
public static string OptionMessage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionNoDownload + +

+ +

Looks up a localized string similar to Do not download the application itself yet. Will be automatically downloaded on first use instead..

+
+
+ +
+
public static string OptionNoDownload { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionNoWait + +

+ +

Looks up a localized string similar to Immediately returns once the chosen program has been launched instead of waiting for it to finish executing. On Windows the exit code is the process ID of the launched program..

+
+
+ +
+
public static string OptionNoWait { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionNotBefore + +

+ +

Looks up a localized string similar to Require a version of the main program not earlier than {VERSION}. E.g., if you want to run version 2.0 or later, use --not-before=2.0..

+
+
+ +
+
public static string OptionNotBefore { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionOS + +

+ +

Looks up a localized string similar to Forces the solver to target the operating system {OS}..

+
+
+ +
+
public static string OptionOS { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionOffline + +

+ +

Looks up a localized string similar to Run in off-line mode, overriding the default setting. +In off-line mode, no interfaces are refreshed even if they are out-of-date, and newer versions of programs won't be downloaded even if the injector already knows about them (e.g. from a previous refresh)..

+
+
+ +
+
public static string OptionOffline { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionPortable + +

+ +

Looks up a localized string similar to Create a portable installation that can be moved around (e.g., on a thumb drive)..

+
+
+ +
+
public static string OptionPortable { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionRefresh + +

+ +

Looks up a localized string similar to Fetch fresh copies of all used feeds..

+
+
+ +
+
public static string OptionRefresh { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionRestartCentral + +

+ +

Looks up a localized string similar to Restart the '0install central' GUI after the update..

+
+
+ +
+
public static string OptionRestartCentral { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionShow + +

+ +

Looks up a localized string similar to Show where the selected components are stored on the disk..

+
+
+ +
+
public static string OptionShow { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionSource + +

+ +

Looks up a localized string similar to Select source code rather than a binary. This is used internally by '0compile'..

+
+
+ +
+
public static string OptionSource { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionSyncReset + +

+ +

Looks up a localized string similar to Reset the synchronization data. Valid {MODE}s are 'none' (merge data from client and server normally), 'client' (replace all data on client with data from server) and 'server' (replace all data on server with data from client)..

+
+
+ +
+
public static string OptionSyncReset { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionVerbose + +

+ +

Looks up a localized string similar to More verbose output. Use twice for even more verbose output..

+
+
+ +
+
public static string OptionVerbose { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionVersion + +

+ +

Looks up a localized string similar to Display version information..

+
+
+ +
+
public static string OptionVersion { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionVersionRange + +

+ +

Looks up a localized string similar to Require a version of the main program within the given {RANGE}. +Ranges are separated by pipes (|). +Each range is in the form "START..!END". The range matches versions where START <= VERSION < END. The start or end may be omitted. +A single version number may be used instead of a range to match only that version, or !VERSION to match everything except that version..

+
+
+ +
+
public static string OptionVersionRange { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionVersionRangeFor + +

+ +

Looks up a localized string similar to For any library or sub-component with the given {0:URI} specifies the version {1:RANGE} (as for --version)..

+
+
+ +
+
public static string OptionVersionRangeFor { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionWithStore + +

+ +

Looks up a localized string similar to Add {DIR} to the list of implementation caches to search. +However, new downloads will not be written to this directory..

+
+
+ +
+
public static string OptionWithStore { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionWrapper + +

+ +

Looks up a localized string similar to Instead of executing the chosen program directly, run {COMMAND} PROGRAM ARGS. This is useful for running debuggers and tracing tools on the program (rather than on Zero Install!). +Note that the wrapper is executed in the environment selected by the program; hence, this mechanism cannot be used for sandboxing. +May contain command-line arguments. Whitespaces must be escaped!.

+
+
+ +
+
public static string OptionWrapper { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OptionXml + +

+ +

Looks up a localized string similar to Write output to console as machine-readable XML..

+
+
+ +
+
public static string OptionXml { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Options + +

+ +

Looks up a localized string similar to Options:.

+
+
+ +
+
public static string Options { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ PortableMode + +

+ +

Looks up a localized string similar to Portable mode.

+
+
+ +
+
public static string PortableMode { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ PropertiesFor + +

+ +

Looks up a localized string similar to Properties for {0}.

+
+
+ +
+
public static string PropertiesFor { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Remove + +

+ +

Looks up a localized string similar to Remove.

+
+
+ +
+
public static string Remove { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ RemoveCheckedKeys + +

+ +

Looks up a localized string similar to Do you want to remove the {0} checked keys from the list?.

+
+
+ +
+
public static string RemoveCheckedKeys { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ RemoveSelectedEntries + +

+ +

Looks up a localized string similar to Do you want to remove the {0} selected entries from the list?.

+
+
+ +
+
public static string RemoveSelectedEntries { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ RemovingApplications + +

+ +

Looks up a localized string similar to Removing applications.

+
+
+ +
+
public static string RemovingApplications { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ RemovingOutdated + +

+ +

Looks up a localized string similar to Removing outdated implementations.

+
+
+ +
+
public static string RemovingOutdated { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ReopenTerminal + +

+ +

Looks up a localized string similar to You may have to close and reopen your terminal for this to become effective..

+
+
+ +
+
public static string ReopenTerminal { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ResetList + +

+ +

Looks up a localized string similar to Do you want to reset the list to its original state?.

+
+
+ +
+
public static string ResetList { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ResolvedUsingAlias + +

+ +

Looks up a localized string similar to Resolved '{0}' to '{1}' using an alias..

+
+
+ +
+
public static string ResolvedUsingAlias { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ResolvedUsingCatalog + +

+ +

Looks up a localized string similar to Resolved '{0}' to '{1}' using a catalog..

+
+
+ +
+
public static string ResolvedUsingCatalog { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ResourceManager + +

+ +

Returns the cached ResourceManager instance used by this class.

+
+
+ +
+
public static ResourceManager ResourceManager { get; }
+
+ + + + + +

Property Value

+
+
ResourceManager
+
+
+ + + + + + + + + + +

+ RunNgen + +

+ +

Looks up a localized string similar to Pre-compiling .NET assemblies for faster application startup.

+
+
+ +
+
public static string RunNgen { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SelectedImplementations + +

+ +

Looks up a localized string similar to Selected implementations.

+
+
+ +
+
public static string SelectedImplementations { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SelfRemoveNotDeployed + +

+ +

Looks up a localized string similar to This instance of Zero Install is not deployed. There is nothing to remove..

+
+
+ +
+
public static string SelfRemoveNotDeployed { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SelfUpdateAvailable + +

+ +

Looks up a localized string similar to An update to Zero Install v{0} is available. Install now?.

+
+
+ +
+
public static string SelfUpdateAvailable { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SelfUpdateBlocked + +

+ +

Looks up a localized string similar to This Zero Install instance was not deployed. It therefore cannot update itself..

+
+
+ +
+
public static string SelfUpdateBlocked { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SelfUpdateDisabled + +

+ +

Looks up a localized string similar to Self-update is disabled. +Run '0install config self_update_uri default' to enable it..

+
+
+ +
+
public static string SelfUpdateDisabled { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ServingImplementations + +

+ +

Looks up a localized string similar to Serving implementations on port {0}.

+
+
+ +
+
public static string ServingImplementations { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ StabilityPolicyAutoSet + +

+ +

Looks up a localized string similar to Set stability policy for {0} to match?.

+
+
+ +
+
public static string StabilityPolicyAutoSet { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ StabilityPolicyReset + +

+ +

Looks up a localized string similar to Reset stability policy for {0} to default?.

+
+
+ +
+
public static string StabilityPolicyReset { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ StabilityPolicySuggested + +

+ +

Looks up a localized string similar to The stability policy needed to select implementations from {0} is '{1}'..

+
+
+ +
+
public static string StabilityPolicySuggested { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ StartService + +

+ +

Looks up a localized string similar to Starting Zero Install Store Service.

+
+
+ +
+
public static string StartService { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ StopService + +

+ +

Looks up a localized string similar to Stopping Zero Install Store Service.

+
+
+ +
+
public static string StopService { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ StorageReclaimed + +

+ +

Looks up a localized string similar to {0} storage space reclaimed..

+
+
+ +
+
public static string StorageReclaimed { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ StoreAudit + +

+ +

Looks up a localized string similar to Store audit.

+
+
+ +
+
public static string StoreAudit { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SuggestLongPath + +

+ +

Looks up a localized string similar to Enabling Windows support for Long Paths may solve this problem..

+
+
+ +
+
public static string SuggestLongPath { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SupportedValues + +

+ +

Looks up a localized string similar to Supported values: {0}.

+
+
+ +
+
public static string SupportedValues { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SyncCryptoKeyDescription + +

+ +

Looks up a localized string similar to The crypto key is used to encrypt your data locally before transmitting it to the server. +Keep this key secret and use something different for your password. This way nobody can access your data, even if the server were to be compromised..

+
+
+ +
+
public static string SyncCryptoKeyDescription { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ TooManyArguments + +

+ +

Looks up a localized string similar to Too many arguments or unknown options..

+
+
+ +
+
public static string TooManyArguments { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ TrustedForDomains + +

+ +

Looks up a localized string similar to {0} trusted for domains.

+
+
+ +
+
public static string TrustedForDomains { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ TrustedKeys + +

+ +

Looks up a localized string similar to Trusted keys.

+
+
+ +
+
public static string TrustedKeys { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ TryHelp + +

+ +

Looks up a localized string similar to Try {0}.

+
+
+ +
+
public static string TryHelp { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ TryHelpWith + +

+ +

Looks up a localized string similar to Try {0} with one of these:.

+
+
+ +
+
public static string TryHelpWith { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ UninstallService + +

+ +

Looks up a localized string similar to Uninstalling Zero Install Store Service.

+
+
+ +
+
public static string UninstallService { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ UnknownCommand + +

+ +

Looks up a localized string similar to Unknown command '{0}'..

+
+
+ +
+
public static string UnknownCommand { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Usage + +

+ +

Looks up a localized string similar to Usage:.

+
+
+ +
+
public static string Usage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ UseDefaultSetting + +

+ +

Looks up a localized string similar to Use default setting.

+
+
+ +
+
public static string UseDefaultSetting { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ UseInstead + +

+ +

Looks up a localized string similar to Use '{0}' instead..

+
+
+ +
+
public static string UseInstead { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ UseSystemLanguage + +

+ +

Looks up a localized string similar to Use system language.

+
+
+ +
+
public static string UseSystemLanguage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Verify + +

+ +

Looks up a localized string similar to Verify.

+
+
+ +
+
public static string Verify { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ VerifyImplementation + +

+ +

Looks up a localized string similar to Verify implementation.

+
+
+ +
+
public static string VerifyImplementation { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ VersionInformation + +

+ +

Looks up a localized string similar to Version information.

+
+
+ +
+
public static string VersionInformation { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Working + +

+ +

Looks up a localized string similar to Working.

+
+
+ +
+
public static string Working { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.Properties.html b/api/ZeroInstall.Commands.Properties.html new file mode 100644 index 000000000..5c36b3c7c --- /dev/null +++ b/api/ZeroInstall.Commands.Properties.html @@ -0,0 +1,127 @@ + + + + + Namespace ZeroInstall.Commands.Properties | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Commands.Properties

+
+
+
+ +

+Classes +

+
+
Resources
+

A strongly-typed resource class, for looking up localized strings, etc.

+
+
+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.ScopedOperation.html b/api/ZeroInstall.Commands.ScopedOperation.html new file mode 100644 index 000000000..8bfd5587c --- /dev/null +++ b/api/ZeroInstall.Commands.ScopedOperation.html @@ -0,0 +1,498 @@ + + + + + Class ScopedOperation | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ScopedOperation +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

Common base class for Zero Install operations that require scoped dependency resolution.

+
+
+ +
+
public abstract class ScopedOperation : ServiceProvider
+
+ + + + +
+
Inheritance
+
+ + +
ScopedOperation
+
+
+ + +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ScopedOperation(ITaskHandler) + +

+ +

Common base class for Zero Install operations that require scoped dependency resolution.

+
+
+ +
+
protected ScopedOperation(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ MinimumNetworkUseForBackgroundSelfUpdate + +

+ +

The minimum EffectiveNetworkUse at which BackgroundSelfUpdate() will consider an update check.

+
+
+ +
+
protected virtual NetworkLevel MinimumNetworkUseForBackgroundSelfUpdate { get; }
+
+ + + + + +

Property Value

+
+
NetworkLevel
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ BackgroundSelfUpdate() + +

+ +

Automatically updates Zero Install itself in a background process.

+
+
+ +
+
protected bool BackgroundSelfUpdate()
+
+ + +

Returns

+
+
bool
+

true if a background check was started; false if an update check was not due.

+
+
+ + + + + + + + + + + + + +

+ EnsureAllowed(FeedUri) + +

+ +

Ensures that the current config does not prohibit the use of the specified feed URI.

+
+
+ +
+
protected void EnsureAllowed(FeedUri uri)
+
+ +

Parameters

+
+
uri FeedUri
+
+
+ + + + + + + + + +

Exceptions

+
+
WebException
+

KioskMode is true and the uri is not the Catalog.

+
+
+ + + + + +

+ FindByShortName(string) + +

+ +

Uses FindByShortName(string?) to find a Feed matching a specific short name.

+
+
+ +
+
protected Feed? FindByShortName(string shortName)
+
+ +

Parameters

+
+
shortName string
+

The short name to look for. Must match either Name or BinaryName of NameRun.

+
+
+ +

Returns

+
+
Feed
+

The first matching Feed; null if no match was found.

+
+
+ + + + + + + +

Remarks

+

Handles caching based on Refresh flag.

+
+ + + + + + +

+ GetCanonicalUri(string) + +

+ +

Converts an interface or feed URI to its canonical representation.

+
+
+ +
+
public FeedUri GetCanonicalUri(string uri)
+
+ +

Parameters

+
+
uri string
+
+
+ +

Returns

+
+
FeedUri
+
+
+ + + + + + + + +

Exceptions

+
+
UriFormatException
+

uri is an invalid interface URI.

+
+
+ + + + + +

+ StartCommandBackground(string, params string[]) + +

+ +

Starts executing a command in a background process. Returns immediately.

+
+
+ +
+
protected static void StartCommandBackground(string command, params string[] args)
+
+ +

Parameters

+
+
command string
+

The name of the command to execute.

+
+
args string[]
+

Additional arguments to pass to the command.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.UnsuitableInstallBaseException.html b/api/ZeroInstall.Commands.UnsuitableInstallBaseException.html new file mode 100644 index 000000000..dbc029b88 --- /dev/null +++ b/api/ZeroInstall.Commands.UnsuitableInstallBaseException.html @@ -0,0 +1,383 @@ + + + + + Class UnsuitableInstallBaseException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class UnsuitableInstallBaseException +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

Indicates that the current InstallBase is unsuitable for the desired operation.

+
+
+ +
+
[Serializable]
+public sealed class UnsuitableInstallBaseException : NotSupportedException, ISerializable
+
+ + + + +
+
Inheritance
+
+ + + + +
UnsuitableInstallBaseException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ UnsuitableInstallBaseException() + +

+ +

Initializes a new instance of the NotSupportedException class, setting the Message property of the new instance to a system-supplied message that describes the error. This message takes into account the current system culture.

+
+
+ +
+
public UnsuitableInstallBaseException()
+
+ + + + + + + + + + + + + + + +

+ UnsuitableInstallBaseException(string) + +

+ +

Initializes a new instance of the NotSupportedException class with a specified error message.

+
+
+ +
+
public UnsuitableInstallBaseException(string message)
+
+ +

Parameters

+
+
message string
+

A string that describes the error. The content of message is intended to be understood by humans. The caller of this constructor is required to ensure that this string has been localized for the current system culture.

+
+
+ + + + + + + + + + + + + + +

+ UnsuitableInstallBaseException(string, bool) + +

+ +

Creates a new unsuitable install base exception.

+
+
+ +
+
public UnsuitableInstallBaseException(string message, bool needsMachineWide)
+
+ +

Parameters

+
+
message string
+

A message describing why the current location in unsuitable.

+
+
needsMachineWide bool
+

true if a machine-wide location is required; false if a user-specific location will also do.

+
+
+ + + + + + + + + + + + + + +

+ UnsuitableInstallBaseException(string, Exception) + +

+ +

Initializes a new instance of the NotSupportedException class with a specified error message and a reference to the inner exception that is the cause of this exception.

+
+
+ +
+
public UnsuitableInstallBaseException(string message, Exception innerException)
+
+ +

Parameters

+
+
message string
+

The error message that explains the reason for the exception.

+
+
innerException Exception
+

The exception that is the cause of the current exception. If the innerException parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ NeedsMachineWide + +

+ +

true if a machine-wide install location is required; false if a user-specific location will also do.

+
+
+ +
+
public bool NeedsMachineWide { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.ZeroInstallInstance.html b/api/ZeroInstall.Commands.ZeroInstallInstance.html new file mode 100644 index 000000000..a6f524b9a --- /dev/null +++ b/api/ZeroInstall.Commands.ZeroInstallInstance.html @@ -0,0 +1,378 @@ + + + + + Class ZeroInstallInstance | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ZeroInstallInstance +

+ +
+
Namespace
ZeroInstall.Commands
+
Assembly
0install.dll
+
+ +

Provides information about the currently running instance of Zero Install.

+
+
+ +
+
public static class ZeroInstallInstance
+
+ + + + +
+
Inheritance
+
+ +
ZeroInstallInstance
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ IsDeployed + +

+ +

Indicates whether the current Zero Install instance is deployed to a fixed location.

+
+
+ +
+
public static bool IsDeployed { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ IsIntegrated + +

+ +

Indicates whether the current Zero Install instance is integrated into the desktop environment.

+
+
+ +
+
public static bool IsIntegrated { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ IsLibraryMode + +

+ +

Indicates whether the current Zero Install instance is in library mode.

+
+
+ +
+
public static bool IsLibraryMode { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ IsMachineWide + +

+ +

Indicates whether Zero Install is running from a machine-wide location.

+
+
+ +
+
public static bool IsMachineWide { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Version + +

+ +

The current version of Zero Install.

+
+
+ +
+
public static ImplementationVersion Version { get; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ SilentUpdateCheck() + +

+ +

Silently checks if an update for Zero Install is available.

+
+
+ +
+
public static ImplementationVersion? SilentUpdateCheck()
+
+ + +

Returns

+
+
ImplementationVersion
+

The version number of the newest available update; null if no update is available.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Commands.html b/api/ZeroInstall.Commands.html new file mode 100644 index 000000000..bc7fb45f7 --- /dev/null +++ b/api/ZeroInstall.Commands.html @@ -0,0 +1,211 @@ + + + + + Namespace ZeroInstall.Commands | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Commands

+
+

Command-line interface for Zero Install. Both an actual CLI and a library for building other clients.

+

NuGet package: ZeroInstall.Commands

+
+
+
+ +

+Namespaces +

+
+
ZeroInstall.Commands.Basic
+
+

CLI commands for Zero Install's core features.

+
+
+
+
ZeroInstall.Commands.Desktop
+
+

CLI commands for Zero Install's desktop integration features.

+
+
+
+
ZeroInstall.Commands.Properties
+
+
+

+Classes +

+
+
CliCommand
+

Represents a command invoked via command-line arguments.

+
+
+
+
CliCommandHandler
+

Uses the stdin/stderr streams to allow users to interact with CliCommands.

+
+
+
+
CliMultiCommand
+

Common base class for commands that provide multiple sub-CliCommands.

+
+
+
+
EnvironmentBuilderExtensions
+

Provides extension methods for IEnvironmentBuilder.

+
+
+
+
NeedsGuiException
+

Indicates that the requested operation requires a GUI but the current process does not have one.

+
+
+
+
ProgramUtils
+

Provides utility methods for application entry points.

+
+
+
+
ScopedOperation
+

Common base class for Zero Install operations that require scoped dependency resolution.

+
+
+
+
UnsuitableInstallBaseException
+

Indicates that the current InstallBase is unsuitable for the desired operation.

+
+
+
+
ZeroInstallInstance
+

Provides information about the currently running instance of Zero Install.

+
+
+

+Interfaces +

+
+
ICliSubCommand
+

Interface for CliCommands that are aggregated by a CliMultiCommand.

+
+
+
+
ICommandHandler
+

Callback methods to allow users to interact with CliCommands.

+
+
+

+Enums +

+
+
ExitCode
+

An exit code is returned to the original caller after the application terminates, to indicate success or the reason for failure.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPoint.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPoint.html new file mode 100644 index 000000000..a0c7b10aa --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPoint.html @@ -0,0 +1,404 @@ + + + + + Class AccessPoint | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AccessPoint +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

An access point represents changes to the desktop environment's UI which the user explicitly requested.

+
+
+ +
+
public abstract class AccessPoint : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<AccessPoint>
+
+ + + + +
+
Inheritance
+
+ + +
AccessPoint
+
+
+ +
+
Implements
+
+ + +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public abstract void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public abstract AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public abstract IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public abstract void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPointList.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPointList.html new file mode 100644 index 000000000..a1ce29365 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPointList.html @@ -0,0 +1,453 @@ + + + + + Class AccessPointList | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AccessPointList +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains a set of AccessPoints to be registered in a desktop environment.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class AccessPointList : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<AccessPointList>, IEquatable<AccessPointList>
+
+ + + + +
+
Inheritance
+
+ + +
AccessPointList
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Entries + +

+ +

A list of AccessPoints.

+
+
+ +
+
[OrderedEquality]
+public List<AccessPoint> Entries { get; }
+
+ + + + + +

Property Value

+
+
List<AccessPoint>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPointList instance.

+
+
+ +
+
public AccessPointList Clone()
+
+ + +

Returns

+
+
AccessPointList
+

The new copy of the AccessPointList.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the access point list in the form "Entry; Entry; ...". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(AccessPointList?, AccessPointList?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(AccessPointList? left, AccessPointList? right)
+
+ +

Parameters

+
+
left AccessPointList
+

The left object

+
+
right AccessPointList
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(AccessPointList?, AccessPointList?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(AccessPointList? left, AccessPointList? right)
+
+ +

Parameters

+
+
left AccessPointList
+

The left object

+
+
right AccessPointList
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.AppAlias.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.AppAlias.html new file mode 100644 index 000000000..e139452c8 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.AppAlias.html @@ -0,0 +1,666 @@ + + + + + Class AppAlias | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AppAlias +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Makes an application discoverable via the system's search PATH.

+
+
+ +
+
[Equatable]
+public class AppAlias : CommandAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<CommandAccessPoint>, IEquatable<AppAlias>
+
+ + + + +
+
Inheritance
+
+ + + + +
AppAlias
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "aliases"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TagName + +

+ +
+
+ +
+
public const string TagName = "alias"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(AppAlias?) + +

+ +
+
+ +
+
protected bool Equals(AppAlias? other)
+
+ +

Parameters

+
+
other AppAlias
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(AppAlias?, AppAlias?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(AppAlias? left, AppAlias? right)
+
+ +

Parameters

+
+
left AppAlias
+

The left object

+
+
right AppAlias
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(AppAlias?, AppAlias?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(AppAlias? left, AppAlias? right)
+
+ +

Parameters

+
+
left AppAlias
+

The left object

+
+
right AppAlias
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.AutoPlay.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.AutoPlay.html new file mode 100644 index 000000000..e60a917bd --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.AutoPlay.html @@ -0,0 +1,635 @@ + + + + + Class AutoPlay | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AutoPlay +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Makes an application the default AutoPlay handler for a specific event.

+
+
+ +
+
[Equatable]
+public class AutoPlay : DefaultAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<DefaultAccessPoint>, IEquatable<AutoPlay>
+
+ + + + +
+
Inheritance
+
+ + + + +
AutoPlay
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(AutoPlay?) + +

+ +
+
+ +
+
protected bool Equals(AutoPlay? other)
+
+ +

Parameters

+
+
other AutoPlay
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the access point in the form "AutoPlay". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(AutoPlay?, AutoPlay?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(AutoPlay? left, AutoPlay? right)
+
+ +

Parameters

+
+
left AutoPlay
+

The left object

+
+
right AutoPlay
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(AutoPlay?, AutoPlay?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(AutoPlay? left, AutoPlay? right)
+
+ +

Parameters

+
+
left AutoPlay
+

The left object

+
+
right AutoPlay
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+
+ +
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.AutoStart.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.AutoStart.html new file mode 100644 index 000000000..a2ba2968d --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.AutoStart.html @@ -0,0 +1,636 @@ + + + + + Class AutoStart | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AutoStart +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Automatically starts an application when the user logs in.

+
+
+ +
+
[Equatable]
+public class AutoStart : CommandAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<CommandAccessPoint>, IEquatable<AutoStart>
+
+ + + + +
+
Inheritance
+
+ + + + +
AutoStart
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ TagName + +

+ +
+
+ +
+
public const string TagName = "auto-start"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(AutoStart?) + +

+ +
+
+ +
+
protected bool Equals(AutoStart? other)
+
+ +

Parameters

+
+
other AutoStart
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(AutoStart?, AutoStart?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(AutoStart? left, AutoStart? right)
+
+ +

Parameters

+
+
left AutoStart
+

The left object

+
+
right AutoStart
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(AutoStart?, AutoStart?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(AutoStart? left, AutoStart? right)
+
+ +

Parameters

+
+
left AutoStart
+

The left object

+
+
right AutoStart
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.CapabilityRegistration.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.CapabilityRegistration.html new file mode 100644 index 000000000..cf8d574fa --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.CapabilityRegistration.html @@ -0,0 +1,685 @@ + + + + + Class CapabilityRegistration | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CapabilityRegistration +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Indicates that all compatible capabilities should be registered.

+
+
+ +
+
[Equatable]
+public class CapabilityRegistration : AccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<CapabilityRegistration>
+
+ + + + +
+
Inheritance
+
+ + + +
CapabilityRegistration
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "capabilities"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TagName + +

+ +
+
+ +
+
public const string TagName = "capability-registration"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(CapabilityRegistration?) + +

+ +
+
+ +
+
protected bool Equals(CapabilityRegistration? other)
+
+ +

Parameters

+
+
other CapabilityRegistration
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the access point in the form "CapabilityRegistration". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(CapabilityRegistration?, CapabilityRegistration?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(CapabilityRegistration? left, CapabilityRegistration? right)
+
+ +

Parameters

+
+
left CapabilityRegistration
+

The left object

+
+
right CapabilityRegistration
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(CapabilityRegistration?, CapabilityRegistration?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(CapabilityRegistration? left, CapabilityRegistration? right)
+
+ +

Parameters

+
+
left CapabilityRegistration
+

The left object

+
+
right CapabilityRegistration
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.CommandAccessPoint.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.CommandAccessPoint.html new file mode 100644 index 000000000..d8bbe5549 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.CommandAccessPoint.html @@ -0,0 +1,553 @@ + + + + + Class CommandAccessPoint | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CommandAccessPoint +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Adds a way to explicitly launch the application to the desktop environment.

+
+
+ +
+
[Equatable]
+public abstract class CommandAccessPoint : AccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<CommandAccessPoint>
+
+ + + + +
+
Inheritance
+
+ + + +
CommandAccessPoint
+
+
+ +
+
Implements
+
+ + + +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Command + +

+ +

The name of the Command to use when launching via this access point. Leave empty to use default.

+
+
+ +
+
public string? Command { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The name of the menu entry, icon, command-line, etc..

+
+
+ +
+
public string? Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(CommandAccessPoint?) + +

+ +
+
+ +
+
protected bool Equals(CommandAccessPoint? other)
+
+ +

Parameters

+
+
other CommandAccessPoint
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the access point in the form "AccessPointType: Name (Command)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ ValidateName() + +

+ +

Ensures that the given name can be used as a file name.

+
+
+ +
+
protected void ValidateName()
+
+ + + + + + + + + + +

Exceptions

+
+
IOException
+

Name contains invalid characters.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(CommandAccessPoint?, CommandAccessPoint?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(CommandAccessPoint? left, CommandAccessPoint? right)
+
+ +

Parameters

+
+
left CommandAccessPoint
+

The left object

+
+
right CommandAccessPoint
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(CommandAccessPoint?, CommandAccessPoint?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(CommandAccessPoint? left, CommandAccessPoint? right)
+
+ +

Parameters

+
+
left CommandAccessPoint
+

The left object

+
+
right CommandAccessPoint
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+
+ +
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.ContextMenu.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.ContextMenu.html new file mode 100644 index 000000000..321733997 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.ContextMenu.html @@ -0,0 +1,635 @@ + + + + + Class ContextMenu | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ContextMenu +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Integrates an application into a file manager's context menu.

+
+
+ +
+
[Equatable]
+public class ContextMenu : DefaultAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<DefaultAccessPoint>, IEquatable<ContextMenu>
+
+ + + + +
+
Inheritance
+
+ + + + +
ContextMenu
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(ContextMenu?) + +

+ +
+
+ +
+
protected bool Equals(ContextMenu? other)
+
+ +

Parameters

+
+
other ContextMenu
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the access point in the form "ContextMenu". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(ContextMenu?, ContextMenu?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ContextMenu? left, ContextMenu? right)
+
+ +

Parameters

+
+
left ContextMenu
+

The left object

+
+
right ContextMenu
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ContextMenu?, ContextMenu?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ContextMenu? left, ContextMenu? right)
+
+ +

Parameters

+
+
left ContextMenu
+

The left object

+
+
right ContextMenu
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultAccessPoint.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultAccessPoint.html new file mode 100644 index 000000000..8ad05a0cb --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultAccessPoint.html @@ -0,0 +1,526 @@ + + + + + Class DefaultAccessPoint | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DefaultAccessPoint +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Makes an application the default handler for something.

+
+
+ +
+
[Equatable]
+public abstract class DefaultAccessPoint : AccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<DefaultAccessPoint>
+
+ + + + +
+
Inheritance
+
+ + + +
DefaultAccessPoint
+
+
+ +
+
Implements
+
+ + + +
+
+ +
+
Derived
+
+ + + + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "default-app"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TagName + +

+ +
+
+ +
+
public const string TagName = "default-access-point"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Capability + +

+ +

The ID of the Capability to be made the default handler.

+
+
+ +
+
public required string Capability { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(DefaultAccessPoint?) + +

+ +
+
+ +
+
protected bool Equals(DefaultAccessPoint? other)
+
+ +

Parameters

+
+
other DefaultAccessPoint
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(DefaultAccessPoint?, DefaultAccessPoint?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(DefaultAccessPoint? left, DefaultAccessPoint? right)
+
+ +

Parameters

+
+
left DefaultAccessPoint
+

The left object

+
+
right DefaultAccessPoint
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(DefaultAccessPoint?, DefaultAccessPoint?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(DefaultAccessPoint? left, DefaultAccessPoint? right)
+
+ +

Parameters

+
+
left DefaultAccessPoint
+

The left object

+
+
right DefaultAccessPoint
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultProgram.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultProgram.html new file mode 100644 index 000000000..dd114c07e --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultProgram.html @@ -0,0 +1,635 @@ + + + + + Class DefaultProgram | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DefaultProgram +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Makes an application a default program of some kind (e.g. default web-browser, default e-mail client, ...).

+
+
+ +
+
[Equatable]
+public class DefaultProgram : DefaultAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<DefaultAccessPoint>, IEquatable<DefaultProgram>
+
+ + + + +
+
Inheritance
+
+ + + + +
DefaultProgram
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(DefaultProgram?) + +

+ +
+
+ +
+
protected bool Equals(DefaultProgram? other)
+
+ +

Parameters

+
+
other DefaultProgram
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the access point in the form "DefaultProgram". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(DefaultProgram?, DefaultProgram?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(DefaultProgram? left, DefaultProgram? right)
+
+ +

Parameters

+
+
left DefaultProgram
+

The left object

+
+
right DefaultProgram
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(DefaultProgram?, DefaultProgram?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(DefaultProgram? left, DefaultProgram? right)
+
+ +

Parameters

+
+
left DefaultProgram
+

The left object

+
+
right DefaultProgram
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.DesktopIcon.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.DesktopIcon.html new file mode 100644 index 000000000..d6e15d5b0 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.DesktopIcon.html @@ -0,0 +1,667 @@ + + + + + Class DesktopIcon | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DesktopIcon +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Creates an icon for an application on the user's desktop.

+
+
+ +
+
[Equatable]
+public class DesktopIcon : IconAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<CommandAccessPoint>, IEquatable<DesktopIcon>
+
+ + + + +
+
Inheritance
+
+ + + + + +
DesktopIcon
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "desktop"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TagName + +

+ +
+
+ +
+
public const string TagName = "desktop-icon"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(DesktopIcon?) + +

+ +
+
+ +
+
protected bool Equals(DesktopIcon? other)
+
+ +

Parameters

+
+
other DesktopIcon
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(DesktopIcon?, DesktopIcon?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(DesktopIcon? left, DesktopIcon? right)
+
+ +

Parameters

+
+
left DesktopIcon
+

The left object

+
+
right DesktopIcon
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(DesktopIcon?, DesktopIcon?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(DesktopIcon? left, DesktopIcon? right)
+
+ +

Parameters

+
+
left DesktopIcon
+

The left object

+
+
right DesktopIcon
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.FileType.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.FileType.html new file mode 100644 index 000000000..2e12c22fc --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.FileType.html @@ -0,0 +1,635 @@ + + + + + Class FileType | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FileType +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Makes an application the default handler for a specific file type.

+
+
+ +
+
[Equatable]
+public class FileType : DefaultAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<DefaultAccessPoint>, IEquatable<FileType>
+
+ + + + +
+
Inheritance
+
+ + + + +
FileType
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(FileType?) + +

+ +
+
+ +
+
protected bool Equals(FileType? other)
+
+ +

Parameters

+
+
other FileType
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the access point in the form "FileType: Capability". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(FileType?, FileType?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(FileType? left, FileType? right)
+
+ +

Parameters

+
+
left FileType
+

The left object

+
+
right FileType
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(FileType?, FileType?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(FileType? left, FileType? right)
+
+ +

Parameters

+
+
left FileType
+

The left object

+
+
right FileType
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+
+ +
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.IconAccessPoint.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.IconAccessPoint.html new file mode 100644 index 000000000..114d323a3 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.IconAccessPoint.html @@ -0,0 +1,239 @@ + + + + + Class IconAccessPoint | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IconAccessPoint +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Creates some form of icon in the desktop environment.

+
+
+ +
+
public abstract class IconAccessPoint : CommandAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<CommandAccessPoint>
+
+ + + + +
+
Inheritance
+
+ + + + +
IconAccessPoint
+
+
+ +
+
Implements
+
+ + + +
+
+ +
+
Derived
+
+ + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.MenuEntry.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.MenuEntry.html new file mode 100644 index 000000000..0bfdcb38e --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.MenuEntry.html @@ -0,0 +1,703 @@ + + + + + Class MenuEntry | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class MenuEntry +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Creates an entry for an application in the user's application menu (i.e. Windows start menu, GNOME application menu, etc.).

+
+
+ +
+
[Equatable]
+public class MenuEntry : IconAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<CommandAccessPoint>, IEquatable<MenuEntry>
+
+ + + + +
+
Inheritance
+
+ + + + + +
MenuEntry
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ AltName + +

+ +
+
+ +
+
public const string AltName = "menu"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TagName + +

+ +
+
+ +
+
public const string TagName = "menu-entry"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Category + +

+ +

The category or folder in the menu to add the entry to. Leave empty for top-level entry.

+
+
+ +
+
public string? Category { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(MenuEntry?) + +

+ +
+
+ +
+
protected bool Equals(MenuEntry? other)
+
+ +

Parameters

+
+
other MenuEntry
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(MenuEntry?, MenuEntry?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(MenuEntry? left, MenuEntry? right)
+
+ +

Parameters

+
+
left MenuEntry
+

The left object

+
+
right MenuEntry
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(MenuEntry?, MenuEntry?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(MenuEntry? left, MenuEntry? right)
+
+ +

Parameters

+
+
left MenuEntry
+

The left object

+
+
right MenuEntry
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.MockAccessPoint.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.MockAccessPoint.html new file mode 100644 index 000000000..f4eb1c3ae --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.MockAccessPoint.html @@ -0,0 +1,761 @@ + + + + + Class MockAccessPoint | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class MockAccessPoint +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

A mock access point that does nothing (used for testing). Points to a FileType.

+
+
+ +
+
[Equatable]
+public class MockAccessPoint : DefaultAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<DefaultAccessPoint>, IEquatable<MockAccessPoint>
+
+ + + + +
+
Inheritance
+
+ + + + +
MockAccessPoint
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ MockAccessPoint() + +

+ +
+
+ +
+
public MockAccessPoint()
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ ApplyFlagPath + +

+ +

The path to a file to create when Apply(AppEntry, Feed, IIconStore, bool) is called.

+
+
+ +
+
public string? ApplyFlagPath { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ID + +

+ +

A unique identifier. Determines the conflict ID.

+
+
+ +
+
public string? ID { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ UnapplyFlagPath + +

+ +

The path to a file to create when Unapply(AppEntry, bool) is called.

+
+
+ +
+
public string? UnapplyFlagPath { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(MockAccessPoint?) + +

+ +
+
+ +
+
protected bool Equals(MockAccessPoint? other)
+
+ +

Parameters

+
+
other MockAccessPoint
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the access point in the form "MockAccessPoint: ID". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(MockAccessPoint?, MockAccessPoint?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(MockAccessPoint? left, MockAccessPoint? right)
+
+ +

Parameters

+
+
left MockAccessPoint
+

The left object

+
+
right MockAccessPoint
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(MockAccessPoint?, MockAccessPoint?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(MockAccessPoint? left, MockAccessPoint? right)
+
+ +

Parameters

+
+
left MockAccessPoint
+

The left object

+
+
right MockAccessPoint
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.QuickLaunch.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.QuickLaunch.html new file mode 100644 index 000000000..f15e8e038 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.QuickLaunch.html @@ -0,0 +1,603 @@ + + + + + Class QuickLaunch | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class QuickLaunch +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Creates a shortcut for an application in the Quick Launch bar.

+
+
+ +
+
[Equatable]
+public class QuickLaunch : IconAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<CommandAccessPoint>, IEquatable<QuickLaunch>
+
+ + + + +
+
Inheritance
+
+ + + + + +
QuickLaunch
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(QuickLaunch?) + +

+ +
+
+ +
+
protected bool Equals(QuickLaunch? other)
+
+ +

Parameters

+
+
other QuickLaunch
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(QuickLaunch?, QuickLaunch?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(QuickLaunch? left, QuickLaunch? right)
+
+ +

Parameters

+
+
left QuickLaunch
+

The left object

+
+
right QuickLaunch
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(QuickLaunch?, QuickLaunch?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(QuickLaunch? left, QuickLaunch? right)
+
+ +

Parameters

+
+
left QuickLaunch
+

The left object

+
+
right QuickLaunch
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.SendTo.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.SendTo.html new file mode 100644 index 000000000..0c6c50f0f --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.SendTo.html @@ -0,0 +1,637 @@ + + + + + Class SendTo | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SendTo +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Creates a shortcut for an application in the "Send to" menu.

+
+
+ +
+
[Equatable]
+public class SendTo : IconAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<CommandAccessPoint>, IEquatable<SendTo>
+
+ + + + +
+
Inheritance
+
+ + + + + +
SendTo
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ TagName + +

+ +
+
+ +
+
public const string TagName = "send-to"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(SendTo?) + +

+ +
+
+ +
+
protected bool Equals(SendTo? other)
+
+ +

Parameters

+
+
other SendTo
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(SendTo?, SendTo?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(SendTo? left, SendTo? right)
+
+ +

Parameters

+
+
left SendTo
+

The left object

+
+
right SendTo
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(SendTo?, SendTo?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(SendTo? left, SendTo? right)
+
+ +

Parameters

+
+
left SendTo
+

The left object

+
+
right SendTo
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.UrlProtocol.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.UrlProtocol.html new file mode 100644 index 000000000..06b29e781 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.UrlProtocol.html @@ -0,0 +1,635 @@ + + + + + Class UrlProtocol | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class UrlProtocol +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.AccessPoints
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Makes an application the default handler for a specific URL protocol.

+
+
+ +
+
[Equatable]
+public class UrlProtocol : DefaultAccessPoint, IEquatable<XmlUnknown>, ICloneable<AccessPoint>, IEquatable<DefaultAccessPoint>, IEquatable<UrlProtocol>
+
+ + + + +
+
Inheritance
+
+ + + + +
UrlProtocol
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Apply(AppEntry, Feed, IIconStore, bool) + +

+ +

Applies this access point to the current machine.

+
+
+ +
+
public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Clone() + +

+ +

Creates a deep copy of this AccessPoint instance.

+
+
+ +
+
public override AccessPoint Clone()
+
+ + +

Returns

+
+
AccessPoint
+

The new copy of the AccessPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(UrlProtocol?) + +

+ +
+
+ +
+
protected bool Equals(UrlProtocol? other)
+
+ +

Parameters

+
+
other UrlProtocol
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetConflictIDs(AppEntry) + +

+ +

Retrieves identifiers from a namespace global to all AccessPoints. +Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time.

+
+
+ +
+
public override IEnumerable<string> GetConflictIDs(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the access point in the form "UrlProtocol: Capability". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Unapply(AppEntry, bool) + +

+ +

Unapply this access point on the current machine.

+
+
+ +
+
public override void Unapply(AppEntry appEntry, bool machineWide)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry containing this access point.

+
+
machineWide bool
+

Apply the configuration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(UrlProtocol?, UrlProtocol?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(UrlProtocol? left, UrlProtocol? right)
+
+ +

Parameters

+
+
left UrlProtocol
+

The left object

+
+
right UrlProtocol
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(UrlProtocol?, UrlProtocol?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(UrlProtocol? left, UrlProtocol? right)
+
+ +

Parameters

+
+
left UrlProtocol
+

The left object

+
+
right UrlProtocol
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AccessPoints.html b/api/ZeroInstall.DesktopIntegration.AccessPoints.html new file mode 100644 index 000000000..cfa230abf --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AccessPoints.html @@ -0,0 +1,215 @@ + + + + + Namespace ZeroInstall.DesktopIntegration.AccessPoints | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.DesktopIntegration.AccessPoints

+
+

Structures for parsing and in-memory representation of access points applied to a system.

+
+
+
+ +

+Classes +

+
+
AccessPoint
+

An access point represents changes to the desktop environment's UI which the user explicitly requested.

+
+
+
+
AccessPointList
+

Contains a set of AccessPoints to be registered in a desktop environment.

+
+
+
+
AppAlias
+

Makes an application discoverable via the system's search PATH.

+
+
+
+
AutoPlay
+

Makes an application the default AutoPlay handler for a specific event.

+
+
+
+
AutoStart
+

Automatically starts an application when the user logs in.

+
+
+
+
CapabilityRegistration
+

Indicates that all compatible capabilities should be registered.

+
+
+
+
CommandAccessPoint
+

Adds a way to explicitly launch the application to the desktop environment.

+
+
+
+
ContextMenu
+

Integrates an application into a file manager's context menu.

+
+
+
+
DefaultAccessPoint
+

Makes an application the default handler for something.

+
+
+
+
DefaultProgram
+

Makes an application a default program of some kind (e.g. default web-browser, default e-mail client, ...).

+
+
+
+
DesktopIcon
+

Creates an icon for an application on the user's desktop.

+
+
+
+
FileType
+

Makes an application the default handler for a specific file type.

+
+
+
+
IconAccessPoint
+

Creates some form of icon in the desktop environment.

+
+
+
+
MenuEntry
+

Creates an entry for an application in the user's application menu (i.e. Windows start menu, GNOME application menu, etc.).

+
+
+
+
MockAccessPoint
+

A mock access point that does nothing (used for testing). Points to a FileType.

+
+
+
+
QuickLaunch
+

Creates a shortcut for an application in the Quick Launch bar.

+
+
+
+
SendTo
+

Creates a shortcut for an application in the "Send to" menu.

+
+
+
+
UrlProtocol
+

Makes an application the default handler for a specific URL protocol.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AppEntry.html b/api/ZeroInstall.DesktopIntegration.AppEntry.html new file mode 100644 index 000000000..fed661d31 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AppEntry.html @@ -0,0 +1,806 @@ + + + + + Class AppEntry | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AppEntry +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Represents an application in the AppList identified by its interface URI.

+
+
+ +
+
[Equatable]
+public sealed class AppEntry : XmlUnknown, IEquatable<XmlUnknown>, IMergeable<AppEntry>, ICloneable<AppEntry>, IEquatable<AppEntry>
+
+ + + + +
+
Inheritance
+
+ + +
AppEntry
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ AccessPoints + +

+ +

A set of AccessPointss to be registered in the desktop environment. Is null if no desktop integration has been performed yet.

+
+
+ +
+
public AccessPointList? AccessPoints { get; set; }
+
+ + + + + +

Property Value

+
+
AccessPointList
+
+
+ + + + + + + + + + +

+ AutoUpdate + +

+ +

Set to true to automatically download the newest available version of the application as a regular background task. Update checks will still be performed when the application is launched when set to false.

+
+
+ +
+
public bool AutoUpdate { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ CapabilityLists + +

+ +

A set of Capability lists to be registered in the desktop environment. Only compatible architectures are handled.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<CapabilityList> CapabilityLists { get; }
+
+ + + + + +

Property Value

+
+
List<CapabilityList>
+
+
+ + + + + + + + + + +

+ EffectiveRequirements + +

+ +

The Requirements if it is set, otherwise a basic reference to InterfaceUri.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public Requirements EffectiveRequirements { get; }
+
+ + + + + +

Property Value

+
+
Requirements
+
+
+ + + + + + + + + + +

+ Hostname + +

+ +

A regular expression a computer's hostname must match for this entry to be applied. Enables machine-specific entry filtering.

+
+
+ +
+
public string? Hostname { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ InterfaceUri + +

+ +

The URI or local path of the interface defining the application or the pet-name if Requirements is set.

+
+
+ +
+
public required FeedUri InterfaceUri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The name of the application. Usually equal to Name.

+
+
+ +
+
public required string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Requirements + +

+ +

A set of requirements/restrictions imposed by the user on the implementation selection process.

+
+
+ +
+
[Browsable(false)]
+public Requirements? Requirements { get; set; }
+
+ + + + + +

Property Value

+
+
Requirements
+
+
+ + + + + + + + + + +

+ Timestamp + +

+ +

The time this element was last modified. This is used to determine precedence with sync conflicts.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public DateTime Timestamp { get; set; }
+
+ + + + + +

Property Value

+
+
DateTime
+
+
+ + + + +

Remarks

+

This value should be ignored by clone and equality methods.

+
+ + + + + + +

+ TimestampUnix + +

+ +

The time this entry was last modified encoded as Unix time (number of seconds since the epoch).

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public long TimestampUnix { get; set; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + +

Remarks

+

This value is ignored by clone and equality methods.

+
+ + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this AppEntry instance.

+
+
+ +
+
public AppEntry Clone()
+
+ + +

Returns

+
+
AppEntry
+

The new copy of the AppEntry.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ LookupCapability<T>(string) + +

+ +

Retrieves the first Capability that matches a specific type and ID and is compatible with CurrentSystem.

+
+
+ +
+
public T LookupCapability<T>(string id) where T : Capability
+
+ +

Parameters

+
+
id string
+

The ID to match.

+
+
+ +

Returns

+
+
T
+

The first matching Capability.

+
+
+ +

Type Parameters

+
+
T
+

The capability type to match.

+
+
+ + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

No capability matching id and T was found.

+
+
+ + + + + +

+ ToString() + +

+ +

Creates string representation suitable for console output.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(AppEntry?, AppEntry?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(AppEntry? left, AppEntry? right)
+
+ +

Parameters

+
+
left AppEntry
+

The left object

+
+
right AppEntry
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(AppEntry?, AppEntry?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(AppEntry? left, AppEntry? right)
+
+ +

Parameters

+
+
left AppEntry
+

The left object

+
+
right AppEntry
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.AppList.html b/api/ZeroInstall.DesktopIntegration.AppList.html new file mode 100644 index 000000000..784febac0 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.AppList.html @@ -0,0 +1,932 @@ + + + + + Class AppList | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AppList +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Stores a list of applications and the kind of desktop integration the user chose for them.

+
+
+ +
+
[XmlNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance")]
+[Equatable]
+public sealed class AppList : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<AppList>, IEquatable<AppList>
+
+ + + + +
+
Inheritance
+
+ + +
AppList
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Fields +

+ + + +

+ XmlNamespace + +

+ +

The XML namespace used for storing application list data.

+
+
+ +
+
public const string XmlNamespace = "http://0install.de/schema/desktop-integration/app-list"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ XsdLocation + +

+ +

The URI to retrieve an XSD containing the XML Schema information for this class in serialized form.

+
+
+ +
+
public const string XsdLocation = "https://docs.0install.net/specifications/app-list.xsd"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ XsiSchemaLocation + +

+ +

Provides XML Editors with location hints for XSD files.

+
+
+ +
+
public string XsiSchemaLocation
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Entries + +

+ +

A list of AppEntrys.

+
+
+ +
+
[UnorderedEquality]
+public List<AppEntry> Entries { get; }
+
+ + + + + +

Property Value

+
+
List<AppEntry>
+
+
+ + + + + + + + + + +

+ this[FeedUri] + +

+ +

Gets an AppEntry for a specific interface URI.

+
+
+ +
+
public AppEntry this[FeedUri interfaceUri] { get; }
+
+ +

Parameters

+
+
interfaceUri FeedUri
+

The InterfaceUri to look for.

+
+
+ + + + +

Property Value

+
+
AppEntry
+

The first matching AppEntry.

+
+
+ + + + + +

Exceptions

+
+
KeyNotFoundException
+

No entry matching the interface URI was found.

+
+
+ + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this AppList instance.

+
+
+ +
+
public AppList Clone()
+
+ + +

Returns

+
+
AppList
+

The new copy of the AppList.

+
+
+ + + + + + + + + + + + + +

+ ContainsEntry(FeedUri) + +

+ +

Checks whether an AppEntry for a specific interface URI exists.

+
+
+ +
+
public bool ContainsEntry(FeedUri interfaceUri)
+
+ +

Parameters

+
+
interfaceUri FeedUri
+

The InterfaceUri to look for.

+
+
+ +

Returns

+
+
bool
+

true if a matching entry was found; false otherwise.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ FindAppAlias(string) + +

+ +

Retrieves a specific AppAlias.

+
+
+ +
+
public (AppAlias alias, AppEntry appEntry)? FindAppAlias(string aliasName)
+
+ +

Parameters

+
+
aliasName string
+

The name of the alias to search for.

+
+
+ +

Returns

+
+
(AppAlias alias, AppEntry appEntry)?
+

The first AppAlias matching aliasName and the AppEntry containing it; null if none was found.

+
+
+ + + + + + + + + + + + + +

+ GetDefaultPath(bool) + +

+ +

Returns the default file path used to store the main AppList on this system.

+
+
+ +
+
public static string GetDefaultPath(bool machineWide = false)
+
+ +

Parameters

+
+
machineWide bool
+

Store the AppList machine-wide instead of just for the current user.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ GetEntry(FeedUri) + +

+ +

Gets an AppEntry for a specific interface URI. Safe for missing elements.

+
+
+ +
+
public AppEntry? GetEntry(FeedUri interfaceUri)
+
+ +

Parameters

+
+
interfaceUri FeedUri
+

The InterfaceUri to look for.

+
+
+ +

Returns

+
+
AppEntry
+

The first matching AppEntry; null if no match was found.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ LoadSafe(bool) + +

+ +

Tries to load the AppList from its default location. Automatically falls back to an empty list on errors.

+
+
+ +
+
public static AppList LoadSafe(bool machineWide = false)
+
+ +

Parameters

+
+
machineWide bool
+

Load the machine-wide AppList instead of the one for the current user.

+
+
+ +

Returns

+
+
AppList
+

The loaded AppList.

+
+
+ + + + + + + + + + + + + +

+ LoadXmlZip(Stream, string?) + +

+ +

Loads a list from an XML file embedded in a ZIP archive.

+
+
+ +
+
public static AppList LoadXmlZip(Stream stream, string? password = null)
+
+ +

Parameters

+
+
stream Stream
+

The ZIP archive to load.

+
+
password string
+

The password to use for decryption; null for no encryption.

+
+
+ +

Returns

+
+
AppList
+

The loaded list.

+
+
+ + + + + + + + +

Exceptions

+
+
ZipException
+

A problem occurred while reading the ZIP data or password is wrong.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ ResolveAlias(string) + +

+ +

Retrieves the target URI of a specific AppAlias.

+
+
+ +
+
public FeedUri? ResolveAlias(string aliasName)
+
+ +

Parameters

+
+
aliasName string
+

The name of the alias to search for.

+
+
+ +

Returns

+
+
FeedUri
+

The target feed of the alias; null if none was found.

+
+
+ + + + + + + + + + + + + +

+ SaveXmlZip(Stream, string?) + +

+ +

Saves the list in an XML file embedded in a ZIP archive.

+
+
+ +
+
public void SaveXmlZip(Stream stream, string? password = null)
+
+ +

Parameters

+
+
stream Stream
+

The ZIP archive to be written.

+
+
password string
+

The password to use for encryption; null for no encryption.

+
+
+ + + + + + + + + + + + + + +

+ Search(string?) + +

+ +

Returns all AppEntrys that match a specific search query.

+
+
+ +
+
public IEnumerable<AppEntry> Search(string? query)
+
+ +

Parameters

+
+
query string
+

The search query. Must be contained within Name.

+
+
+ +

Returns

+
+
IEnumerable<AppEntry>
+

All AppEntrys matching query.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(AppList?, AppList?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(AppList? left, AppList? right)
+
+ +

Parameters

+
+
left AppList
+

The left object

+
+
right AppList
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(AppList?, AppList?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(AppList? left, AppList? right)
+
+ +

Parameters

+
+
left AppList
+

The left object

+
+
right AppList
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.CapabilityExtensions.html b/api/ZeroInstall.DesktopIntegration.CapabilityExtensions.html new file mode 100644 index 000000000..283ca486e --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.CapabilityExtensions.html @@ -0,0 +1,220 @@ + + + + + Class CapabilityExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CapabilityExtensions +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains extension methods for Capabilitys.

+
+
+ +
+
public static class CapabilityExtensions
+
+ + + + +
+
Inheritance
+
+ +
CapabilityExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ ToAccessPoint(DefaultCapability) + +

+ +

Creates a DefaultAccessPoint referencing a specific DefaultCapability.

+
+
+ +
+
public static AccessPoint ToAccessPoint(this DefaultCapability capability)
+
+ +

Parameters

+
+
capability DefaultCapability
+

The DefaultCapability to create a DefaultAccessPoint for.

+
+
+ +

Returns

+
+
AccessPoint
+

The newly created DefaultAccessPoint.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.CategoryIntegrationManager.html b/api/ZeroInstall.DesktopIntegration.CategoryIntegrationManager.html new file mode 100644 index 000000000..287bb2180 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.CategoryIntegrationManager.html @@ -0,0 +1,490 @@ + + + + + Class CategoryIntegrationManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CategoryIntegrationManager +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Manages desktop integration via AccessPoints, grouping them into categories.

+
+
+ +
+
[MustDisposeResource]
+public class CategoryIntegrationManager : IntegrationManager, IDisposable, ICategoryIntegrationManager, IIntegrationManager
+
+ + + + +
+
Inheritance
+
+ + + + +
CategoryIntegrationManager
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

To prevent race-conditions there may only be one desktop integration class instance active at any given time. +This class acquires a mutex upon calling its constructor and releases it upon calling Dispose().

+
+ + +

Constructors +

+ + + + +

+ CategoryIntegrationManager(Config, ITaskHandler, bool) + +

+ +

Manages desktop integration via AccessPoints, grouping them into categories.

+
+
+ +
+
public CategoryIntegrationManager(Config config, ITaskHandler handler, bool machineWide = false)
+
+ +

Parameters

+
+
config Config
+
+
handler ITaskHandler
+
+
machineWide bool
+
+
+ + + + + + + + +

Remarks

+

To prevent race-conditions there may only be one desktop integration class instance active at any given time. +This class acquires a mutex upon calling its constructor and releases it upon calling Dispose().

+
+ + + + +

Fields +

+ + + +

+ AllCategories + +

+ +

A list of all known AccessPoint categories.

+
+
+ +
+
public static readonly string[] AllCategories
+
+ + + + +

Field Value

+
+
string[]
+
+
+ + + + + + + + + + +

+ StandardCategories + +

+ +

A list of recommended standard AccessPoint categories.

+
+
+ +
+
public static readonly string[] StandardCategories
+
+ + + + +

Field Value

+
+
string[]
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ AddAccessPointCategories(AppEntry, Feed, params string[]) + +

+ +

Applies a category of AccessPoints for an application.

+
+
+ +
+
public void AddAccessPointCategories(AppEntry appEntry, Feed feed, params string[] categories)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
categories string[]
+

A list of all AccessPoint categories to be added to the already applied ones.

+
+
+ + + + + + + + + +

Exceptions

+
+
ConflictException
+

One or more of the categories would cause a conflict with the existing AccessPoints in AppList.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ RemoveAccessPointCategories(AppEntry, params string[]) + +

+ +

Removes a category of already applied AccessPoints for an application.

+
+
+ +
+
public void RemoveAccessPointCategories(AppEntry appEntry, params string[] categories)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
categories string[]
+

A list of all AccessPoint categories to be removed from the already applied ones.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ConflictData.html b/api/ZeroInstall.DesktopIntegration.ConflictData.html new file mode 100644 index 000000000..e084ef746 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ConflictData.html @@ -0,0 +1,288 @@ + + + + + Class ConflictData | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ConflictData +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Stores information about an AccessPoint causing a conflict and the AppEntry containing it.

+
+
+ +
+
public sealed record ConflictData : IEquatable<ConflictData>
+
+ + + + +
+
Inheritance
+
+ +
ConflictData
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ConflictData(AccessPoint, AppEntry) + +

+ +

Stores information about an AccessPoint causing a conflict and the AppEntry containing it.

+
+
+ +
+
public ConflictData(AccessPoint AccessPoint, AppEntry AppEntry)
+
+ +

Parameters

+
+
AccessPoint AccessPoint
+

The AccessPoint causing the conflict.

+
+
AppEntry AppEntry
+

The application containing the AccessPoint.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ AccessPoint + +

+ +

The AccessPoint causing the conflict.

+
+
+ +
+
public AccessPoint AccessPoint { get; init; }
+
+ + + + + +

Property Value

+
+
AccessPoint
+
+
+ + + + + + + + + + +

+ AppEntry + +

+ +

The application containing the AccessPoint.

+
+
+ +
+
public AppEntry AppEntry { get; init; }
+
+ + + + + +

Property Value

+
+
AppEntry
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ConflictDataUtils.html b/api/ZeroInstall.DesktopIntegration.ConflictDataUtils.html new file mode 100644 index 000000000..5d36fda0d --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ConflictDataUtils.html @@ -0,0 +1,322 @@ + + + + + Class ConflictDataUtils | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ConflictDataUtils +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Helper methods for creating ConflictData lists.

+
+
+ +
+
public static class ConflictDataUtils
+
+ + + + +
+
Inheritance
+
+ +
ConflictDataUtils
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ CheckForConflicts(AppList, IEnumerable<AccessPoint>, AppEntry) + +

+ +

Checks new AccessPoint candidates for conflicts with existing ones.

+
+
+ +
+
public static void CheckForConflicts(this AppList appList, IEnumerable<AccessPoint> accessPoints, AppEntry appEntry)
+
+ +

Parameters

+
+
appList AppList
+

The AppList containing the existing AccessPoints.

+
+
accessPoints IEnumerable<AccessPoint>
+

The set of AccessPoints candidates to check.

+
+
appEntry AppEntry
+

The AppEntry the accessPoints are intended for.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
ConflictException
+

One or more of the accessPoints would cause a conflict with the existing AccessPoints in AppList.

+
+
+ + + + + +

+ GetConflictData(IEnumerable<AccessPoint>, AppEntry) + +

+ +

Returns all ConflictDatas for a set of new AccessPoint candidates.

+
+
+ +
+
public static IDictionary<string, ConflictData> GetConflictData(this IEnumerable<AccessPoint> accessPoints, AppEntry appEntry)
+
+ +

Parameters

+
+
accessPoints IEnumerable<AccessPoint>
+

The set of AccessPoints candidates to build the list for.

+
+
appEntry AppEntry
+

The AppEntry the accessPoints are intended for.

+
+
+ +

Returns

+
+
IDictionary<string, ConflictData>
+

A dictionary of conflict IDs mapping to the according ConflictData.

+
+
+ + + + + + + + +

Exceptions

+
+
ConflictException
+

There are inner conflicts within accessPoints.

+
+
+ + + + + +

+ GetConflictData(IEnumerable<AppEntry>) + +

+ +

Returns all ConflictDatas for a set of existing AppEntrys.

+
+
+ +
+
public static IDictionary<string, ConflictData> GetConflictData(this IEnumerable<AppEntry> appEntries)
+
+ +

Parameters

+
+
appEntries IEnumerable<AppEntry>
+

The AppEntrys to build the list for.

+
+
+ +

Returns

+
+
IDictionary<string, ConflictData>
+

A dictionary of conflict IDs mapping to the according ConflictData.

+
+
+ + + + + + + + +

Exceptions

+
+
ConflictException
+

There are preexisting conflicts within appEntries.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ConflictException.html b/api/ZeroInstall.DesktopIntegration.ConflictException.html new file mode 100644 index 000000000..f0f5f73c0 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ConflictException.html @@ -0,0 +1,467 @@ + + + + + Class ConflictException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ConflictException +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Indicates a desktop integration operation could not be completed due to conflicting AccessPoints.

+
+
+ +
+
public sealed class ConflictException : InvalidOperationException, ISerializable
+
+ + + + +
+
Inheritance
+
+ + + + +
ConflictException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ConflictException() + +

+ +

Initializes a new instance of the InvalidOperationException class.

+
+
+ +
+
public ConflictException()
+
+ + + + + + + + + + + + + + + +

+ ConflictException(string) + +

+ +

Initializes a new instance of the InvalidOperationException class with a specified error message.

+
+
+ +
+
public ConflictException(string message)
+
+ +

Parameters

+
+
message string
+

The message that describes the error.

+
+
+ + + + + + + + + + + + + + +

+ ConflictException(string, Exception) + +

+ +

Initializes a new instance of the InvalidOperationException class with a specified error message and a reference to the inner exception that is the cause of this exception.

+
+
+ +
+
public ConflictException(string message, Exception innerException)
+
+ +

Parameters

+
+
message string
+

The error message that explains the reason for the exception.

+
+
innerException Exception
+

The exception that is the cause of the current exception. If the innerException parameter is not a null reference (Nothing in Visual Basic), the current exception is raised in a catch block that handles the inner exception.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Entries + +

+ +

The entries that are in conflict with each other.

+
+
+ +
+
public IEnumerable<ConflictData>? Entries { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<ConflictData>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ExistingConflict(params ConflictData[]) + +

+ +

Creates an exception indicating an existing desktop integration conflict.

+
+
+ +
+
public static ConflictException ExistingConflict(params ConflictData[] entries)
+
+ +

Parameters

+
+
entries ConflictData[]
+

The entries that are in conflict with each other.

+
+
+ +

Returns

+
+
ConflictException
+
+
+ + + + + + + + + + + + + +

+ InnerConflict(params ConflictData[]) + +

+ +

Creates an exception indicating an inner desktop integration conflict.

+
+
+ +
+
public static ConflictException InnerConflict(params ConflictData[] entries)
+
+ +

Parameters

+
+
entries ConflictData[]
+

The entries that are in conflict with each other.

+
+
+ +

Returns

+
+
ConflictException
+
+
+ + + + + + + + + + + + + +

+ NewConflict(ConflictData, ConflictData) + +

+ +

Creates an exception indicating a new desktop integration conflict.

+
+
+ +
+
public static ConflictException NewConflict(ConflictData existingEntry, ConflictData newEntry)
+
+ +

Parameters

+
+
existingEntry ConflictData
+

The existing entry that is preventing newEntry from being applied.

+
+
newEntry ConflictData
+

The new entry that is in conflict with existingEntry.

+
+
+ +

Returns

+
+
ConflictException
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ICategoryIntegrationManager.html b/api/ZeroInstall.DesktopIntegration.ICategoryIntegrationManager.html new file mode 100644 index 000000000..935b52df2 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ICategoryIntegrationManager.html @@ -0,0 +1,285 @@ + + + + + Interface ICategoryIntegrationManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface ICategoryIntegrationManager +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Manages desktop integration via AccessPoints, grouping them into categories.

+
+
+ +
+
public interface ICategoryIntegrationManager : IIntegrationManager
+
+ + + + + + + +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ AddAccessPointCategories(AppEntry, Feed, params string[]) + +

+ +

Applies a category of AccessPoints for an application.

+
+
+ +
+
void AddAccessPointCategories(AppEntry appEntry, Feed feed, params string[] categories)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
categories string[]
+

A list of all AccessPoint categories to be added to the already applied ones.

+
+
+ + + + + + + + + +

Exceptions

+
+
ConflictException
+

One or more of the categories would cause a conflict with the existing AccessPoints in AppList.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ RemoveAccessPointCategories(AppEntry, params string[]) + +

+ +

Removes a category of already applied AccessPoints for an application.

+
+
+ +
+
void RemoveAccessPointCategories(AppEntry appEntry, params string[] categories)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
categories string[]
+

A list of all AccessPoint categories to be removed from the already applied ones.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.IIntegrationManager.html b/api/ZeroInstall.DesktopIntegration.IIntegrationManager.html new file mode 100644 index 000000000..6bd86c245 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.IIntegrationManager.html @@ -0,0 +1,595 @@ + + + + + Interface IIntegrationManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IIntegrationManager +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Manages an AppList and desktop integration via AccessPoints.

+
+
+ +
+
public interface IIntegrationManager
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ AppList + +

+ +

Stores a list of applications and their desktop integrations. Only use for read-access externally! Use this class' methods for any modifications.

+
+
+ +
+
AppList AppList { get; }
+
+ + + + + +

Property Value

+
+
AppList
+
+
+ + + + + + + + + + +

+ MachineWide + +

+ +

Apply operations machine-wide instead of just for the current user.

+
+
+ +
+
bool MachineWide { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ AddAccessPoints(AppEntry, Feed, IEnumerable<AccessPoint>) + +

+ +

Applies AccessPoints for an application.

+
+
+ +
+
void AddAccessPoints(AppEntry appEntry, Feed feed, IEnumerable<AccessPoint> accessPoints)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
accessPoints IEnumerable<AccessPoint>
+

The access points to apply.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ConflictException
+

One or more of the accessPoints would cause a conflict with the existing AccessPoints in AppList.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ AddApp(string, Requirements, Feed) + +

+ +

Creates a new named AppEntry and adds it to the AppList.

+
+
+ +
+
AppEntry AddApp(string petName, Requirements requirements, Feed feed)
+
+ +

Parameters

+
+
petName string
+

The user-defined pet-name of the application.

+
+
requirements Requirements
+

The requirements describing the application to add.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
+ +

Returns

+
+
AppEntry
+

The newly created application entry (already added to AppList).

+
+
+ + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

An application with the same petName is already in the list.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ AddApp(FeedTarget) + +

+ +

Creates a new unnamed AppEntry and adds it to the AppList.

+
+
+ +
+
AppEntry AddApp(FeedTarget target)
+
+ +

Parameters

+
+
target FeedTarget
+

The application to add.

+
+
+ +

Returns

+
+
AppEntry
+

The newly created application entry (already added to AppList).

+
+
+ + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

The application is already in the list.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ RemoveAccessPoints(AppEntry, IEnumerable<AccessPoint>) + +

+ +

Removes already applied AccessPoints for an application.

+
+
+ +
+
void RemoveAccessPoints(AppEntry appEntry, IEnumerable<AccessPoint> accessPoints)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
accessPoints IEnumerable<AccessPoint>
+

The access points to unapply.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ RemoveApp(AppEntry) + +

+ +

Removes an AppEntry from the AppList while unapplying any remaining AccessPoints.

+
+
+ +
+
void RemoveApp(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application to remove.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Repair(Converter<FeedUri, Feed>) + +

+ +

Reapplies all AccessPoints for all AppEntrys.

+
+
+ +
+
void Repair(Converter<FeedUri, Feed> feedRetriever)
+
+ +

Parameters

+
+
feedRetriever Converter<FeedUri, Feed>
+

Callback method used to retrieve additional Feeds on demand.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ConflictException
+

The AppList has inner conflicts.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ UpdateApp(AppEntry, Feed) + +

+ +

Updates an AppEntry with new metadata and capabilities from a Feed. This may unapply and remove some existing AccessPoints.

+
+
+ +
+
void UpdateApp(AppEntry appEntry, Feed feed)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry to update.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
+ + + + + + + + + + + + + + +

+ UpdateApp(AppEntry, Feed, Requirements) + +

+ +

Updates a named AppEntry with new Requirements.

+
+
+ +
+
void UpdateApp(AppEntry appEntry, Feed feed, Requirements requirements)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry to update.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
requirements Requirements
+

The new requirements to apply to the app.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.IconStores.html b/api/ZeroInstall.DesktopIntegration.IconStores.html new file mode 100644 index 000000000..e7fe423f3 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.IconStores.html @@ -0,0 +1,279 @@ + + + + + Class IconStores | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IconStores +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Provides IIconStore instances.

+
+
+ +
+
public static class IconStores
+
+ + + + +
+
Inheritance
+
+ +
IconStores
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Cache(Config, ITaskHandler) + +

+ +

Provides icon files for display in table- or tile-like GUIs. Files may be discarded later.

+
+
+ +
+
public static IIconStore Cache(Config config, ITaskHandler handler)
+
+ +

Parameters

+
+
config Config
+
+
handler ITaskHandler
+
+
+ +

Returns

+
+
IIconStore
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while creating a directory.

+
+
UnauthorizedAccessException
+

Creating a directory is not permitted.

+
+
+ + + + + +

+ DesktopIntegration(Config, ITaskHandler, bool) + +

+ +

Provides icon files for use with desktop integration. Files will remain persisted.

+
+
+ +
+
public static IIconStore DesktopIntegration(Config config, ITaskHandler handler, bool machineWide)
+
+ +

Parameters

+
+
config Config
+
+
handler ITaskHandler
+
+
machineWide bool
+
+
+ +

Returns

+
+
IIconStore
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while creating a directory.

+
+
UnauthorizedAccessException
+

Creating a directory is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.IntegrationManager.html b/api/ZeroInstall.DesktopIntegration.IntegrationManager.html new file mode 100644 index 000000000..398be79de --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.IntegrationManager.html @@ -0,0 +1,906 @@ + + + + + Class IntegrationManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IntegrationManager +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Manages an AppList and desktop integration via AccessPoints.

+
+
+ +
+
[MustDisposeResource]
+public class IntegrationManager : IntegrationManagerBase, IDisposable, IIntegrationManager
+
+ + + + +
+
Inheritance
+
+ + + +
IntegrationManager
+
+
+ +
+
Implements
+
+ + +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

To prevent race-conditions there may only be one desktop integration class instance active at any given time. +This class acquires a mutex upon calling its constructor and releases it upon calling Dispose().

+
+ + +

Constructors +

+ + + + +

+ IntegrationManager(Config, ITaskHandler, bool) + +

+ +

Creates a new integration manager using the default AppList (creating a new one if missing). Performs Mutex-based locking!

+
+
+ +
+
public IntegrationManager(Config config, ITaskHandler handler, bool machineWide = false)
+
+ +

Parameters

+
+
config Config
+

User settings controlling network behaviour.

+
+
handler ITaskHandler
+

A callback object used when the user is to be informed about the progress of long-running operations such as downloads.

+
+
machineWide bool
+

Apply operations machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while accessing the AppList file.

+
+
UnauthorizedAccessException
+

Read or write access to the AppList file is not permitted or another desktop integration class is currently active.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + +

Fields +

+ + + +

+ AppListPath + +

+ +

The storage location of the AppList file.

+
+
+ +
+
protected readonly string AppListPath
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ ChangedWindowMessageID + +

+ +

The window message ID (for use with BroadcastMessage(int)) that signals integration changes to interested observers.

+
+
+ +
+
public static readonly int ChangedWindowMessageID
+
+ + + + +

Field Value

+
+
int
+
+
+ + + + + + + + + + +

+ Config + +

+ +

User settings controlling network behaviour.

+
+
+ +
+
protected readonly Config Config
+
+ + + + +

Field Value

+
+
Config
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ MutexName + +

+ +

The name of the cross-process mutex used to signal that a desktop integration process class is currently active.

+
+
+ +
+
protected override string MutexName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ AddAccessPointsInternal(AppEntry, Feed, IReadOnlyCollection<AccessPoint>) + +

+ +

Applies AccessPoints for an application.

+
+
+ +
+
protected override void AddAccessPointsInternal(AppEntry appEntry, Feed feed, IReadOnlyCollection<AccessPoint> accessPoints)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
accessPoints IReadOnlyCollection<AccessPoint>
+

The access points to apply.

+
+
+ + + + + + + + + +

Exceptions

+
+
ArgumentException
+

Entries from appEntry is the same reference as accessPoints.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
ConflictException
+

One or more of the accessPoints would cause a conflict with the existing AccessPoints in AppList.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ AddAppInternal(string, Requirements, Feed) + +

+ +

Creates a new named AppEntry and adds it to the AppList.

+
+
+ +
+
protected override AppEntry AddAppInternal(string petName, Requirements requirements, Feed feed)
+
+ +

Parameters

+
+
petName string
+

The user-defined pet-name of the application.

+
+
requirements Requirements
+

The requirements describing the application to add.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
+ +

Returns

+
+
AppEntry
+

The newly created application entry (already added to AppList).

+
+
+ + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

An application with the same petName is already in the list.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ AddAppInternal(AppEntry, Converter<FeedUri, Feed>) + +

+ +

Creates a new AppEntry based on an existing prototype (applying any AccessPoints) and adds it to the AppList.

+
+
+ +
+
protected override void AddAppInternal(AppEntry prototype, Converter<FeedUri, Feed> feedRetriever)
+
+ +

Parameters

+
+
prototype AppEntry
+

An existing AppEntry to use as a prototype.

+
+
feedRetriever Converter<FeedUri, Feed>
+

Callback method used to retrieve additional Feeds on demand.

+
+
+ + + + + + + + + + + + + + +

+ AddAppInternal(FeedTarget) + +

+ +

Creates a new unnamed AppEntry and adds it to the AppList.

+
+
+ +
+
protected override AppEntry AddAppInternal(FeedTarget target)
+
+ +

Parameters

+
+
target FeedTarget
+

The application to add.

+
+
+ +

Returns

+
+
AppEntry
+

The newly created application entry (already added to AppList).

+
+
+ + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

The application is already in the list.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Finish() + +

+ +

To be called after integration operations have been completed to inform the desktop environment and save the AppList.

+
+
+ +
+
protected override void Finish()
+
+ + + + + + + + + + + + + + + +

+ GetDir(bool, params string[]) + +

+ +

Returns a path for a directory that can be used for desktop integration.

+
+
+ +
+
public static string GetDir(bool machineWide, params string[] resource)
+
+ +

Parameters

+
+
machineWide bool
+

true if the directory should be machine-wide and machine-specific instead of roaming with the user profile.

+
+
resource string[]
+

The directory name of the resource to be stored.

+
+
+ +

Returns

+
+
string
+

A fully qualified directory path. The directory is guaranteed to already exist.

+
+
+ + + + + + + +

Remarks

+

If a new directory is created with machineWide set to true on Windows, ACLs are set to deny write access for non-Administrator users.

+
+ +

Exceptions

+
+
IOException
+

A problem occurred while creating a directory.

+
+
UnauthorizedAccessException
+

Creating a directory is not permitted.

+
+
+ + + + + +

+ RemoveAccessPointsInternal(AppEntry, IEnumerable<AccessPoint>) + +

+ +

Removes already applied AccessPoints for an application.

+
+
+ +
+
protected override void RemoveAccessPointsInternal(AppEntry appEntry, IEnumerable<AccessPoint> accessPoints)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The AppEntry containing the accessPoints.

+
+
accessPoints IEnumerable<AccessPoint>
+

The access points to unapply.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ RemoveAppInternal(AppEntry) + +

+ +

Removes an AppEntry from the AppList while unapplying any remaining AccessPoints.

+
+
+ +
+
protected override void RemoveAppInternal(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application to remove.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ RepairAppInternal(AppEntry, Feed) + +

+ +

Reapplies all AccessPoints for a specific AppEntry.

+
+
+ +
+
protected override void RepairAppInternal(AppEntry appEntry, Feed feed)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry to repair.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ConflictException
+

appEntry conflicts with the rest of the AppList.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ UpdateAppInternal(AppEntry, Feed) + +

+ +

Updates an AppEntry with new metadata and capabilities from a Feed. This may unapply and remove some existing AccessPoints.

+
+
+ +
+
protected override void UpdateAppInternal(AppEntry appEntry, Feed feed)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry to update.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.IntegrationManagerBase.html b/api/ZeroInstall.DesktopIntegration.IntegrationManagerBase.html new file mode 100644 index 000000000..2171c0320 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.IntegrationManagerBase.html @@ -0,0 +1,1160 @@ + + + + + Class IntegrationManagerBase | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IntegrationManagerBase +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Base class for IIntegrationManager implementations using template methods.

+
+
+ +
+
[MustDisposeResource]
+public abstract class IntegrationManagerBase : ManagerBase, IDisposable, IIntegrationManager
+
+ + + + +
+
Inheritance
+
+ + +
IntegrationManagerBase
+
+
+ +
+
Implements
+
+ + +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ IntegrationManagerBase(ITaskHandler, bool) + +

+ +

Base class for IIntegrationManager implementations using template methods.

+
+
+ +
+
protected IntegrationManagerBase(ITaskHandler handler, bool machineWide = false)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user is to be informed about the progress of long-running operations such as downloads.

+
+
machineWide bool
+

Apply operations machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while accessing the AppList file.

+
+
UnauthorizedAccessException
+

Read or write access to the AppList file is not permitted or another desktop integration class is currently active.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + +

Properties +

+ + + + +

+ AppList + +

+ +

Stores a list of applications and their desktop integrations. Only use for read-access externally! Use this class' methods for any modifications.

+
+
+ +
+
public AppList AppList { get; protected init; }
+
+ + + + + +

Property Value

+
+
AppList
+
+
+ + + + + +

Exceptions

+
+
IOException
+

A problem occurred while accessing the AppList file.

+
+
UnauthorizedAccessException
+

Read or write access to the AppList file is not permitted or another desktop integration class is currently active.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + +

Methods +

+ + + + +

+ AddAccessPoints(AppEntry, Feed, IEnumerable<AccessPoint>) + +

+ +

Applies AccessPoints for an application.

+
+
+ +
+
public void AddAccessPoints(AppEntry appEntry, Feed feed, IEnumerable<AccessPoint> accessPoints)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
accessPoints IEnumerable<AccessPoint>
+

The access points to apply.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ConflictException
+

One or more of the accessPoints would cause a conflict with the existing AccessPoints in AppList.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ AddAccessPointsInternal(AppEntry, Feed, IReadOnlyCollection<AccessPoint>) + +

+ +

Applies AccessPoints for an application.

+
+
+ +
+
protected abstract void AddAccessPointsInternal(AppEntry appEntry, Feed feed, IReadOnlyCollection<AccessPoint> accessPoints)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
accessPoints IReadOnlyCollection<AccessPoint>
+

The access points to apply.

+
+
+ + + + + + + + + +

Exceptions

+
+
ArgumentException
+

Entries from appEntry is the same reference as accessPoints.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
ConflictException
+

One or more of the accessPoints would cause a conflict with the existing AccessPoints in AppList.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ AddApp(string, Requirements, Feed) + +

+ +

Creates a new named AppEntry and adds it to the AppList.

+
+
+ +
+
public AppEntry AddApp(string petName, Requirements requirements, Feed feed)
+
+ +

Parameters

+
+
petName string
+

The user-defined pet-name of the application.

+
+
requirements Requirements
+

The requirements describing the application to add.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
+ +

Returns

+
+
AppEntry
+

The newly created application entry (already added to AppList).

+
+
+ + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

An application with the same petName is already in the list.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ AddApp(FeedTarget) + +

+ +

Creates a new unnamed AppEntry and adds it to the AppList.

+
+
+ +
+
public AppEntry AddApp(FeedTarget target)
+
+ +

Parameters

+
+
target FeedTarget
+

The application to add.

+
+
+ +

Returns

+
+
AppEntry
+

The newly created application entry (already added to AppList).

+
+
+ + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

The application is already in the list.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ AddAppInternal(string, Requirements, Feed) + +

+ +

Creates a new named AppEntry and adds it to the AppList.

+
+
+ +
+
protected abstract AppEntry AddAppInternal(string petName, Requirements requirements, Feed feed)
+
+ +

Parameters

+
+
petName string
+

The user-defined pet-name of the application.

+
+
requirements Requirements
+

The requirements describing the application to add.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
+ +

Returns

+
+
AppEntry
+

The newly created application entry (already added to AppList).

+
+
+ + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

An application with the same petName is already in the list.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ AddAppInternal(AppEntry, Converter<FeedUri, Feed>) + +

+ +

Creates a new AppEntry based on an existing prototype (applying any AccessPoints) and adds it to the AppList.

+
+
+ +
+
protected abstract void AddAppInternal(AppEntry prototype, Converter<FeedUri, Feed> feedRetriever)
+
+ +

Parameters

+
+
prototype AppEntry
+

An existing AppEntry to use as a prototype.

+
+
feedRetriever Converter<FeedUri, Feed>
+

Callback method used to retrieve additional Feeds on demand.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while accessing the AppList file.

+
+
UnauthorizedAccessException
+

Read or write access to the AppList file is not permitted or another desktop integration class is currently active.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ AddAppInternal(FeedTarget) + +

+ +

Creates a new unnamed AppEntry and adds it to the AppList.

+
+
+ +
+
protected abstract AppEntry AddAppInternal(FeedTarget target)
+
+ +

Parameters

+
+
target FeedTarget
+

The application to add.

+
+
+ +

Returns

+
+
AppEntry
+

The newly created application entry (already added to AppList).

+
+
+ + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

The application is already in the list.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Finish() + +

+ +

To be called after integration operations have been completed to inform the desktop environment and save the AppList.

+
+
+ +
+
protected abstract void Finish()
+
+ + + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while accessing the AppList file.

+
+
UnauthorizedAccessException
+

Read or write access to the AppList file is not permitted or another desktop integration class is currently active.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ RemoveAccessPoints(AppEntry, IEnumerable<AccessPoint>) + +

+ +

Removes already applied AccessPoints for an application.

+
+
+ +
+
public void RemoveAccessPoints(AppEntry appEntry, IEnumerable<AccessPoint> accessPoints)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application being integrated.

+
+
accessPoints IEnumerable<AccessPoint>
+

The access points to unapply.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ RemoveAccessPointsInternal(AppEntry, IEnumerable<AccessPoint>) + +

+ +

Removes already applied AccessPoints for an application.

+
+
+ +
+
protected abstract void RemoveAccessPointsInternal(AppEntry appEntry, IEnumerable<AccessPoint> accessPoints)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The AppEntry containing the accessPoints.

+
+
accessPoints IEnumerable<AccessPoint>
+

The access points to unapply.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ RemoveApp(AppEntry) + +

+ +

Removes an AppEntry from the AppList while unapplying any remaining AccessPoints.

+
+
+ +
+
public void RemoveApp(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application to remove.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ RemoveAppInternal(AppEntry) + +

+ +

Removes an AppEntry from the AppList while unapplying any remaining AccessPoints.

+
+
+ +
+
protected abstract void RemoveAppInternal(AppEntry appEntry)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application to remove.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Repair(Converter<FeedUri, Feed>) + +

+ +

Reapplies all AccessPoints for all AppEntrys.

+
+
+ +
+
public void Repair(Converter<FeedUri, Feed> feedRetriever)
+
+ +

Parameters

+
+
feedRetriever Converter<FeedUri, Feed>
+

Callback method used to retrieve additional Feeds on demand.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ConflictException
+

The AppList has inner conflicts.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ RepairAppInternal(AppEntry, Feed) + +

+ +

Reapplies all AccessPoints for a specific AppEntry.

+
+
+ +
+
protected abstract void RepairAppInternal(AppEntry appEntry, Feed feed)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry to repair.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ConflictException
+

appEntry conflicts with the rest of the AppList.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ UpdateApp(AppEntry, Feed) + +

+ +

Updates an AppEntry with new metadata and capabilities from a Feed. This may unapply and remove some existing AccessPoints.

+
+
+ +
+
public void UpdateApp(AppEntry appEntry, Feed feed)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry to update.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while accessing the AppList file.

+
+
UnauthorizedAccessException
+

Read or write access to the AppList file is not permitted or another desktop integration class is currently active.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ UpdateApp(AppEntry, Feed, Requirements) + +

+ +

Updates a named AppEntry with new Requirements.

+
+
+ +
+
public void UpdateApp(AppEntry appEntry, Feed feed, Requirements requirements)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry to update.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
requirements Requirements
+

The new requirements to apply to the app.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while accessing the AppList file.

+
+
UnauthorizedAccessException
+

Read or write access to the AppList file is not permitted or another desktop integration class is currently active.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ UpdateAppInternal(AppEntry, Feed) + +

+ +

Updates an AppEntry with new metadata and capabilities from a Feed. This may unapply and remove some existing AccessPoints.

+
+
+ +
+
protected abstract void UpdateAppInternal(AppEntry appEntry, Feed feed)
+
+ +

Parameters

+
+
appEntry AppEntry
+

The application entry to update.

+
+
feed Feed
+

The feed providing additional metadata, capabilities, etc. for the application.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Suggest.html b/api/ZeroInstall.DesktopIntegration.Suggest.html new file mode 100644 index 000000000..b89e53ec2 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Suggest.html @@ -0,0 +1,366 @@ + + + + + Class Suggest | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Suggest +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Suggests suitable default AccessPoints for specific Feeds.

+
+
+ +
+
public static class Suggest
+
+ + + + +
+
Inheritance
+
+ +
Suggest
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Aliases(Feed) + +

+ +

Returns a list of suitable default AppAliass.

+
+
+ +
+
public static IEnumerable<AppAlias> Aliases(Feed feed)
+
+ +

Parameters

+
+
feed Feed
+
+
+ +

Returns

+
+
IEnumerable<AppAlias>
+
+
+ + + + + + + + + + + + + +

+ AutoStart(Feed) + +

+ +

Returns a list of suitable default AutoStart(Feed)s.

+
+
+ +
+
public static IEnumerable<AutoStart> AutoStart(Feed feed)
+
+ +

Parameters

+
+
feed Feed
+
+
+ +

Returns

+
+
IEnumerable<AutoStart>
+
+
+ + + + + + + + + + + + + +

+ DesktopIcons(Feed) + +

+ +

Returns a list of suitable default DesktopIcons.

+
+
+ +
+
public static IEnumerable<DesktopIcon> DesktopIcons(Feed feed)
+
+ +

Parameters

+
+
feed Feed
+
+
+ +

Returns

+
+
IEnumerable<DesktopIcon>
+
+
+ + + + + + + + + + + + + +

+ MenuEntries(Feed) + +

+ +

Returns a list of suitable default MenuEntrys.

+
+
+ +
+
public static IEnumerable<MenuEntry> MenuEntries(Feed feed)
+
+ +

Parameters

+
+
feed Feed
+
+
+ +

Returns

+
+
IEnumerable<MenuEntry>
+
+
+ + + + + + + + + + + + + +

+ SendTo(Feed) + +

+ +

Returns a list of suitable default SendTo(Feed)s.

+
+
+ +
+
public static IEnumerable<SendTo> SendTo(Feed feed)
+
+ +

Parameters

+
+
feed Feed
+
+
+ +

Returns

+
+
IEnumerable<SendTo>
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.SyncIntegrationManager.html b/api/ZeroInstall.DesktopIntegration.SyncIntegrationManager.html new file mode 100644 index 000000000..531a0431f --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.SyncIntegrationManager.html @@ -0,0 +1,451 @@ + + + + + Class SyncIntegrationManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SyncIntegrationManager +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Synchronizes the AppList with other computers.

+
+
+ +
+
[MustDisposeResource]
+public class SyncIntegrationManager : IntegrationManager, IDisposable, IIntegrationManager
+
+ + + + +
+
Inheritance
+
+ + + + +
SyncIntegrationManager
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

To prevent race-conditions there may only be one desktop integration class instance active at any given time. +This class acquires a mutex upon calling its constructor and releases it upon calling Dispose().

+
+ + +

Constructors +

+ + + + +

+ SyncIntegrationManager(Config, Converter<FeedUri, Feed>, ITaskHandler, bool) + +

+ +

Creates a new sync manager. Performs Mutex-based locking!

+
+
+ +
+
public SyncIntegrationManager(Config config, Converter<FeedUri, Feed> feedRetriever, ITaskHandler handler, bool machineWide = false)
+
+ +

Parameters

+
+
config Config
+

Configuration for communicating with a sync server.

+
+
feedRetriever Converter<FeedUri, Feed>
+

Callback method used to retrieve additional Feeds on demand.

+
+
handler ITaskHandler
+

A callback object used when the user is to be informed about the progress of long-running operations such as downloads.

+
+
machineWide bool
+

Apply operations machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while accessing the AppList file.

+
+
UnauthorizedAccessException
+

Read or write access to the AppList file is not permitted or another desktop integration class is currently active.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + +

Fields +

+ + + +

+ AppListLastSyncSuffix + +

+ +

The suffix added to the AppList path to store a copy of the state at the last sync point.

+
+
+ +
+
public const string AppListLastSyncSuffix = ".last-sync"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Dispose() + +

+ +

Releases the mutex.

+
+
+ +
+
public override void Dispose()
+
+ + + + + + + + + + + + + + + +

+ Sync(SyncResetMode) + +

+ +

Synchronize the AppList with the sync server and (un)apply AccessPoints accordingly.

+
+
+ +
+
public void Sync(SyncResetMode resetMode = SyncResetMode.None)
+
+ +

Parameters

+
+
resetMode SyncResetMode
+

Controls how synchronization data is reset.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file or the specified crypto key was wrong.

+
+
KeyNotFoundException
+

An AccessPoint reference to a Capability is invalid.

+
+
ConflictException
+

One or more new AccessPoint would cause a conflict with the existing AccessPoints in AppList.

+
+
WebException
+

A problem occurred while communicating with the sync server or while downloading additional data (such as icons).

+
+
IOException
+

A problem occurs while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.SyncRaceException.html b/api/ZeroInstall.DesktopIntegration.SyncRaceException.html new file mode 100644 index 000000000..3ca91198d --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.SyncRaceException.html @@ -0,0 +1,260 @@ + + + + + Class SyncRaceException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SyncRaceException +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Multiple computers are trying to sync with the same account at the same time.

+
+
+ +
+
public class SyncRaceException : WebException, ISerializable
+
+ + + + +
+
Inheritance
+
+ + + + + +
SyncRaceException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Constructors +

+ + + + +

+ SyncRaceException() + +

+ +
+
+ +
+
public SyncRaceException()
+
+ + + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.SyncResetMode.html b/api/ZeroInstall.DesktopIntegration.SyncResetMode.html new file mode 100644 index 000000000..fb4757b90 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.SyncResetMode.html @@ -0,0 +1,157 @@ + + + + + Enum SyncResetMode | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum SyncResetMode +

+ +
+
Namespace
ZeroInstall.DesktopIntegration
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Controls how synchronization data is reset by Sync(SyncResetMode)

+
+
+ +
+
public enum SyncResetMode
+
+ + + + + + + + + +

Fields +

+
+
Client = 1
+

Replace all data on the client with data from the server.

+
+
None = 0
+

Merge data from client and server normally.

+
+
Server = 2
+

Replace all data on the server with data from the client.

+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Unix.AppAlias.html b/api/ZeroInstall.DesktopIntegration.Unix.AppAlias.html new file mode 100644 index 000000000..f395afb1b --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Unix.AppAlias.html @@ -0,0 +1,286 @@ + + + + + Class AppAlias | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AppAlias +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Unix
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying AppAlias on Unix systems.

+
+
+ +
+
public static class AppAlias
+
+ + + + +
+
Inheritance
+
+ +
AppAlias
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Create(FeedTarget, string?, string, IIconStore, bool) + +

+ +

Creates an application alias in the current system.

+
+
+ +
+
public static void Create(FeedTarget target, string? command, string aliasName, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
command string
+

The command within target the alias shall point to; can be null.

+
+
aliasName string
+

The name of the alias to be created.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Create the alias machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + + +

+ Remove(string, bool) + +

+ +

Removes an application alias from the current system.

+
+
+ +
+
public static void Remove(string aliasName, bool machineWide)
+
+ +

Parameters

+
+
aliasName string
+

The name of the alias to be removed.

+
+
machineWide bool
+

The alias was created machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Unix.ContextMenu.html b/api/ZeroInstall.DesktopIntegration.Unix.ContextMenu.html new file mode 100644 index 000000000..9da4f39fa --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Unix.ContextMenu.html @@ -0,0 +1,283 @@ + + + + + Class ContextMenu | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ContextMenu +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Unix
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying ContextMenu and ContextMenu on GNOME systems.

+
+
+ +
+
public static class ContextMenu
+
+ + + + +
+
Inheritance
+
+ +
ContextMenu
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Apply(FeedTarget, ContextMenu, IIconStore, bool) + +

+ +

Adds a context menu entry to the current system.

+
+
+ +
+
public static void Apply(FeedTarget target, ContextMenu contextMenu, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
contextMenu ContextMenu
+

The context menu entry to add.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Add the context menu entry machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + + +

+ Remove(ContextMenu, bool) + +

+ +

Removes a context menu entry from the current system.

+
+
+ +
+
public static void Remove(ContextMenu contextMenu, bool machineWide)
+
+ +

Parameters

+
+
contextMenu ContextMenu
+

The context menu entry to remove.

+
+
machineWide bool
+

Remove the context menu entry machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Unix.DefaultProgram.html b/api/ZeroInstall.DesktopIntegration.Unix.DefaultProgram.html new file mode 100644 index 000000000..d85b5bd76 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Unix.DefaultProgram.html @@ -0,0 +1,289 @@ + + + + + Class DefaultProgram | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DefaultProgram +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Unix
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying DefaultProgram and DefaultProgram on GNOME or KDE systems.

+
+
+ +
+
public static class DefaultProgram
+
+ + + + +
+
Inheritance
+
+ +
DefaultProgram
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Register(FeedTarget, DefaultProgram, IIconStore, bool, bool) + +

+ +

Registers an application as a candidate for a default program for some service in the current system.

+
+
+ +
+
public static void Register(FeedTarget target, DefaultProgram defaultProgram, IIconStore iconStore, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
defaultProgram DefaultProgram
+

The default program information to be registered.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the registration machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the program should be set as the current default for the service it provides.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + + +

+ Unregister(DefaultProgram, bool, bool) + +

+ +

Unregisters an application as a candidate for a default program in the current system. This can only be applied machine-wide, not per user.

+
+
+ +
+
public static void Unregister(DefaultProgram defaultProgram, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
defaultProgram DefaultProgram
+

The default program information to be removed.

+
+
machineWide bool
+

Apply the registration machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the program was set as the current default for the service it provides.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Unix.FileType.html b/api/ZeroInstall.DesktopIntegration.Unix.FileType.html new file mode 100644 index 000000000..2cd6f89d5 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Unix.FileType.html @@ -0,0 +1,289 @@ + + + + + Class FileType | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FileType +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Unix
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying FileType and FileType on FreeDesktop.org systems.

+
+
+ +
+
public static class FileType
+
+ + + + +
+
Inheritance
+
+ +
FileType
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Register(FeedTarget, FileType, IIconStore, bool, bool) + +

+ +

Registers a file type in the current system.

+
+
+ +
+
public static void Register(FeedTarget target, FileType fileType, IIconStore iconStore, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
fileType FileType
+

The file type to register.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Register the file type machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the file associations shall become default handlers for their respective types.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + + +

+ Unregister(FileType, bool, bool) + +

+ +

Unregisters a file type in the current system.

+
+
+ +
+
public static void Unregister(FileType fileType, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
fileType FileType
+

The file type to remove.

+
+
machineWide bool
+

Unregister the file type machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the file associations were default handlers for their respective types.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Unix.FreeDesktop.html b/api/ZeroInstall.DesktopIntegration.Unix.FreeDesktop.html new file mode 100644 index 000000000..44ebc4790 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Unix.FreeDesktop.html @@ -0,0 +1,321 @@ + + + + + Class FreeDesktop | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FreeDesktop +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Unix
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Utility class for creating and modifying FreeDesktop.org Desktop Entries.

+
+
+ +
+
public static class FreeDesktop
+
+ + + + +
+
Inheritance
+
+ +
FreeDesktop
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Create(DesktopIcon, FeedTarget, IIconStore, bool) + +

+ +
+
+ +
+
public static void Create(DesktopIcon desktopIcon, FeedTarget target, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
desktopIcon DesktopIcon
+
+
target FeedTarget
+
+
iconStore IIconStore
+
+
machineWide bool
+
+
+ + + + + + + + + + + + + + +

+ Create(MenuEntry, FeedTarget, IIconStore, bool) + +

+ +
+
+ +
+
public static void Create(MenuEntry menuEntry, FeedTarget target, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
menuEntry MenuEntry
+
+
target FeedTarget
+
+
iconStore IIconStore
+
+
machineWide bool
+
+
+ + + + + + + + + + + + + + +

+ Remove(DesktopIcon, bool) + +

+ +
+
+ +
+
public static void Remove(DesktopIcon desktopIcon, bool machineWide)
+
+ +

Parameters

+
+
desktopIcon DesktopIcon
+
+
machineWide bool
+
+
+ + + + + + + + + + + + + + +

+ Remove(MenuEntry, bool) + +

+ +
+
+ +
+
public static void Remove(MenuEntry menuEntry, bool machineWide)
+
+ +

Parameters

+
+
menuEntry MenuEntry
+
+
machineWide bool
+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Unix.UrlProtocol.html b/api/ZeroInstall.DesktopIntegration.Unix.UrlProtocol.html new file mode 100644 index 000000000..18d9db864 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Unix.UrlProtocol.html @@ -0,0 +1,289 @@ + + + + + Class UrlProtocol | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class UrlProtocol +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Unix
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying UrlProtocol and UrlProtocol on GNOME systems.

+
+
+ +
+
public static class UrlProtocol
+
+ + + + +
+
Inheritance
+
+ +
UrlProtocol
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Register(FeedTarget, UrlProtocol, IIconStore, bool, bool) + +

+ +

Registers a URL protocol in the current system.

+
+
+ +
+
public static void Register(FeedTarget target, UrlProtocol urlProtocol, IIconStore iconStore, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
urlProtocol UrlProtocol
+

The URL protocol to register.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Register the URL protocol machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the handler shall become the default handler for the protocol.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + + +

+ Unregister(UrlProtocol, bool, bool) + +

+ +

Unregisters a URL protocol in the current system.

+
+
+ +
+
public static void Unregister(UrlProtocol urlProtocol, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
urlProtocol UrlProtocol
+

The URL protocol to remove.

+
+
machineWide bool
+

Unregister the URL protocol machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the handler was the default handler for the protocol.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Unix.html b/api/ZeroInstall.DesktopIntegration.Unix.html new file mode 100644 index 000000000..74e457532 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Unix.html @@ -0,0 +1,155 @@ + + + + + Namespace ZeroInstall.DesktopIntegration.Unix | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.DesktopIntegration.Unix

+
+

Desktop integration code for Unix-like systems (e.g. Linux).

+
+
+
+ +

+Classes +

+
+
AppAlias
+

Contains control logic for applying AppAlias on Unix systems.

+
+
+
+
ContextMenu
+

Contains control logic for applying ContextMenu and ContextMenu on GNOME systems.

+
+
+
+
DefaultProgram
+

Contains control logic for applying DefaultProgram and DefaultProgram on GNOME or KDE systems.

+
+
+
+
FileType
+

Contains control logic for applying FileType and FileType on FreeDesktop.org systems.

+
+
+
+
FreeDesktop
+

Utility class for creating and modifying FreeDesktop.org Desktop Entries.

+
+
+
+
UrlProtocol
+

Contains control logic for applying UrlProtocol and UrlProtocol on GNOME systems.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ViewModel.AutoPlayModel.html b/api/ZeroInstall.DesktopIntegration.ViewModel.AutoPlayModel.html new file mode 100644 index 000000000..5712160c3 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ViewModel.AutoPlayModel.html @@ -0,0 +1,264 @@ + + + + + Class AutoPlayModel | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AutoPlayModel +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.ViewModel
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Wraps a AutoPlay for data binding.

+
+
+ +
+
public class AutoPlayModel : IconCapabilityModel
+
+ + + + +
+
Inheritance
+
+ + + +
AutoPlayModel
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ AutoPlayModel(AutoPlay, bool) + +

+ +
+
+ +
+
public AutoPlayModel(AutoPlay capability, bool used)
+
+ +

Parameters

+
+
capability AutoPlay
+
+
used bool
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Events + +

+ +

All Events concatenated with ", ".

+
+
+ +
+
public string Events { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModel.html b/api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModel.html new file mode 100644 index 000000000..eb1184344 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModel.html @@ -0,0 +1,325 @@ + + + + + Class CapabilityModel | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CapabilityModel +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.ViewModel
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Wraps a DefaultCapability for data binding.

+
+
+ +
+
public abstract class CapabilityModel
+
+ + + + +
+
Inheritance
+
+ +
CapabilityModel
+
+
+ + +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ CapabilityModel(DefaultCapability, bool) + +

+ +

Creates a new instance.

+
+
+ +
+
protected CapabilityModel(DefaultCapability capability, bool used)
+
+ +

Parameters

+
+
capability DefaultCapability
+

That shall be wrapped.

+
+
used bool
+

Indicates whether the Capability was already used.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Capability + +

+ +

The wrapped Capability.

+
+
+ +
+
[Browsable(false)]
+public DefaultCapability Capability { get; }
+
+ + + + + +

Property Value

+
+
DefaultCapability
+
+
+ + + + + + + + + + +

+ Changed + +

+ +

Indicates whether the Use of the Capability has been changed.

+
+
+ +
+
[Browsable(false)]
+public bool Changed { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Use + +

+ +

Indicates whether the Capability shall be used or not.

+
+
+ +
+
public bool Use { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModelExtensions.html b/api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModelExtensions.html new file mode 100644 index 000000000..cfda1a93b --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModelExtensions.html @@ -0,0 +1,223 @@ + + + + + Class CapabilityModelExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CapabilityModelExtensions +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.ViewModel
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains extension methods for CapabilityModelBindingList<T>s.

+
+
+ +
+
public static class CapabilityModelExtensions
+
+ + + + +
+
Inheritance
+
+ +
CapabilityModelExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ SetAllUse<T>(BindingList<T>, bool) + +

+ +

Sets all Use values within a list/model to a specific value.

+
+
+ +
+
public static void SetAllUse<T>(this BindingList<T> model, bool value) where T : CapabilityModel
+
+ +

Parameters

+
+
model BindingList<T>
+

A model representing the underlying DefaultCapabilitys and their selection states.

+
+
value bool
+

The value to set.

+
+
+ + +

Type Parameters

+
+
T
+

The specific kind of DefaultAccessPoint to handle.

+
+
+ + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ViewModel.ContextMenuModel.html b/api/ZeroInstall.DesktopIntegration.ViewModel.ContextMenuModel.html new file mode 100644 index 000000000..9e6988950 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ViewModel.ContextMenuModel.html @@ -0,0 +1,264 @@ + + + + + Class ContextMenuModel | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ContextMenuModel +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.ViewModel
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Wraps a ContextMenu for data binding.

+
+
+ +
+
public class ContextMenuModel : IconCapabilityModel
+
+ + + + +
+
Inheritance
+
+ + + +
ContextMenuModel
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ContextMenuModel(ContextMenu, bool) + +

+ +
+
+ +
+
public ContextMenuModel(ContextMenu contextMenu, bool used)
+
+ +

Parameters

+
+
contextMenu ContextMenu
+
+
used bool
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Name + +

+ +

The name of the first entry in Verbs.

+
+
+ +
+
public string? Name { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ViewModel.DefaultProgramModel.html b/api/ZeroInstall.DesktopIntegration.ViewModel.DefaultProgramModel.html new file mode 100644 index 000000000..419a5593e --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ViewModel.DefaultProgramModel.html @@ -0,0 +1,264 @@ + + + + + Class DefaultProgramModel | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DefaultProgramModel +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.ViewModel
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Wraps a DefaultProgram for data binding.

+
+
+ +
+
public class DefaultProgramModel : IconCapabilityModel
+
+ + + + +
+
Inheritance
+
+ + + +
DefaultProgramModel
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ DefaultProgramModel(DefaultProgram, bool) + +

+ +
+
+ +
+
public DefaultProgramModel(DefaultProgram capability, bool used)
+
+ +

Parameters

+
+
capability DefaultProgram
+
+
used bool
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Service + +

+ +

Returns Service.

+
+
+ +
+
public string Service { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ViewModel.FileTypeModel.html b/api/ZeroInstall.DesktopIntegration.ViewModel.FileTypeModel.html new file mode 100644 index 000000000..aeb534d4d --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ViewModel.FileTypeModel.html @@ -0,0 +1,264 @@ + + + + + Class FileTypeModel | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FileTypeModel +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.ViewModel
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Wraps a FileType for data binding.

+
+
+ +
+
public class FileTypeModel : IconCapabilityModel
+
+ + + + +
+
Inheritance
+
+ + + +
FileTypeModel
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ FileTypeModel(FileType, bool) + +

+ +
+
+ +
+
public FileTypeModel(FileType fileType, bool used)
+
+ +

Parameters

+
+
fileType FileType
+
+
used bool
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Extensions + +

+ +

All Extensions concatenated with ", ".

+
+
+ +
+
public string Extensions { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ViewModel.IconCapabilityModel.html b/api/ZeroInstall.DesktopIntegration.ViewModel.IconCapabilityModel.html new file mode 100644 index 000000000..046c5e08c --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ViewModel.IconCapabilityModel.html @@ -0,0 +1,270 @@ + + + + + Class IconCapabilityModel | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IconCapabilityModel +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.ViewModel
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Wraps an IconCapability for data binding.

+
+
+ +
+
public class IconCapabilityModel : CapabilityModel
+
+ + + + +
+
Inheritance
+
+ + +
IconCapabilityModel
+
+
+ + +
+
Derived
+
+ + + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ IconCapabilityModel(IconCapability, bool) + +

+ +
+
+ +
+
protected IconCapabilityModel(IconCapability capability, bool used)
+
+ +

Parameters

+
+
capability IconCapability
+
+
used bool
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Description + +

+ +

Returns the description of the IconCapability dependant on CurrentUICulture.

+
+
+ +
+
public string Description { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ViewModel.IntegrationState.html b/api/ZeroInstall.DesktopIntegration.ViewModel.IntegrationState.html new file mode 100644 index 000000000..348052440 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ViewModel.IntegrationState.html @@ -0,0 +1,673 @@ + + + + + Class IntegrationState | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IntegrationState +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.ViewModel
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

A View-Model for modifying desktop integration. Provides data-binding lists and applies modifications in bulk.

+
+
+ +
+
public class IntegrationState
+
+ + + + +
+
Inheritance
+
+ +
IntegrationState
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ IntegrationState(IIntegrationManager, AppEntry, Feed) + +

+ +

Creates a new integration state View-Model.

+
+
+ +
+
public IntegrationState(IIntegrationManager integrationManager, AppEntry appEntry, Feed feed)
+
+ +

Parameters

+
+
integrationManager IIntegrationManager
+

The integration manager used to apply selected integration options.

+
+
appEntry AppEntry
+

The application being integrated.

+
+
feed Feed
+

The feed providing additional metadata, icons, etc. for the application.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Aliases + +

+ +
+
+ +
+
public readonly BindingList<AppAlias> Aliases
+
+ + + + +

Field Value

+
+
BindingList<AppAlias>
+
+
+ + + + + + + + + + +

+ AutoPlay + +

+ +
+
+ +
+
public readonly BindingList<AutoPlayModel> AutoPlay
+
+ + + + +

Field Value

+
+
BindingList<AutoPlayModel>
+
+
+ + + + + + + + + + +

+ AutoStarts + +

+ +
+
+ +
+
public readonly BindingList<AutoStart> AutoStarts
+
+ + + + +

Field Value

+
+
BindingList<AutoStart>
+
+
+ + + + + + + + + + +

+ ContextMenu + +

+ +
+
+ +
+
public readonly BindingList<ContextMenuModel> ContextMenu
+
+ + + + +

Field Value

+
+
BindingList<ContextMenuModel>
+
+
+ + + + + + + + + + +

+ DefaultProgram + +

+ +
+
+ +
+
public readonly BindingList<DefaultProgramModel> DefaultProgram
+
+ + + + +

Field Value

+
+
BindingList<DefaultProgramModel>
+
+
+ + + + + + + + + + +

+ DesktopIcons + +

+ +
+
+ +
+
public readonly BindingList<DesktopIcon> DesktopIcons
+
+ + + + +

Field Value

+
+
BindingList<DesktopIcon>
+
+
+ + + + + + + + + + +

+ FileTypes + +

+ +
+
+ +
+
public readonly BindingList<FileTypeModel> FileTypes
+
+ + + + +

Field Value

+
+
BindingList<FileTypeModel>
+
+
+ + + + + + + + + + +

+ MenuEntries + +

+ +
+
+ +
+
public readonly BindingList<MenuEntry> MenuEntries
+
+ + + + +

Field Value

+
+
BindingList<MenuEntry>
+
+
+ + + + + + + + + + +

+ SendTo + +

+ +
+
+ +
+
public readonly BindingList<SendTo> SendTo
+
+ + + + +

Field Value

+
+
BindingList<SendTo>
+
+
+ + + + + + + + + + +

+ UrlProtocols + +

+ +
+
+ +
+
public readonly BindingList<UrlProtocolModel> UrlProtocols
+
+ + + + +

Field Value

+
+
BindingList<UrlProtocolModel>
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AppEntry + +

+ +

The application being integrated.

+
+
+ +
+
public AppEntry AppEntry { get; }
+
+ + + + + +

Property Value

+
+
AppEntry
+
+
+ + + + + + + + + + +

+ CapabilityRegistration + +

+ +

Controls whether CapabilityRegistration is used.

+
+
+ +
+
public bool CapabilityRegistration { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Feed + +

+ +

The feed providing additional metadata, icons, etc. for the application.

+
+
+ +
+
public Feed Feed { get; }
+
+ + + + + +

Property Value

+
+
Feed
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ApplyChanges() + +

+ +

Applies any changes made to the View-Model to the underlying system.

+
+
+ +
+
public void ApplyChanges()
+
+ + + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ConflictException
+

One or more of the new AccessPoints would cause a conflict with the existing AccessPoints in AppList.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ViewModel.UrlProtocolModel.html b/api/ZeroInstall.DesktopIntegration.ViewModel.UrlProtocolModel.html new file mode 100644 index 000000000..52f9877da --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ViewModel.UrlProtocolModel.html @@ -0,0 +1,264 @@ + + + + + Class UrlProtocolModel | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class UrlProtocolModel +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.ViewModel
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Wraps a UrlProtocol for data binding.

+
+
+ +
+
public class UrlProtocolModel : IconCapabilityModel
+
+ + + + +
+
Inheritance
+
+ + + +
UrlProtocolModel
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ UrlProtocolModel(UrlProtocol, bool) + +

+ +
+
+ +
+
public UrlProtocolModel(UrlProtocol capability, bool used)
+
+ +

Parameters

+
+
capability UrlProtocol
+
+
used bool
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ KnownPrefixes + +

+ +

All KnownPrefixes concatenated with ", ". If no KnownPrefixes is available ID will be returned.

+
+
+ +
+
public string KnownPrefixes { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.ViewModel.html b/api/ZeroInstall.DesktopIntegration.ViewModel.html new file mode 100644 index 000000000..4cb379d73 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.ViewModel.html @@ -0,0 +1,170 @@ + + + + + Namespace ZeroInstall.DesktopIntegration.ViewModel | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.DesktopIntegration.ViewModel

+
+

Classes that wrap desktop integration capabilities in a data binding-friendly manner.

+
+
+
+ +

+Classes +

+
+
AutoPlayModel
+

Wraps a AutoPlay for data binding.

+
+
+
+
CapabilityModel
+

Wraps a DefaultCapability for data binding.

+
+
+
+
CapabilityModelExtensions
+

Contains extension methods for CapabilityModelBindingList<T>s.

+
+
+
+
ContextMenuModel
+

Wraps a ContextMenu for data binding.

+
+
+
+
DefaultProgramModel
+

Wraps a DefaultProgram for data binding.

+
+
+
+
FileTypeModel
+

Wraps a FileType for data binding.

+
+
+
+
IconCapabilityModel
+

Wraps an IconCapability for data binding.

+
+
+
+
IntegrationState
+

A View-Model for modifying desktop integration. Provides data-binding lists and applies modifications in bulk.

+
+
+
+
UrlProtocolModel
+

Wraps a UrlProtocol for data binding.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.AppAlias.html b/api/ZeroInstall.DesktopIntegration.Windows.AppAlias.html new file mode 100644 index 000000000..87065267b --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.AppAlias.html @@ -0,0 +1,359 @@ + + + + + Class AppAlias | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AppAlias +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying AppAlias on Windows systems.

+
+
+ +
+
public static class AppAlias
+
+ + + + +
+
Inheritance
+
+ +
AppAlias
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ RegKeyAppPaths + +

+ +

The HKCU/HKLM registry key for storing application lookup paths.

+
+
+ +
+
public const string RegKeyAppPaths = "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Create(FeedTarget, string?, string, IIconStore, bool) + +

+ +

Creates an application alias in the current system.

+
+
+ +
+
public static void Create(FeedTarget target, string? command, string aliasName, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
command string
+

The command within target the alias shall point to; can be null.

+
+
aliasName string
+

The name of the alias to be created.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Create the alias machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ GetStubDir(bool) + +

+ +

Returns the path of the directory used to store alias stub EXEs.

+
+
+ +
+
public static string GetStubDir(bool machineWide)
+
+ +

Parameters

+
+
machineWide bool
+

true for a machine-wide directory; false for a directory just for the current user.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Remove(string, bool) + +

+ +

Removes an application alias from the current system.

+
+
+ +
+
public static void Remove(string aliasName, bool machineWide)
+
+ +

Parameters

+
+
aliasName string
+

The name of the alias to be removed.

+
+
machineWide bool
+

The alias was created machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.AppRegistration.html b/api/ZeroInstall.DesktopIntegration.Windows.AppRegistration.html new file mode 100644 index 000000000..6fc03b0e2 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.AppRegistration.html @@ -0,0 +1,507 @@ + + + + + Class AppRegistration | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AppRegistration +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying AppRegistration on Windows systems.

+
+
+ +
+
public static class AppRegistration
+
+ + + + +
+
Inheritance
+
+ +
AppRegistration
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ RegKeyMachineRegisteredApplications + +

+ +

The HKLM registry key for registering applications as candidates for default programs.

+
+
+ +
+
public const string RegKeyMachineRegisteredApplications = "SOFTWARE\\RegisteredApplications"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegSubKeyFileAssocs + +

+ +

The registry subkey containing FileType references.

+
+
+ +
+
public const string RegSubKeyFileAssocs = "FileAssociations"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegSubKeyStartMenu + +

+ +

The registry subkey containing DefaultProgram references.

+
+
+ +
+
public const string RegSubKeyStartMenu = "StartMenu"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegSubKeyUrlAssocs + +

+ +

The registry subkey containing UrlProtocol references.

+
+
+ +
+
public const string RegSubKeyUrlAssocs = "URLAssociations"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueAppDescription + +

+ +

The registry value name for the application description.

+
+
+ +
+
public const string RegValueAppDescription = "ApplicationDescription"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueAppIcon + +

+ +

The registry value name for the application icon.

+
+
+ +
+
public const string RegValueAppIcon = "ApplicationIcon"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueAppName + +

+ +

The registry value name for the application name.

+
+
+ +
+
public const string RegValueAppName = "ApplicationName"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Register(FeedTarget, AppRegistration, IEnumerable<VerbCapability>, IIconStore, bool) + +

+ +

Applies application registration to the current system.

+
+
+ +
+
public static void Register(FeedTarget target, AppRegistration appRegistration, IEnumerable<VerbCapability> verbCapabilities, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
appRegistration AppRegistration
+

The registration information to be applied.

+
+
verbCapabilities IEnumerable<VerbCapability>
+

The capabilities that the application is to be registered with.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the registration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Unregister(AppRegistration, bool) + +

+ +

Removes application registration from the current system.

+
+
+ +
+
public static void Unregister(AppRegistration appRegistration, bool machineWide)
+
+ +

Parameters

+
+
appRegistration AppRegistration
+

The registration information to be removed.

+
+
machineWide bool
+

Apply the registration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.AutoPlay.html b/api/ZeroInstall.DesktopIntegration.Windows.AutoPlay.html new file mode 100644 index 000000000..b9198ce5b --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.AutoPlay.html @@ -0,0 +1,541 @@ + + + + + Class AutoPlay | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AutoPlay +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying AutoPlay and AutoPlay on Windows systems.

+
+
+ +
+
public static class AutoPlay
+
+ + + + +
+
Inheritance
+
+ +
AutoPlay
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ RegKeyAssocs + +

+ +

The HKCU/HKLM registry key for storing AutoPlay handler associations.

+
+
+ +
+
public const string RegKeyAssocs = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\AutoplayHandlers\\EventHandlers"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegKeyChosenAssocs + +

+ +

The HKCU registry key for storing user-selected AutoPlay handlers.

+
+
+ +
+
public const string RegKeyChosenAssocs = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\AutoplayHandlers\\UserChosenExecuteHandlers"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegKeyHandlers + +

+ +

The HKCU/HKLM registry key for storing AutoPlay handlers.

+
+
+ +
+
public const string RegKeyHandlers = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\AutoplayHandlers\\Handlers"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueDescription + +

+ +

The registry value name for storing the description of the AutoPlay action.

+
+
+ +
+
public const string RegValueDescription = "Action"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueIcon + +

+ +

The registry value name for storing the icon for the AutoPlay action.

+
+
+ +
+
public const string RegValueIcon = "DefaultIcon"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueProgID + +

+ +

The registry value name for storing the programmatic identifier to invoke.

+
+
+ +
+
public const string RegValueProgID = "InvokeProgID"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueProvider + +

+ +

The registry value name for storing the name of the application providing the AutoPlay action.

+
+
+ +
+
public const string RegValueProvider = "Provider"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueVerb + +

+ +

The registry value name for storing the name of the verb to invoke.

+
+
+ +
+
public const string RegValueVerb = "InvokeVerb"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Register(FeedTarget, AutoPlay, IIconStore, bool, bool) + +

+ +

Adds an AutoPlay handler registration to the current system.

+
+
+ +
+
public static void Register(FeedTarget target, AutoPlay autoPlay, IIconStore iconStore, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
autoPlay AutoPlay
+

The AutoPlay handler information to be applied.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Register the handler machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the handler should become the default handler for all Events.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Unregister(AutoPlay, bool, bool) + +

+ +

Removes an AutoPlay handler registration from the current system.

+
+
+ +
+
public static void Unregister(AutoPlay autoPlay, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
autoPlay AutoPlay
+

The AutoPlay handler information to be removed.

+
+
machineWide bool
+

Remove the handler machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the handler should was the default handler for all Events.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.ComServer.html b/api/ZeroInstall.DesktopIntegration.Windows.ComServer.html new file mode 100644 index 000000000..1ca1871c6 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.ComServer.html @@ -0,0 +1,318 @@ + + + + + Class ComServer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ComServer +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying ComServer on Windows systems.

+
+
+ +
+
public static class ComServer
+
+ + + + +
+
Inheritance
+
+ +
ComServer
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ RegKeyClassesIDs + +

+ +

The HKCR registry key for storing COM class IDs.

+
+
+ +
+
public const string RegKeyClassesIDs = "CLSID"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Register(FeedTarget, ComServer, IIconStore, bool) + +

+ +

Registers a COM server in the current system.

+
+
+ +
+
public static void Register(FeedTarget target, ComServer comServer, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
comServer ComServer
+

The COM server to be registered.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Register the COM server machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Unregister(ComServer, bool) + +

+ +

Unregisters a COM server in the current system.

+
+
+ +
+
public static void Unregister(ComServer comServer, bool machineWide)
+
+ +

Parameters

+
+
comServer ComServer
+

The COM server to be unregistered.

+
+
machineWide bool
+

Unregister the COM server machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.ContextMenu.html b/api/ZeroInstall.DesktopIntegration.Windows.ContextMenu.html new file mode 100644 index 000000000..2249717ef --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.ContextMenu.html @@ -0,0 +1,442 @@ + + + + + Class ContextMenu | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ContextMenu +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying ContextMenu and ContextMenu on Windows systems.

+
+
+ +
+
public static class ContextMenu
+
+ + + + +
+
Inheritance
+
+ +
ContextMenu
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ Prefix + +

+ +

Prepended before programmatic identifiers used by Zero Install in the registry. This prevents conflicts with non-Zero Install installations.

+
+
+ +
+
public const string Prefix = "ZeroInstall.ContextMenu."
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegKeyClassesAll + +

+ +

The HKCU registry key for registering things for all filesystem objects (files and directories).

+
+
+ +
+
public const string RegKeyClassesAll = "AllFilesystemObjects"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegKeyClassesDirectories + +

+ +

The HKCU registry key for registering things for all directories.

+
+
+ +
+
public const string RegKeyClassesDirectories = "Directory"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegKeyClassesExecutableFiles + +

+ +

The HKCU registry key for registering things for different kinds of executable files.

+
+
+ +
+
public static readonly string[] RegKeyClassesExecutableFiles
+
+ + + + +

Field Value

+
+
string[]
+
+
+ + + + + + + + + + +

+ RegKeyClassesFiles + +

+ +

The HKCU registry key for registering things for all files.

+
+
+ +
+
public const string RegKeyClassesFiles = "*"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Apply(FeedTarget, ContextMenu, IIconStore, bool) + +

+ +

Adds a context menu entry to the current system.

+
+
+ +
+
public static void Apply(FeedTarget target, ContextMenu contextMenu, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
contextMenu ContextMenu
+

The context menu entry to add.

+
+
iconStore IIconStore
+

A callback object used when the user is to be informed about the progress of long-running operations such as downloads.

+
+
machineWide bool
+

Add the context menu entry machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Remove(ContextMenu, bool) + +

+ +

Removes a context menu entry from the current system.

+
+
+ +
+
public static void Remove(ContextMenu contextMenu, bool machineWide)
+
+ +

Parameters

+
+
contextMenu ContextMenu
+

The context menu entry to remove.

+
+
machineWide bool
+

Remove the context menu entry machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.DefaultProgram.html b/api/ZeroInstall.DesktopIntegration.Windows.DefaultProgram.html new file mode 100644 index 000000000..8f3b003ff --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.DefaultProgram.html @@ -0,0 +1,504 @@ + + + + + Class DefaultProgram | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DefaultProgram +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying DefaultProgram and DefaultProgram on Windows systems.

+
+
+ +
+
public static class DefaultProgram
+
+ + + + +
+
Inheritance
+
+ +
DefaultProgram
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ RegKeyMachineClients + +

+ +

The HKLM registry key for registering applications as clients for specific services.

+
+
+ +
+
public const string RegKeyMachineClients = "SOFTWARE\\Clients"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegSubKeyInstallInfo + +

+ +

The name of the registry subkeys containing information about application installation commands and status.

+
+
+ +
+
public const string RegSubKeyInstallInfo = "InstallInfo"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueHideIconsCommand + +

+ +

The registry value name below RegSubKeyInstallInfo for the command to remove icons/shortcuts to the application.

+
+
+ +
+
public const string RegValueHideIconsCommand = "HideIconsCommand"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueIconsVisible + +

+ +

The registry value name below RegSubKeyInstallInfo for storing whether the application's icons are currently visible.

+
+
+ +
+
public const string RegValueIconsVisible = "IconsVisible"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueLocalizedName + +

+ +

The registry value name for localized name storage.

+
+
+ +
+
public const string RegValueLocalizedName = "LocalizedString"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueReinstallCommand + +

+ +

The registry value name below RegSubKeyInstallInfo for the command to set an application as the default program.

+
+
+ +
+
public const string RegValueReinstallCommand = "ReinstallCommand"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueShowIconsCommand + +

+ +

The registry value name below RegSubKeyInstallInfo for the command to create icons/shortcuts to the application.

+
+
+ +
+
public const string RegValueShowIconsCommand = "ShowIconsCommand"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Register(FeedTarget, DefaultProgram, IIconStore, bool) + +

+ +

Registers an application as a candidate for a default program for some service in the current system. This can only be applied machine-wide, not per user.

+
+
+ +
+
public static void Register(FeedTarget target, DefaultProgram defaultProgram, IIconStore iconStore, bool accessPoint = false)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
defaultProgram DefaultProgram
+

The default program information to be registered.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
accessPoint bool
+

Indicates that the program should be set as the current default for the service it provides.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Unregister(DefaultProgram, bool) + +

+ +

Unregisters an application as a candidate for a default program in the current system. This can only be applied machine-wide, not per user.

+
+
+ +
+
public static void Unregister(DefaultProgram defaultProgram, bool accessPoint = false)
+
+ +

Parameters

+
+
defaultProgram DefaultProgram
+

The default program information to be removed.

+
+
accessPoint bool
+

Indicates that the program was set as the current default for the service it provides.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.FileType.html b/api/ZeroInstall.DesktopIntegration.Windows.FileType.html new file mode 100644 index 000000000..9247d8921 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.FileType.html @@ -0,0 +1,417 @@ + + + + + Class FileType | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FileType +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying FileType and FileType on Windows systems.

+
+
+ +
+
public static class FileType
+
+ + + + +
+
Inheritance
+
+ +
FileType
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ RegSubKeyOpenWith + +

+ +

The registry subkey containing "open with" ProgID references.

+
+
+ +
+
public const string RegSubKeyOpenWith = "OpenWithProgIDs"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueContentType + +

+ +

The registry value name for MIME type storage.

+
+
+ +
+
public const string RegValueContentType = "Content Type"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValueFriendlyName + +

+ +

The registry value name for friendly type name storage.

+
+
+ +
+
public const string RegValueFriendlyName = "FriendlyTypeName"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegValuePerceivedType + +

+ +

The registry value name for perceived type storage.

+
+
+ +
+
public const string RegValuePerceivedType = "PerceivedType"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Register(FeedTarget, FileType, IIconStore, bool, bool) + +

+ +

Registers a file type in the current system.

+
+
+ +
+
public static void Register(FeedTarget target, FileType fileType, IIconStore iconStore, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
fileType FileType
+

The file type to register.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Register the file type machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the file associations shall become default handlers for their respective types.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Unregister(FileType, bool, bool) + +

+ +

Unregisters a file type in the current system.

+
+
+ +
+
public static void Unregister(FileType fileType, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
fileType FileType
+

The file type to remove.

+
+
machineWide bool
+

Unregister the file type machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the file associations were default handlers for their respective types.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.PathEnv.html b/api/ZeroInstall.DesktopIntegration.Windows.PathEnv.html new file mode 100644 index 000000000..a961adbc6 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.PathEnv.html @@ -0,0 +1,328 @@ + + + + + Class PathEnv | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PathEnv +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Manages the PATH environment variable.

+
+
+ +
+
public static class PathEnv
+
+ + + + +
+
Inheritance
+
+ +
PathEnv
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ AddDir(string, bool) + +

+ +

Adds a directory to the search PATH.

+
+
+ +
+
public static void AddDir(string directory, bool machineWide)
+
+ +

Parameters

+
+
directory string
+

The directory to add to the search PATH.

+
+
machineWide bool
+

true to use the machine-wide PATH variable; false for the per-user variant.

+
+
+ + + + + + + + + + + + + + +

+ Get(bool) + +

+ +

Returns the current search PATH.

+
+
+ +
+
public static string[] Get(bool machineWide)
+
+ +

Parameters

+
+
machineWide bool
+

true to use the machine-wide PATH variable; false for the per-user variant.

+
+
+ +

Returns

+
+
string[]
+

The individual directories listed in the search path.

+
+
+ + + + + + + + + + + + + +

+ RemoveDir(string, bool) + +

+ +

Removes a directory from the search PATH.

+
+
+ +
+
public static void RemoveDir(string directory, bool machineWide)
+
+ +

Parameters

+
+
directory string
+

The directory to remove from the search PATH.

+
+
machineWide bool
+

true to use the machine-wide PATH variable; false for the per-user variant.

+
+
+ + + + + + + + + + + + + + +

+ Set(string[], bool) + +

+ +

Sets the current search PATH.

+
+
+ +
+
public static void Set(string[] directories, bool machineWide)
+
+ +

Parameters

+
+
directories string[]
+

The individual directories to list in the search PATH.

+
+
machineWide bool
+

true to use the machine-wide PATH variable; false for the per-user variant.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.Shortcut.html b/api/ZeroInstall.DesktopIntegration.Windows.Shortcut.html new file mode 100644 index 000000000..763835474 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.Shortcut.html @@ -0,0 +1,657 @@ + + + + + Class Shortcut | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Shortcut +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Creates Windows shortcut files (.lnk).

+
+
+ +
+
public static class Shortcut
+
+ + + + +
+
Inheritance
+
+ +
Shortcut
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Create(string, string, string?, string?, string?, string?) + +

+ +

Creates a new Windows shortcut.

+
+
+ +
+
public static void Create(string path, string targetPath, string? arguments = null, string? iconLocation = null, string? description = null, string? appId = null)
+
+ +

Parameters

+
+
path string
+

The location to place the shortcut at.

+
+
targetPath string
+

The target path the shortcut shall point to.

+
+
arguments string
+

Additional arguments to pass to the target; can be null.

+
+
iconLocation string
+

The path of the icon to use for the shortcut; leave null ot get the icon from targetPath.

+
+
description string
+

A short human-readable description; can be null.

+
+
appId string
+

The Application User Model ID; used by Windows to associate shortcuts and pinned taskbar entries with running processes.

+
+
+ + + + + + + + + + + + + + +

+ Create(AutoStart, FeedTarget, IIconStore, bool) + +

+ +

Creates a new Windows shortcut in the "Startup" menu.

+
+
+ +
+
public static void Create(AutoStart autoStart, FeedTarget target, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
autoStart AutoStart
+

Information about the shortcut to be created.

+
+
target FeedTarget
+

The target the shortcut shall point to.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Create the shortcut machine-wide instead of just for the current user.

+
+
+ + + + + + + + + + + + + + +

+ Create(DesktopIcon, FeedTarget, IIconStore, bool) + +

+ +

Creates a new Windows shortcut on the desktop.

+
+
+ +
+
public static void Create(DesktopIcon desktopIcon, FeedTarget target, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
desktopIcon DesktopIcon
+

Information about the shortcut to be created.

+
+
target FeedTarget
+

The target the shortcut shall point to.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Create the shortcut machine-wide instead of just for the current user.

+
+
+ + + + + + + + + + + + + + +

+ Create(MenuEntry, FeedTarget, IIconStore, bool) + +

+ +

Creates a new Windows shortcut in the start menu or on the start page.

+
+
+ +
+
public static void Create(MenuEntry menuEntry, FeedTarget target, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
menuEntry MenuEntry
+

Information about the shortcut to be created.

+
+
target FeedTarget
+

The target the shortcut shall point to.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Create the shortcut machine-wide instead of just for the current user.

+
+
+ + + + + + + + + + + + + + +

+ Create(QuickLaunch, FeedTarget, IIconStore) + +

+ +

Creates a new Windows shortcut in the quick launch bar.

+
+
+ +
+
public static void Create(QuickLaunch quickLaunch, FeedTarget target, IIconStore iconStore)
+
+ +

Parameters

+
+
quickLaunch QuickLaunch
+

Information about the shortcut to be created.

+
+
target FeedTarget
+

The target the shortcut shall point to.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
+ + + + + + + + + + + + + + +

+ Create(SendTo, FeedTarget, IIconStore) + +

+ +

Creates a new Windows shortcut in the "Send to" menu.

+
+
+ +
+
public static void Create(SendTo sendTo, FeedTarget target, IIconStore iconStore)
+
+ +

Parameters

+
+
sendTo SendTo
+

Information about the shortcut to be created.

+
+
target FeedTarget
+

The target the shortcut shall point to.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
+ + + + + + + + + + + + + + +

+ GetStartMenuPath(string?, string?, bool) + +

+ +

Builds a path for a shortcut in the start menu programs folder, optionally appending a category.

+
+
+ +
+
public static string GetStartMenuPath(string? category, string? name, bool machineWide)
+
+ +

Parameters

+
+
category string
+

The name of the category/directory below the programs folder; can be null.

+
+
name string
+

The name of the shortcut (without the .lnk ending).

+
+
machineWide bool
+

true to use the machine-wide start menu; false for the per-user variant.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

name or category contains invalid characters.

+
+
+ + + + + +

+ Remove(AutoStart, bool) + +

+ +

Removes a Windows shortcut from the "Startup" menu.

+
+
+ +
+
public static void Remove(AutoStart autoStart, bool machineWide)
+
+ +

Parameters

+
+
autoStart AutoStart
+

Information about the shortcut to be removed.

+
+
machineWide bool
+

The shortcut was created machine-wide instead of just for the current user.

+
+
+ + + + + + + + + + + + + + +

+ Remove(DesktopIcon, bool) + +

+ +

Removes a Windows shortcut from the desktop.

+
+
+ +
+
public static void Remove(DesktopIcon desktopIcon, bool machineWide)
+
+ +

Parameters

+
+
desktopIcon DesktopIcon
+

Information about the shortcut to be removed.

+
+
machineWide bool
+

The shortcut was created machine-wide instead of just for the current user.

+
+
+ + + + + + + + + + + + + + +

+ Remove(MenuEntry, bool) + +

+ +

Removes a Windows shortcut from the start menu or on the start page.

+
+
+ +
+
public static void Remove(MenuEntry menuEntry, bool machineWide)
+
+ +

Parameters

+
+
menuEntry MenuEntry
+

Information about the shortcut to be removed.

+
+
machineWide bool
+

The shortcut was created machine-wide instead of just for the current user.

+
+
+ + + + + + + + + + + + + + +

+ Remove(QuickLaunch) + +

+ +

Removes a Windows shortcut from the quick launch bar.

+
+
+ +
+
public static void Remove(QuickLaunch quickLaunch)
+
+ +

Parameters

+
+
quickLaunch QuickLaunch
+

Information about the shortcut to be removed.

+
+
+ + + + + + + + + + + + + + +

+ Remove(SendTo) + +

+ +

Removes a Windows shortcut from the "Send to" menu.

+
+
+ +
+
public static void Remove(SendTo sendTo)
+
+ +

Parameters

+
+
sendTo SendTo
+

Information about the shortcut to be removed.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.StubBuilder.html b/api/ZeroInstall.DesktopIntegration.Windows.StubBuilder.html new file mode 100644 index 000000000..f414a4f2f --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.StubBuilder.html @@ -0,0 +1,340 @@ + + + + + Class StubBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class StubBuilder +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Builds stub EXEs that execute "0install" commands.

+
+
+ +
+
public class StubBuilder
+
+ + + + +
+
Inheritance
+
+ +
StubBuilder
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ StubBuilder(IIconStore) + +

+ +

Builds stub EXEs that execute "0install" commands.

+
+
+ +
+
public StubBuilder(IIconStore iconStore)
+
+ +

Parameters

+
+
iconStore IIconStore
+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ BuildRunStub(string, FeedTarget, string?, bool) + +

+ +

Builds a stub EXE that executes the "0install run" command at a specific path.

+
+
+ +
+
public void BuildRunStub(string path, FeedTarget target, string? command = null, bool gui = false)
+
+ +

Parameters

+
+
path string
+

The path to store the generated EXE file.

+
+
target FeedTarget
+

The application to be launched.

+
+
command string
+

The command argument to be passed to the the "0install run" command; can be null.

+
+
gui bool
+

true to build a GUI stub, false to build a CLI stub.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
InvalidOperationException
+

There was a compilation error while generating the stub EXE.

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + + +

+ GetRunCommandLine(FeedTarget, string?, bool) + +

+ +

Returns a command-line for executing the "0install run" command. +Generates and returns a stub EXE if possible, falls back to directly pointing to the "0install" EXE otherwise.

+
+
+ +
+
public IReadOnlyList<string> GetRunCommandLine(FeedTarget target, string? command = null, bool machineWide = false)
+
+ +

Parameters

+
+
target FeedTarget
+

The application to be launched.

+
+
command string
+

The command argument to be passed to the the "0install run" command; can be null.

+
+
machineWide bool
+

true place the generated stub in a machine-wide location; false to place it in the current user profile.

+
+
+ +

Returns

+
+
IReadOnlyList<string>
+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
InvalidOperationException
+

There was a compilation error while generating the stub EXE.

+
+
IOException
+

A problem occurred while writing to the filesystem.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.UninstallEntry.html b/api/ZeroInstall.DesktopIntegration.Windows.UninstallEntry.html new file mode 100644 index 000000000..9e2170522 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.UninstallEntry.html @@ -0,0 +1,391 @@ + + + + + Class UninstallEntry | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class UninstallEntry +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Manages uninstall registry entries on Windows systems.

+
+
+ +
+
public static class UninstallEntry
+
+ + + + +
+
Inheritance
+
+ +
UninstallEntry
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Register(string, string[], string, string?, Uri?, string?, string?, long?, bool) + +

+ +

Adds an entry to the list of uninstallable applications.

+
+
+ +
+
public static void Register(string id, string[] uninstallCommand, string name, string? publisher = null, Uri? homepage = null, string? iconPath = null, string? version = null, long? size = null, bool machineWide = false)
+
+ +

Parameters

+
+
id string
+

The ID of the entry to create.

+
+
uninstallCommand string[]
+

The command-line to invoke for uninstalling the application.

+
+
name string
+

The name of the application.

+
+
publisher string
+

The publisher (company or organization) of the application.

+
+
homepage Uri
+

The URL of a web-page describing application in more detail.

+
+
iconPath string
+

The path of an icon file.

+
+
version string
+

The application's current version.

+
+
size long?
+

The application's size in bytes.

+
+
machineWide bool
+

Apply the registration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Register(FeedTarget, IIconStore, bool) + +

+ +

Adds an entry to the list of uninstallable applications.

+
+
+ +
+
public static void Register(FeedTarget target, IIconStore iconStore, bool machineWide)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being added.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Apply the registration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Unregister(string, bool) + +

+ +

Removes an entry from the list of uninstallable applications.

+
+
+ +
+
public static void Unregister(string id, bool machineWide)
+
+ +

Parameters

+
+
id string
+

The ID of the entry to be removed.

+
+
machineWide bool
+

Apply the registration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Unregister(FeedUri, bool) + +

+ +

Removes an entry from the list of uninstallable applications.

+
+
+ +
+
public static void Unregister(FeedUri uri, bool machineWide)
+
+ +

Parameters

+
+
uri FeedUri
+

The feed to be removed.

+
+
machineWide bool
+

Apply the registration machine-wide instead of just for the current user.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.UrlProtocol.html b/api/ZeroInstall.DesktopIntegration.Windows.UrlProtocol.html new file mode 100644 index 000000000..24c3ce93d --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.UrlProtocol.html @@ -0,0 +1,355 @@ + + + + + Class UrlProtocol | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class UrlProtocol +

+ +
+
Namespace
ZeroInstall.DesktopIntegration.Windows
+
Assembly
ZeroInstall.DesktopIntegration.dll
+
+ +

Contains control logic for applying UrlProtocol and UrlProtocol on Windows systems.

+
+
+ +
+
public static class UrlProtocol
+
+ + + + +
+
Inheritance
+
+ +
UrlProtocol
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ ProtocolIndicator + +

+ +

The registry value name used to indicate that a programmatic identifier is actually a ULR protocol handler.

+
+
+ +
+
public const string ProtocolIndicator = "URL Protocol"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ RegKeyUserVistaUrlAssoc + +

+ +

The HKCU registry key where Windows Vista and newer store URL protocol associations.

+
+
+ +
+
public const string RegKeyUserVistaUrlAssoc = "Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Register(FeedTarget, UrlProtocol, IIconStore, bool, bool) + +

+ +

Registers a URL protocol in the current system.

+
+
+ +
+
public static void Register(FeedTarget target, UrlProtocol urlProtocol, IIconStore iconStore, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
target FeedTarget
+

The application being integrated.

+
+
urlProtocol UrlProtocol
+

The URL protocol to register.

+
+
iconStore IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
machineWide bool
+

Register the URL protocol machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the handler shall become the default handler for the protocol.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
WebException
+

A problem occurred while downloading additional data (such as icons).

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + + +

+ Unregister(UrlProtocol, bool, bool) + +

+ +

Unregisters a URL protocol in the current system.

+
+
+ +
+
public static void Unregister(UrlProtocol urlProtocol, bool machineWide, bool accessPoint = false)
+
+ +

Parameters

+
+
urlProtocol UrlProtocol
+

The URL protocol to remove.

+
+
machineWide bool
+

Unregister the URL protocol machine-wide instead of just for the current user.

+
+
accessPoint bool
+

Indicates that the handler was the default handler for the protocol.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing to the filesystem or registry.

+
+
UnauthorizedAccessException
+

Write access to the filesystem or registry is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.Windows.html b/api/ZeroInstall.DesktopIntegration.Windows.html new file mode 100644 index 000000000..9f6a2e9b9 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.Windows.html @@ -0,0 +1,185 @@ + + + + + Namespace ZeroInstall.DesktopIntegration.Windows | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.DesktopIntegration.Windows

+
+

Windows-specific desktop integration code.

+
+
+
+ +

+Classes +

+
+
AppAlias
+

Contains control logic for applying AppAlias on Windows systems.

+
+
+
+
AppRegistration
+

Contains control logic for applying AppRegistration on Windows systems.

+
+
+
+
AutoPlay
+

Contains control logic for applying AutoPlay and AutoPlay on Windows systems.

+
+
+
+
ComServer
+

Contains control logic for applying ComServer on Windows systems.

+
+
+
+
ContextMenu
+

Contains control logic for applying ContextMenu and ContextMenu on Windows systems.

+
+
+
+
DefaultProgram
+

Contains control logic for applying DefaultProgram and DefaultProgram on Windows systems.

+
+
+
+
FileType
+

Contains control logic for applying FileType and FileType on Windows systems.

+
+
+
+
PathEnv
+

Manages the PATH environment variable.

+
+
+
+
Shortcut
+

Creates Windows shortcut files (.lnk).

+
+
+
+
StubBuilder
+

Builds stub EXEs that execute "0install" commands.

+
+
+
+
UninstallEntry
+

Manages uninstall registry entries on Windows systems.

+
+
+
+
UrlProtocol
+

Contains control logic for applying UrlProtocol and UrlProtocol on Windows systems.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.DesktopIntegration.html b/api/ZeroInstall.DesktopIntegration.html new file mode 100644 index 000000000..cb4e1e675 --- /dev/null +++ b/api/ZeroInstall.DesktopIntegration.html @@ -0,0 +1,239 @@ + + + + + Namespace ZeroInstall.DesktopIntegration | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.DesktopIntegration

+
+

Integrating applications with desktop environments (creating menu entries, etc.).

+

NuGet package: ZeroInstall.DesktopIntegration

+
+
+
+ +

+Namespaces +

+
+
ZeroInstall.DesktopIntegration.AccessPoints
+
+

Structures for parsing and in-memory representation of access points applied to a system.

+
+
+
+
ZeroInstall.DesktopIntegration.Unix
+
+

Desktop integration code for Unix-like systems (e.g. Linux).

+
+
+
+
ZeroInstall.DesktopIntegration.ViewModel
+
+

Classes that wrap desktop integration capabilities in a data binding-friendly manner.

+
+
+
+
ZeroInstall.DesktopIntegration.Windows
+
+

Windows-specific desktop integration code.

+
+
+

+Classes +

+
+
AppEntry
+

Represents an application in the AppList identified by its interface URI.

+
+
+
+
AppList
+

Stores a list of applications and the kind of desktop integration the user chose for them.

+
+
+
+
CapabilityExtensions
+

Contains extension methods for Capabilitys.

+
+
+
+
CategoryIntegrationManager
+

Manages desktop integration via AccessPoints, grouping them into categories.

+
+
+
+
ConflictData
+

Stores information about an AccessPoint causing a conflict and the AppEntry containing it.

+
+
+
+
ConflictDataUtils
+

Helper methods for creating ConflictData lists.

+
+
+
+
ConflictException
+

Indicates a desktop integration operation could not be completed due to conflicting AccessPoints.

+
+
+
+
IconStores
+

Provides IIconStore instances.

+
+
+
+
IntegrationManager
+

Manages an AppList and desktop integration via AccessPoints.

+
+
+
+
IntegrationManagerBase
+

Base class for IIntegrationManager implementations using template methods.

+
+
+
+
Suggest
+

Suggests suitable default AccessPoints for specific Feeds.

+
+
+
+
SyncIntegrationManager
+

Synchronizes the AppList with other computers.

+
+
+
+
SyncRaceException
+

Multiple computers are trying to sync with the same account at the same time.

+
+
+

+Interfaces +

+
+
ICategoryIntegrationManager
+

Manages desktop integration via AccessPoints, grouping them into categories.

+
+
+
+
IIntegrationManager
+

Manages an AppList and desktop integration via AccessPoints.

+
+
+

+Enums +

+
+
SyncResetMode
+

Controls how synchronization data is reset by Sync(SyncResetMode)

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Architecture.html b/api/ZeroInstall.Model.Architecture.html new file mode 100644 index 000000000..dab2910c8 --- /dev/null +++ b/api/ZeroInstall.Model.Architecture.html @@ -0,0 +1,396 @@ + + + + + Struct Architecture | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct Architecture +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Describes a combination of an operating system and a CPU architecture.

+
+
+ +
+
[TypeConverter(typeof(ArchitectureConverter))]
+[Serializable]
+public record struct Architecture : IEquatable<Architecture>
+
+ + + + + +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Constructors +

+ + + + +

+ Architecture(string) + +

+ +

Creates a new architecture structure from a string in the form "os-cpu".

+
+
+ +
+
public Architecture(string architecture)
+
+ +

Parameters

+
+
architecture string
+
+
+ + + + + + + + + +

Exceptions

+
+
FormatException
+

architecture is not in the form "os-cpu"

+
+
+ + + + + +

+ Architecture(OS, Cpu) + +

+ +

Describes a combination of an operating system and a CPU architecture.

+
+
+ +
+
public Architecture(OS OS = OS.All, Cpu Cpu = Cpu.All)
+
+ +

Parameters

+
+
OS OS
+

Determines which operating systems are supported.

+
+
Cpu Cpu
+

Determines which CPU-architectures are supported.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ CurrentSystem + +

+ +

An architecture representing the currently running system.

+
+
+ +
+
public static readonly Architecture CurrentSystem
+
+ + + + +

Field Value

+
+
Architecture
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Cpu + +

+ +

Determines which CPU-architectures are supported.

+
+
+ +
+
public Cpu Cpu { readonly get; set; }
+
+ + + + + +

Property Value

+
+
Cpu
+
+
+ + + + + + + + + + +

+ OS + +

+ +

Determines which operating systems are supported.

+
+
+ +
+
public OS OS { readonly get; set; }
+
+ + + + + +

Property Value

+
+
OS
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Returns the architecture in the form "os-cpu". Safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ArchitectureExtensions.html b/api/ZeroInstall.Model.ArchitectureExtensions.html new file mode 100644 index 000000000..b096fa699 --- /dev/null +++ b/api/ZeroInstall.Model.ArchitectureExtensions.html @@ -0,0 +1,372 @@ + + + + + Class ArchitectureExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ArchitectureExtensions +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Contains extension methods for Architecture, OS and Cpu.

+
+
+ +
+
public static class ArchitectureExtensions
+
+ + + + +
+
Inheritance
+
+ +
ArchitectureExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Is32Bit(Cpu) + +

+ +

Indicates whether the CPU architecture is 32-bit.

+
+
+ +
+
public static bool Is32Bit(this Cpu cpu)
+
+ +

Parameters

+
+
cpu Cpu
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Is64Bit(Cpu) + +

+ +

Indicates whether the CPU architecture is 64-bit.

+
+
+ +
+
public static bool Is64Bit(this Cpu cpu)
+
+ +

Parameters

+
+
cpu Cpu
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ RunsOn(Architecture, Architecture) + +

+ +

Determines whether an implementation for architecture can run on target.

+
+
+ +
+
public static bool RunsOn(this Architecture architecture, Architecture target)
+
+ +

Parameters

+
+
architecture Architecture
+
+
target Architecture
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ RunsOn(Cpu, Cpu) + +

+ +

Determines whether an implementation for cpu can run on target.

+
+
+ +
+
public static bool RunsOn(this Cpu cpu, Cpu target)
+
+ +

Parameters

+
+
cpu Cpu
+
+
target Cpu
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ RunsOn(OS, OS) + +

+ +

Determines whether an implementation for os can run on target.

+
+
+ +
+
public static bool RunsOn(this OS os, OS target)
+
+ +

Parameters

+
+
os OS
+
+
target OS
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Archive.html b/api/ZeroInstall.Model.Archive.html new file mode 100644 index 000000000..7cac7e31f --- /dev/null +++ b/api/ZeroInstall.Model.Archive.html @@ -0,0 +1,1256 @@ + + + + + Class Archive | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Archive +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Retrieves an implementation by downloading and extracting an archive.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class Archive : DownloadRetrievalMethod, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<RetrievalMethod>, IRecipeStep, ICloneable<IRecipeStep>, IEquatable<DownloadRetrievalMethod>, IEquatable<Archive>
+
+ + + + +
+
Inheritance
+
+ + + + + +
Archive
+
+
+ +
+
Implements
+
+ + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ KnownMimeTypes + +

+ +

All known MimeType values for archives.

+
+
+ +
+
public static readonly IEnumerable<string> KnownMimeTypes
+
+ + + + +

Field Value

+
+
IEnumerable<string>
+
+
+ + + + + + + + + + +

+ MimeType7Z + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeType7Z = "application/x-7z-compressed"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeCab + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeCab = "application/vnd.ms-cab-compressed"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeDeb + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeDeb = "application/x-deb"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeDmg + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeDmg = "application/x-apple-diskimage"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeMsi + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeMsi = "application/x-msi"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeRar + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeRar = "application/vnd.rar"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeRpm + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeRpm = "application/x-rpm"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeRubyGem + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeRubyGem = "application/x-ruby-gem"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeTar + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeTar = "application/x-tar"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeTarBzip + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeTarBzip = "application/x-bzip-compressed-tar"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeTarGzip + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeTarGzip = "application/x-compressed-tar"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeTarLzip + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeTarLzip = "application/x-lzip-compressed-tar"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeTarLzma + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeTarLzma = "application/x-lzma-compressed-tar"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeTarXz + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeTarXz = "application/x-xz-compressed-tar"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeTarZstandard + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeTarZstandard = "application/x-zstd-compressed-tar"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeZip + +

+ +

A MimeType value for archives.

+
+
+ +
+
public const string MimeTypeZip = "application/zip"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Destination + +

+ +

The subdirectory below the implementation directory to extract the archive into as a Unix-style path; null or Empty for top-level.

+
+
+ +
+
public string? Destination { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ DownloadSize + +

+ +

The effective size of the file on the server.

+
+
+ +
+
public override long DownloadSize { get; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + + + + + + + +

+ Extract + +

+ +

The directory to extract into relative to the implementation root as a Unix-style path; null or Empty for entire archive.

+
+
+ +
+
public string? Extract { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeType + +

+ +

The type of the archive as a MIME type. If missing, the type is guessed from the extension on the Href attribute. This value is case-insensitive.

+
+
+ +
+
[TypeConverter(typeof(ArchiveMimeTypeConverter))]
+public string? MimeType { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ StartOffset + +

+ +

The number of bytes at the beginning of the file which should be ignored. The value in Size does not include the skipped bytes.

+
+
+ +
+
public int StartOffset { get; set; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + +

Remarks

+

This is useful for some self-extracting archives which are made up of a shell script followed by a normal archive in a single file.

+
+ + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Archive instance.

+
+
+ +
+
public override RetrievalMethod Clone()
+
+ + +

Returns

+
+
RetrievalMethod
+

The new copy of the Archive.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetFileExtension(string) + +

+ +

Gets the default file extension for a particular archive MIME type.

+
+
+ +
+
public static string GetFileExtension(string mimeType)
+
+ +

Parameters

+
+
mimeType string
+

The MIME type to get the extension for.

+
+
+ +

Returns

+
+
string
+

The file extension including the leading dot, e.g. '.zip'. '.*' if unknown.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ GuessMimeType(string) + +

+ +

Tries to guess the MIME type of an archive file by looking at its file extension.

+
+
+ +
+
public static string GuessMimeType(string fileName)
+
+ +

Parameters

+
+
fileName string
+

The file name to analyze.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + +

Exceptions

+
+
NotSupportedException
+

The file extension does not correspond to a known archive type.

+
+
+ + + + + +

+ Normalize(FeedUri?) + +

+ +

Sets missing default values and handles legacy elements.

+
+
+ +
+
public override void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
UriFormatException
+

Href is relative and feedUri is a remote URI.

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the archive in the form "Location (MimeType, Size + StartOffset, Extract) => Destination". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Archive?, Archive?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Archive? left, Archive? right)
+
+ +

Parameters

+
+
left Archive
+

The left object

+
+
right Archive
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Archive?, Archive?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Archive? left, Archive? right)
+
+ +

Parameters

+
+
left Archive
+

The left object

+
+
right Archive
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Arg.html b/api/ZeroInstall.Model.Arg.html new file mode 100644 index 000000000..e1a430f42 --- /dev/null +++ b/api/ZeroInstall.Model.Arg.html @@ -0,0 +1,584 @@ + + + + + Class Arg | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Arg +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A single command-line arguments to be passed to an executable.

+
+
+ +
+
[Serializable]
+[Equatable]
+public class Arg : ArgBase, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<ArgBase>, ICloneable<Arg>, IEquatable<Arg>
+
+ + + + +
+
Inheritance
+
+ + + + +
Arg
+
+
+ +
+
Implements
+
+ + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Value + +

+ +

A single command-line arguments to be passed to an executable. +Will be automatically escaped to allow proper concatenation of multiple arguments containing spaces.

+
+
+ +
+
public required string Value { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Arg instance.

+
+
+ +
+
public override ArgBase Clone()
+
+ + +

Returns

+
+
ArgBase
+

The new copy of the Arg.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Arg?) + +

+ +
+
+ +
+
protected bool Equals(Arg? other)
+
+ +

Parameters

+
+
other Arg
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns Value. Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Arg?, Arg?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Arg? left, Arg? right)
+
+ +

Parameters

+
+
left Arg
+

The left object

+
+
right Arg
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ implicit operator Arg(string) + +

+ +

Convenience cast for turning strings into plain Args.

+
+
+ +
+
public static implicit operator Arg(string value)
+
+ +

Parameters

+
+
value string
+
+
+ +

Returns

+
+
Arg
+
+
+ + + + + + + + + + + + + +

+ operator !=(Arg?, Arg?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Arg? left, Arg? right)
+
+ +

Parameters

+
+
left Arg
+

The left object

+
+
right Arg
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ArgBase.html b/api/ZeroInstall.Model.ArgBase.html new file mode 100644 index 000000000..3a0fba556 --- /dev/null +++ b/api/ZeroInstall.Model.ArgBase.html @@ -0,0 +1,336 @@ + + + + + Class ArgBase | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ArgBase +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Common base class for Arg and ForEachArgs.

+
+
+ +
+
[TypeConverter(typeof(ArgBaseConverter))]
+public abstract class ArgBase : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<ArgBase>
+
+ + + + +
+
Inheritance
+
+ + + +
ArgBase
+
+
+ +
+
Implements
+
+ + + +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this ArgBase instance.

+
+
+ +
+
public abstract ArgBase Clone()
+
+ + +

Returns

+
+
ArgBase
+

The new copy of the ArgBase.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public abstract void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + +

Operators +

+ + + + +

+ implicit operator ArgBase(string) + +

+ +

Convenience cast for turning strings into plain Args.

+
+
+ +
+
public static implicit operator ArgBase(string value)
+
+ +

Parameters

+
+
value string
+
+
+ +

Returns

+
+
ArgBase
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Binding.html b/api/ZeroInstall.Model.Binding.html new file mode 100644 index 000000000..7a8d8baf6 --- /dev/null +++ b/api/ZeroInstall.Model.Binding.html @@ -0,0 +1,299 @@ + + + + + Class Binding | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Binding +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Bindings specify how the chosen implementation is made known to the running program.

+
+
+ +
+
public abstract class Binding : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Binding>
+
+ + + + +
+
Inheritance
+
+ + + +
Binding
+
+
+ +
+
Implements
+
+ + + +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + +
+ + + + +

Remarks

+

Bindings can appear in Dependencys, in which case they tell a component how to find its dependency, +or in Element, where they tell a component how to find itself.

+
+ + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Binding instance.

+
+
+ +
+
public abstract Binding Clone()
+
+ + +

Returns

+
+
Binding
+

The new copy of the Binding.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public virtual void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.AppRegistration.html b/api/ZeroInstall.Model.Capabilities.AppRegistration.html new file mode 100644 index 000000000..346215923 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.AppRegistration.html @@ -0,0 +1,563 @@ + + + + + Class AppRegistration | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AppRegistration +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

Indicates that an application should be listed in the "Set your Default Programs" UI (Windows Vista and later).

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class AppRegistration : Capability, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>, IEquatable<AppRegistration>
+
+ + + + +
+
Inheritance
+
+ + + +
AppRegistration
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + +

Remarks

+

The actual integration information is pulled from the other Capabilitys.

+
+ + +

Properties +

+ + + + +

+ CapabilityRegPath + +

+ +

The registry path relative to HKEY_CURRENT_USER or HKEY_LOCAL_MACHINE which should be used to store the application's capability registration information.

+
+
+ +
+
public required string CapabilityRegPath { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ConflictIDs + +

+ +

Identifiers from a namespace global to all Capabilitys. +Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public override IEnumerable<string> ConflictIDs { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ + + + + + +

+ WindowsMachineWideOnly + +

+ +

Indicates whether this capability can be registered only machine-wide and not per-user on Windows systems.

+
+
+ +
+
public override bool WindowsMachineWideOnly { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Capability instance.

+
+
+ +
+
public override Capability Clone()
+
+ + +

Returns

+
+
Capability
+

The new copy of the Capability.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the capability in the form "CapabilityRegPath". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(AppRegistration?, AppRegistration?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(AppRegistration? left, AppRegistration? right)
+
+ +

Parameters

+
+
left AppRegistration
+

The left object

+
+
right AppRegistration
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(AppRegistration?, AppRegistration?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(AppRegistration? left, AppRegistration? right)
+
+ +

Parameters

+
+
left AppRegistration
+

The left object

+
+
right AppRegistration
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.AutoPlay.html b/api/ZeroInstall.Model.Capabilities.AutoPlay.html new file mode 100644 index 000000000..1478e3b41 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.AutoPlay.html @@ -0,0 +1,616 @@ + + + + + Class AutoPlay | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AutoPlay +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

An application's ability to handle one or more AutoPlay events.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class AutoPlay : IconCapability, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>, IEquatable<DefaultCapability>, IIconContainer, IDescriptionContainer, IEquatable<IconCapability>, IEquatable<AutoPlay>
+
+ + + + +
+
Inheritance
+
+ + + + + +
AutoPlay
+
+
+ +
+
Implements
+
+ + + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ConflictIDs + +

+ +

Identifiers from a namespace global to all Capabilitys. +Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public override IEnumerable<string> ConflictIDs { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ + + + + + +

+ Events + +

+ +

The IDs of the events this action can handle.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<AutoPlayEvent> Events { get; }
+
+ + + + + +

Property Value

+
+
List<AutoPlayEvent>
+
+
+ + + + + + + + + + +

+ Provider + +

+ +

The name of the application as shown in the AutoPlay selection list.

+
+
+ +
+
public required string Provider { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Verb + +

+ +

The command to execute when the handler gets called.

+
+
+ +
+
[Browsable(false)]
+public required Verb Verb { get; set; }
+
+ + + + + +

Property Value

+
+
Verb
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Capability instance.

+
+
+ +
+
public override Capability Clone()
+
+ + +

Returns

+
+
Capability
+

The new copy of the Capability.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the capability in the form "ID". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(AutoPlay?, AutoPlay?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(AutoPlay? left, AutoPlay? right)
+
+ +

Parameters

+
+
left AutoPlay
+

The left object

+
+
right AutoPlay
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(AutoPlay?, AutoPlay?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(AutoPlay? left, AutoPlay? right)
+
+ +

Parameters

+
+
left AutoPlay
+

The left object

+
+
right AutoPlay
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.AutoPlayEvent.html b/api/ZeroInstall.Model.Capabilities.AutoPlayEvent.html new file mode 100644 index 000000000..79a963dd9 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.AutoPlayEvent.html @@ -0,0 +1,875 @@ + + + + + Class AutoPlayEvent | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class AutoPlayEvent +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

A specific AutoPlay event such as "Audio CD inserted".

+
+
+ +
+
[Serializable]
+[Equatable]
+public class AutoPlayEvent : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<AutoPlayEvent>, IEquatable<AutoPlayEvent>
+
+ + + + +
+
Inheritance
+
+ + +
AutoPlayEvent
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ NameBurnBluRay + +

+ +

Canonical Name.

+
+
+ +
+
public const string NameBurnBluRay = "HandleBDBurningOnArrival"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NameBurnCD + +

+ +

Canonical Name.

+
+
+ +
+
public const string NameBurnCD = "HandleCDBurningOnArrival"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NameBurnDvd + +

+ +

Canonical Name.

+
+
+ +
+
public const string NameBurnDvd = "HandleDVDBurningOnArrival"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NamePlayBluRay + +

+ +

Canonical Name.

+
+
+ +
+
public const string NamePlayBluRay = "PlayBluRayOnArrival"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NamePlayCDAudio + +

+ +

Canonical Name.

+
+
+ +
+
public const string NamePlayCDAudio = "PlayCDAudioOnArrival"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NamePlayDvdAudioO + +

+ +

Canonical Name.

+
+
+ +
+
public const string NamePlayDvdAudioO = "PlayDVDAudioOnArrival"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NamePlayDvdMovie + +

+ +

Canonical Name.

+
+
+ +
+
public const string NamePlayDvdMovie = "PlayDVDMovieOnArrival"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NamePlayMusicFiles + +

+ +

Canonical Name.

+
+
+ +
+
public const string NamePlayMusicFiles = "PlayMusicFilesOnArrival"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NamePlaySuperVideoCDMovie + +

+ +

Canonical Name.

+
+
+ +
+
public const string NamePlaySuperVideoCDMovie = "PlaySuperVideoCDMovieOnArrival"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NamePlayVideoCDMovie + +

+ +

Canonical Name.

+
+
+ +
+
public const string NamePlayVideoCDMovie = "PlayVideoCDMovieOnArrival"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NamePlayVideoFiles + +

+ +

Canonical Name.

+
+
+ +
+
public const string NamePlayVideoFiles = "PlayVideoFilesOnArrival"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Name + +

+ +

The name of the event. May only contain alphanumeric characters, spaces ( ), dots (.), underscores (_), hyphens (-) and plus signs (+).

+
+
+ +
+
public required string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this AutoPlayEvent instance.

+
+
+ +
+
public AutoPlayEvent Clone()
+
+ + +

Returns

+
+
AutoPlayEvent
+

The new copy of the AutoPlayEvent.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(AutoPlayEvent?) + +

+ +
+
+ +
+
protected bool Equals(AutoPlayEvent? other)
+
+ +

Parameters

+
+
other AutoPlayEvent
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the event in the form "Name". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(AutoPlayEvent?, AutoPlayEvent?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(AutoPlayEvent? left, AutoPlayEvent? right)
+
+ +

Parameters

+
+
left AutoPlayEvent
+

The left object

+
+
right AutoPlayEvent
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(AutoPlayEvent?, AutoPlayEvent?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(AutoPlayEvent? left, AutoPlayEvent? right)
+
+ +

Parameters

+
+
left AutoPlayEvent
+

The left object

+
+
right AutoPlayEvent
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.Capability.html b/api/ZeroInstall.Model.Capabilities.Capability.html new file mode 100644 index 000000000..872a864c7 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.Capability.html @@ -0,0 +1,585 @@ + + + + + Class Capability | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Capability +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

A capability tells the desktop environment what an application can do and in which fashion this can be represented to the user.

+
+
+ +
+
[Equatable]
+public abstract class Capability : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>
+
+ + + + +
+
Inheritance
+
+ + +
Capability
+
+
+ +
+
Implements
+
+ + + +
+
+ +
+
Derived
+
+ + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ConflictIDs + +

+ +

Identifiers from a namespace global to all Capabilitys. +Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public abstract IEnumerable<string> ConflictIDs { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ + + + + + +

+ ID + +

+ +

An ID that differentiates this capability from other capabilities of the same type within the feed. +May only contain alphanumeric characters, spaces ( ), dots (.), underscores (_), hyphens (-) and plus signs (+).

+
+
+ +
+
public required string ID { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + +

Remarks

+

Also serves as a programmatic identifier within the desktop environment. In case of conflicts, the first capability listed with a specific ID will take precedence.

+
+ + + + + + +

+ WindowsMachineWideOnly + +

+ +

Indicates whether this capability can be registered only machine-wide and not per-user on Windows systems.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public virtual bool WindowsMachineWideOnly { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Capability instance.

+
+
+ +
+
public abstract Capability Clone()
+
+ + +

Returns

+
+
Capability
+

The new copy of the Capability.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Capability?) + +

+ +
+
+ +
+
protected bool Equals(Capability? other)
+
+ +

Parameters

+
+
other Capability
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public virtual void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(Capability?, Capability?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Capability? left, Capability? right)
+
+ +

Parameters

+
+
left Capability
+

The left object

+
+
right Capability
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Capability?, Capability?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Capability? left, Capability? right)
+
+ +

Parameters

+
+
left Capability
+

The left object

+
+
right Capability
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.CapabilityList.html b/api/ZeroInstall.Model.Capabilities.CapabilityList.html new file mode 100644 index 000000000..4ffb7a983 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.CapabilityList.html @@ -0,0 +1,603 @@ + + + + + Class CapabilityList | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CapabilityList +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

Groups a number of application Capabilitys (for a specific operating system) that can be registered in a desktop environment.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class CapabilityList : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<CapabilityList>, IEquatable<CapabilityList>
+
+ + + + +
+
Inheritance
+
+ + +
CapabilityList
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ XmlNamespace + +

+ +

The XML namespace used for storing application capabilities.

+
+
+ +
+
public const string XmlNamespace = "http://0install.de/schema/desktop-integration/capabilities"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ XsdLocation + +

+ +

The URI to retrieve an XSD containing the XML Schema information for this class in serialized form.

+
+
+ +
+
public const string XsdLocation = "https://docs.0install.net/specifications/capabilities.xsd"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Entries + +

+ +

A list of Capabilitys.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Capability> Entries { get; }
+
+ + + + + +

Property Value

+
+
List<Capability>
+
+
+ + + + + + + + + + +

+ OS + +

+ +

Determines for which operating system the Capabilitys are applicable.

+
+
+ +
+
public OS OS { get; set; }
+
+ + + + + +

Property Value

+
+
OS
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this CapabilityList instance.

+
+
+ +
+
public CapabilityList Clone()
+
+ + +

Returns

+
+
CapabilityList
+

The new copy of the CapabilityList.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetCapability<T>(string) + +

+ +

Retrieves the first Capability that matches a specific type and ID. Safe for missing elements.

+
+
+ +
+
public T? GetCapability<T>(string id) where T : Capability
+
+ +

Parameters

+
+
id string
+

The ID to match.

+
+
+ +

Returns

+
+
T
+

The first matching Capability; null if no match was found.

+
+
+ +

Type Parameters

+
+
T
+

The capability type to match.

+
+
+ + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

No capability matching id and T was found.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the capability list in the form "OS". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(CapabilityList?, CapabilityList?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(CapabilityList? left, CapabilityList? right)
+
+ +

Parameters

+
+
left CapabilityList
+

The left object

+
+
right CapabilityList
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(CapabilityList?, CapabilityList?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(CapabilityList? left, CapabilityList? right)
+
+ +

Parameters

+
+
left CapabilityList
+

The left object

+
+
right CapabilityList
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.CapabilityListExtensions.html b/api/ZeroInstall.Model.Capabilities.CapabilityListExtensions.html new file mode 100644 index 000000000..fede3809d --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.CapabilityListExtensions.html @@ -0,0 +1,219 @@ + + + + + Class CapabilityListExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CapabilityListExtensions +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

Contains extension methods for CapabilityLists.

+
+
+ +
+
public static class CapabilityListExtensions
+
+ + + + +
+
Inheritance
+
+ +
CapabilityListExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ CompatibleCapabilities(IEnumerable<CapabilityList>) + +

+ +

Flattens a set of CapabilityLists into a single stream of Capabilitys, filtering out OSes that do not match CurrentSystem.

+
+
+ +
+
[LinqTunnel]
+public static IEnumerable<Capability> CompatibleCapabilities(this IEnumerable<CapabilityList> capabilityLists)
+
+ +

Parameters

+
+
capabilityLists IEnumerable<CapabilityList>
+
+
+ +

Returns

+
+
IEnumerable<Capability>
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.ComServer.html b/api/ZeroInstall.Model.Capabilities.ComServer.html new file mode 100644 index 000000000..3ba92e7b7 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.ComServer.html @@ -0,0 +1,469 @@ + + + + + Class ComServer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ComServer +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

An application's ability to act as a COM server.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class ComServer : Capability, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>, IEquatable<ComServer>
+
+ + + + +
+
Inheritance
+
+ + + +
ComServer
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ConflictIDs + +

+ +

Identifiers from a namespace global to all Capabilitys. +Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public override IEnumerable<string> ConflictIDs { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Capability instance.

+
+
+ +
+
public override Capability Clone()
+
+ + +

Returns

+
+
Capability
+

The new copy of the Capability.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the capability in the form "-". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ComServer?, ComServer?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ComServer? left, ComServer? right)
+
+ +

Parameters

+
+
left ComServer
+

The left object

+
+
right ComServer
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ComServer?, ComServer?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ComServer? left, ComServer? right)
+
+ +

Parameters

+
+
left ComServer
+

The left object

+
+
right ComServer
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.ContextMenu.html b/api/ZeroInstall.Model.Capabilities.ContextMenu.html new file mode 100644 index 000000000..33fe1a998 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.ContextMenu.html @@ -0,0 +1,559 @@ + + + + + Class ContextMenu | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ContextMenu +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

An entry in the file manager's context menu for all file types.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class ContextMenu : VerbCapability, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>, IEquatable<DefaultCapability>, IIconContainer, IDescriptionContainer, IEquatable<IconCapability>, IEquatable<VerbCapability>, IEquatable<ContextMenu>
+
+ + + + +
+
Inheritance
+
+ + + + + + +
ContextMenu
+
+
+ +
+
Implements
+
+ + + + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ConflictIDs + +

+ +

Identifiers from a namespace global to all Capabilitys. +Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public override IEnumerable<string> ConflictIDs { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ + + + + + +

+ Extensions + +

+ +

A list of file extensions this context menu entry is displayed for. Only applicable when Target is Files. +The context menu is shown for all file types when this empty.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<FileTypeExtension> Extensions { get; }
+
+ + + + + +

Property Value

+
+
List<FileTypeExtension>
+
+
+ + + + + + + + + + +

+ Target + +

+ +

Controls which file system object types this context menu entry is displayed for.

+
+
+ +
+
public ContextMenuTarget Target { get; set; }
+
+ + + + + +

Property Value

+
+
ContextMenuTarget
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Capability instance.

+
+
+ +
+
public override Capability Clone()
+
+ + +

Returns

+
+
Capability
+

The new copy of the Capability.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the capability in the form "ID". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ContextMenu?, ContextMenu?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ContextMenu? left, ContextMenu? right)
+
+ +

Parameters

+
+
left ContextMenu
+

The left object

+
+
right ContextMenu
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ContextMenu?, ContextMenu?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ContextMenu? left, ContextMenu? right)
+
+ +

Parameters

+
+
left ContextMenu
+

The left object

+
+
right ContextMenu
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.ContextMenuTarget.html b/api/ZeroInstall.Model.Capabilities.ContextMenuTarget.html new file mode 100644 index 000000000..40b3a871a --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.ContextMenuTarget.html @@ -0,0 +1,160 @@ + + + + + Enum ContextMenuTarget | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum ContextMenuTarget +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

Describes how important a dependency is (i.e. whether ignoring it is an option).

+
+
+ +
+
public enum ContextMenuTarget
+
+ + + + + + + + + +

Fields +

+
+
All = 3
+

The context menu entry is displayed for all filesystem objects (files and directories).

+
+
Directories = 2
+

The context menu entry is displayed for all directories.

+
+
ExecutableFiles = 1
+

The context menu entry is displayed for executable files.

+
+
Files = 0
+

The context menu entry is displayed for all files.

+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.DefaultCapability.html b/api/ZeroInstall.Model.Capabilities.DefaultCapability.html new file mode 100644 index 000000000..2de24b2f0 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.DefaultCapability.html @@ -0,0 +1,463 @@ + + + + + Class DefaultCapability | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DefaultCapability +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

Abstract base class for capabilities that can be applied as default handlers for something at the user's request.

+
+
+ +
+
[Equatable]
+public abstract class DefaultCapability : Capability, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>, IEquatable<DefaultCapability>
+
+ + + + +
+
Inheritance
+
+ + + +
DefaultCapability
+
+
+ +
+
Implements
+
+ + + + +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ExplicitOnly + +

+ +

When set to true this capability is not applied as a default handler without explicit confirmation from the user.

+
+
+ +
+
public bool ExplicitOnly { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + +

Remarks

+

Use this to exclude exotic capabilities from default integration categories.

+
+ + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(DefaultCapability?) + +

+ +
+
+ +
+
protected bool Equals(DefaultCapability? other)
+
+ +

Parameters

+
+
other DefaultCapability
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(DefaultCapability?, DefaultCapability?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(DefaultCapability? left, DefaultCapability? right)
+
+ +

Parameters

+
+
left DefaultCapability
+

The left object

+
+
right DefaultCapability
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(DefaultCapability?, DefaultCapability?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(DefaultCapability? left, DefaultCapability? right)
+
+ +

Parameters

+
+
left DefaultCapability
+

The left object

+
+
right DefaultCapability
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.DefaultProgram.html b/api/ZeroInstall.Model.Capabilities.DefaultProgram.html new file mode 100644 index 000000000..b97004836 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.DefaultProgram.html @@ -0,0 +1,871 @@ + + + + + Class DefaultProgram | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DefaultProgram +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

Can act as the default provider for a well-known service such web-browser, e-mail client.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class DefaultProgram : VerbCapability, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>, IEquatable<DefaultCapability>, IIconContainer, IDescriptionContainer, IEquatable<IconCapability>, IEquatable<VerbCapability>, IEquatable<DefaultProgram>
+
+ + + + +
+
Inheritance
+
+ + + + + + +
DefaultProgram
+
+
+ +
+
Implements
+
+ + + + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ ServiceCalender + +

+ +

Canonical Service for calender tools.

+
+
+ +
+
public const string ServiceCalender = "Calender"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ ServiceContacts + +

+ +

Canonical Service for address books.

+
+
+ +
+
public const string ServiceContacts = "Contacts"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ ServiceInternet + +

+ +

Canonical Service for web browsers.

+
+
+ +
+
public const string ServiceInternet = "StartMenuInternet"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ ServiceInternetCall + +

+ +

Canonical Service for internet call tools.

+
+
+ +
+
public const string ServiceInternetCall = "Internet Call"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ ServiceJava + +

+ +

Canonical Service for Java Virtual Machines.

+
+
+ +
+
public const string ServiceJava = "JVM"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ ServiceMail + +

+ +

Canonical Service for mail clients.

+
+
+ +
+
public const string ServiceMail = "Mail"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ ServiceMedia + +

+ +

Canonical Service for media players.

+
+
+ +
+
public const string ServiceMedia = "Media"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ ServiceMessenger + +

+ +

Canonical Service for instant messengers.

+
+
+ +
+
public const string ServiceMessenger = "IM"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ ConflictIDs + +

+ +

Identifiers from a namespace global to all Capabilitys. +Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public override IEnumerable<string> ConflictIDs { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ + + + + + +

+ InstallCommands + +

+ +

Lists the commands the application registers for use by Windows' "Set Program Access and Defaults". Will be transparently replaced with Zero Install commands at runtime.

+
+
+ +
+
public InstallCommands InstallCommands { get; set; }
+
+ + + + + +

Property Value

+
+
InstallCommands
+
+
+ + + + +

Remarks

+

These strings are used for registry filtering. They are never actually executed.

+
+ + + + + + +

+ Service + +

+ +

The name of the service the application provides. +Well-known values on Windows are: Mail, Media, IM, JVM, Calender, Contacts, Internet Call

+
+
+ +
+
public required string Service { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ WindowsMachineWideOnly + +

+ +

Indicates whether this capability can be registered only machine-wide and not per-user on Windows systems.

+
+
+ +
+
public override bool WindowsMachineWideOnly { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Capability instance.

+
+
+ +
+
public override Capability Clone()
+
+ + +

Returns

+
+
Capability
+

The new copy of the Capability.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the capability in the form "Service (ID)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(DefaultProgram?, DefaultProgram?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(DefaultProgram? left, DefaultProgram? right)
+
+ +

Parameters

+
+
left DefaultProgram
+

The left object

+
+
right DefaultProgram
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(DefaultProgram?, DefaultProgram?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(DefaultProgram? left, DefaultProgram? right)
+
+ +

Parameters

+
+
left DefaultProgram
+

The left object

+
+
right DefaultProgram
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.FileType.html b/api/ZeroInstall.Model.Capabilities.FileType.html new file mode 100644 index 000000000..d86dc9c7b --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.FileType.html @@ -0,0 +1,556 @@ + + + + + Class FileType | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FileType +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

An application's ability to open a certain file type.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class FileType : VerbCapability, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>, IEquatable<DefaultCapability>, IIconContainer, IDescriptionContainer, IEquatable<IconCapability>, IEquatable<VerbCapability>, IEquatable<FileType>
+
+ + + + +
+
Inheritance
+
+ + + + + + +
FileType
+
+
+ +
+
Implements
+
+ + + + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ConflictIDs + +

+ +

Identifiers from a namespace global to all Capabilitys. +Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public override IEnumerable<string> ConflictIDs { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ + + + + + +

+ Extensions + +

+ +

A list of all file extensions associated with this file type.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<FileTypeExtension> Extensions { get; }
+
+ + + + + +

Property Value

+
+
List<FileTypeExtension>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Capability instance.

+
+
+ +
+
public override Capability Clone()
+
+ + +

Returns

+
+
Capability
+

The new copy of the Capability.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the capability in the form "ID". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(FileType?, FileType?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(FileType? left, FileType? right)
+
+ +

Parameters

+
+
left FileType
+

The left object

+
+
right FileType
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(FileType?, FileType?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(FileType? left, FileType? right)
+
+ +

Parameters

+
+
left FileType
+

The left object

+
+
right FileType
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.FileTypeExtension.html b/api/ZeroInstall.Model.Capabilities.FileTypeExtension.html new file mode 100644 index 000000000..2f426f9fd --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.FileTypeExtension.html @@ -0,0 +1,940 @@ + + + + + Class FileTypeExtension | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FileTypeExtension +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

A specific file extension used to identify a file type.

+
+
+ +
+
[Serializable]
+[Equatable]
+public class FileTypeExtension : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<FileTypeExtension>, IEquatable<FileTypeExtension>
+
+ + + + +
+
Inheritance
+
+ + +
FileTypeExtension
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ TypeApplication + +

+ +

Canonical PerceivedType.

+
+
+ +
+
public const string TypeApplication = "application"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TypeAudio + +

+ +

Canonical PerceivedType.

+
+
+ +
+
public const string TypeAudio = "audio"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TypeCompressed + +

+ +

Canonical PerceivedType.

+
+
+ +
+
public const string TypeCompressed = "compressed"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TypeContacts + +

+ +

Canonical PerceivedType.

+
+
+ +
+
public const string TypeContacts = "contacts"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TypeDocument + +

+ +

Canonical PerceivedType.

+
+
+ +
+
public const string TypeDocument = "document"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TypeFolder + +

+ +

Canonical PerceivedType.

+
+
+ +
+
public const string TypeFolder = "folder"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TypeGameMedia + +

+ +

Canonical PerceivedType.

+
+
+ +
+
public const string TypeGameMedia = "gamemedia"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TypeImage + +

+ +

Canonical PerceivedType.

+
+
+ +
+
public const string TypeImage = "image"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TypeSystem + +

+ +

Canonical PerceivedType.

+
+
+ +
+
public const string TypeSystem = "system"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TypeText + +

+ +

Canonical PerceivedType.

+
+
+ +
+
public const string TypeText = "text"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ TypeVideo + +

+ +

Canonical PerceivedType.

+
+
+ +
+
public const string TypeVideo = "video"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ MimeType + +

+ +

The MIME type associated with the file extension.

+
+
+ +
+
public string? MimeType { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ PerceivedType + +

+ +

Defines the broad category of file types this extension falls into. +Well-known values on Windows are: folder, text, image, audio, video, compressed, document, system, application

+
+
+ +
+
public string? PerceivedType { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Value + +

+ +

The file extension including the leading dot (e.g., ".jpg").

+
+
+ +
+
public required string Value { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this FileTypeExtension instance.

+
+
+ +
+
public FileTypeExtension Clone()
+
+ + +

Returns

+
+
FileTypeExtension
+

The new copy of the FileTypeExtension.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(FileTypeExtension?) + +

+ +
+
+ +
+
protected bool Equals(FileTypeExtension? other)
+
+ +

Parameters

+
+
other FileTypeExtension
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the extension in the form "Value (MimeType)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(FileTypeExtension?, FileTypeExtension?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(FileTypeExtension? left, FileTypeExtension? right)
+
+ +

Parameters

+
+
left FileTypeExtension
+

The left object

+
+
right FileTypeExtension
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(FileTypeExtension?, FileTypeExtension?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(FileTypeExtension? left, FileTypeExtension? right)
+
+ +

Parameters

+
+
left FileTypeExtension
+

The left object

+
+
right FileTypeExtension
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.IconCapability.html b/api/ZeroInstall.Model.Capabilities.IconCapability.html new file mode 100644 index 000000000..4bf3b1a01 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.IconCapability.html @@ -0,0 +1,547 @@ + + + + + Class IconCapability | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IconCapability +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

Abstract base class for capabilities that can have multiple Icons and descriptions.

+
+
+ +
+
[Serializable]
+[Equatable]
+public abstract class IconCapability : DefaultCapability, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>, IEquatable<DefaultCapability>, IIconContainer, IDescriptionContainer, IEquatable<IconCapability>
+
+ + + + +
+
Inheritance
+
+ + + + +
IconCapability
+
+
+ +
+
Implements
+
+ + + + + + + +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Descriptions + +

+ +

Full descriptions for different languages, which can be several paragraphs long.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public LocalizableStringCollection Descriptions { get; }
+
+ + + + + +

Property Value

+
+
LocalizableStringCollection
+
+
+ + + + + + + + + + +

+ Icons + +

+ +

Zero or more icons to represent the capability. Used for things like file icons.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Icon> Icons { get; }
+
+ + + + + +

Property Value

+
+
List<Icon>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(IconCapability?) + +

+ +
+
+ +
+
protected bool Equals(IconCapability? other)
+
+ +

Parameters

+
+
other IconCapability
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ GetIcon(string) + +

+ +

Returns the first icon with a specific MIME type.

+
+
+ +
+
public Icon? GetIcon(string mimeType)
+
+ +

Parameters

+
+
mimeType string
+

The MimeType to try to find. Will only return exact matches.

+
+
+ +

Returns

+
+
Icon
+

The best matching icon that was found or null if no matching icon was found.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(IconCapability?, IconCapability?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(IconCapability? left, IconCapability? right)
+
+ +

Parameters

+
+
left IconCapability
+

The left object

+
+
right IconCapability
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(IconCapability?, IconCapability?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(IconCapability? left, IconCapability? right)
+
+ +

Parameters

+
+
left IconCapability
+

The left object

+
+
right IconCapability
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.InstallCommands.html b/api/ZeroInstall.Model.Capabilities.InstallCommands.html new file mode 100644 index 000000000..c9550356e --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.InstallCommands.html @@ -0,0 +1,425 @@ + + + + + Struct InstallCommands | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct InstallCommands +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

Lists the commands the application normally registers for use by Windows' "Set Program Access and Defaults". +Used by registry virtualization to stand in for the actual Zero Install commands at runtime.

+
+
+ +
+
[TypeConverter(typeof(InstallCommandsConverter))]
+[Serializable]
+public record struct InstallCommands : IEquatable<InstallCommands>
+
+ + + + + +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ InstallCommands(string?, string?, string?, string?, string?, string?) + +

+ +

Lists the commands the application normally registers for use by Windows' "Set Program Access and Defaults". +Used by registry virtualization to stand in for the actual Zero Install commands at runtime.

+
+
+ +
+
public InstallCommands(string? Reinstall, string? ReinstallArgs, string? ShowIcons, string? ShowIconsArgs, string? HideIcons, string? HideIconsArgs)
+
+ +

Parameters

+
+
Reinstall string
+

The path (relative to the installation directory) to the executable used to set an application as the default program without any arguments.

+
+
ReinstallArgs string
+

Additional arguments for the executable specified in Reinstall.

+
+
ShowIcons string
+

The path (relative to the installation directory) to the executable used to create icons/shortcuts to the application without any arguments.

+
+
ShowIconsArgs string
+

Additional arguments for the executable specified in ShowIcons.

+
+
HideIcons string
+

The path (relative to the installation directory) to the executable used to remove icons/shortcuts to the application without any arguments.

+
+
HideIconsArgs string
+

Additional arguments for the executable specified in HideIcons.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ HideIcons + +

+ +

The path (relative to the installation directory) to the executable used to remove icons/shortcuts to the application without any arguments.

+
+
+ +
+
public string? HideIcons { readonly get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ HideIconsArgs + +

+ +

Additional arguments for the executable specified in HideIcons.

+
+
+ +
+
public string? HideIconsArgs { readonly get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Reinstall + +

+ +

The path (relative to the installation directory) to the executable used to set an application as the default program without any arguments.

+
+
+ +
+
public string? Reinstall { readonly get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ReinstallArgs + +

+ +

Additional arguments for the executable specified in Reinstall.

+
+
+ +
+
public string? ReinstallArgs { readonly get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ShowIcons + +

+ +

The path (relative to the installation directory) to the executable used to create icons/shortcuts to the application without any arguments.

+
+
+ +
+
public string? ShowIcons { readonly get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ShowIconsArgs + +

+ +

Additional arguments for the executable specified in ShowIcons.

+
+
+ +
+
public string? ShowIconsArgs { readonly get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.KnownProtocolPrefix.html b/api/ZeroInstall.Model.Capabilities.KnownProtocolPrefix.html new file mode 100644 index 000000000..dfbf457f0 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.KnownProtocolPrefix.html @@ -0,0 +1,534 @@ + + + + + Class KnownProtocolPrefix | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class KnownProtocolPrefix +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

Names a well-known protocol prefix. Used for protocols that are shared across many applications (e.g. HTTP, FTP) but not for application-specific protocols.

+
+
+ +
+
[Serializable]
+[Equatable]
+public class KnownProtocolPrefix : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<KnownProtocolPrefix>, IEquatable<KnownProtocolPrefix>
+
+ + + + +
+
Inheritance
+
+ + +
KnownProtocolPrefix
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Value + +

+ +

The value of the prefix (e.g. "http").

+
+
+ +
+
public required string Value { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this KnownProtocolPrefix instance.

+
+
+ +
+
public KnownProtocolPrefix Clone()
+
+ + +

Returns

+
+
KnownProtocolPrefix
+

The new copy of the KnownProtocolPrefix.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(KnownProtocolPrefix?) + +

+ +
+
+ +
+
protected bool Equals(KnownProtocolPrefix? other)
+
+ +

Parameters

+
+
other KnownProtocolPrefix
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the prefix in the form "Value". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(KnownProtocolPrefix?, KnownProtocolPrefix?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(KnownProtocolPrefix? left, KnownProtocolPrefix? right)
+
+ +

Parameters

+
+
left KnownProtocolPrefix
+

The left object

+
+
right KnownProtocolPrefix
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(KnownProtocolPrefix?, KnownProtocolPrefix?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(KnownProtocolPrefix? left, KnownProtocolPrefix? right)
+
+ +

Parameters

+
+
left KnownProtocolPrefix
+

The left object

+
+
right KnownProtocolPrefix
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.RemoveHook.html b/api/ZeroInstall.Model.Capabilities.RemoveHook.html new file mode 100644 index 000000000..fb8fd5db7 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.RemoveHook.html @@ -0,0 +1,536 @@ + + + + + Class RemoveHook | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RemoveHook +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

A hook/callback into the application to be called during 0install remove.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class RemoveHook : Capability, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>, IEquatable<RemoveHook>
+
+ + + + +
+
Inheritance
+
+ + + +
RemoveHook
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Arguments + +

+ +

Command-line arguments to be passed to the command. Will be automatically escaped to allow proper concatenation of multiple arguments containing spaces.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Arg> Arguments { get; }
+
+ + + + + +

Property Value

+
+
List<Arg>
+
+
+ + + + + + + + + + +

+ Command + +

+ +

The name of the command in the Feed to use when a removal of the app is requested; leave null for NameRun.

+
+
+ +
+
[TypeConverter(typeof(CommandNameConverter))]
+public string? Command { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ConflictIDs + +

+ +

Identifiers from a namespace global to all Capabilitys. +Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public override IEnumerable<string> ConflictIDs { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Capability instance.

+
+
+ +
+
public override Capability Clone()
+
+ + +

Returns

+
+
Capability
+

The new copy of the Capability.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the capability in the form "Command". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(RemoveHook?, RemoveHook?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(RemoveHook? left, RemoveHook? right)
+
+ +

Parameters

+
+
left RemoveHook
+

The left object

+
+
right RemoveHook
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(RemoveHook?, RemoveHook?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(RemoveHook? left, RemoveHook? right)
+
+ +

Parameters

+
+
left RemoveHook
+

The left object

+
+
right RemoveHook
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.UrlProtocol.html b/api/ZeroInstall.Model.Capabilities.UrlProtocol.html new file mode 100644 index 000000000..fc4140243 --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.UrlProtocol.html @@ -0,0 +1,556 @@ + + + + + Class UrlProtocol | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class UrlProtocol +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

An application's ability to handle a certain URL protocol such as HTTP.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class UrlProtocol : VerbCapability, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>, IEquatable<DefaultCapability>, IIconContainer, IDescriptionContainer, IEquatable<IconCapability>, IEquatable<VerbCapability>, IEquatable<UrlProtocol>
+
+ + + + +
+
Inheritance
+
+ + + + + + +
UrlProtocol
+
+
+ +
+
Implements
+
+ + + + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ConflictIDs + +

+ +

Identifiers from a namespace global to all Capabilitys. +Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public override IEnumerable<string> ConflictIDs { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + +

Remarks

+

These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand.

+
+ + + + + + +

+ KnownPrefixes + +

+ +

A well-known protocol prefix such as "http". Should be empty and set in ID instead if it is a custom protocol.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<KnownProtocolPrefix> KnownPrefixes { get; }
+
+ + + + + +

Property Value

+
+
List<KnownProtocolPrefix>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Capability instance.

+
+
+ +
+
public override Capability Clone()
+
+ + +

Returns

+
+
Capability
+

The new copy of the Capability.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the capability in the form "ID". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(UrlProtocol?, UrlProtocol?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(UrlProtocol? left, UrlProtocol? right)
+
+ +

Parameters

+
+
left UrlProtocol
+

The left object

+
+
right UrlProtocol
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(UrlProtocol?, UrlProtocol?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(UrlProtocol? left, UrlProtocol? right)
+
+ +

Parameters

+
+
left UrlProtocol
+

The left object

+
+
right UrlProtocol
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.Verb.html b/api/ZeroInstall.Model.Capabilities.Verb.html new file mode 100644 index 000000000..8fded3e7e --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.Verb.html @@ -0,0 +1,911 @@ + + + + + Class Verb | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Verb +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

The mapping of an action/verb (e.g. open, edit) to a Command.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class Verb : XmlUnknown, IEquatable<XmlUnknown>, IDescriptionContainer, ICloneable<Verb>, IEquatable<Verb>
+
+ + + + +
+
Inheritance
+
+ + +
Verb
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ NameEdit + +

+ +

Canonical Name for opening a file in editing mode.

+
+
+ +
+
public const string NameEdit = "edit"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NameOpen + +

+ +

Canonical Name for opening a file.

+
+
+ +
+
public const string NameOpen = "open"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NameOpenAs + +

+ +

Canonical Name for opening a file in an application of the user's choice.

+
+
+ +
+
public const string NameOpenAs = "openas"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NameOpenNew + +

+ +

Canonical Name for opening a file in a new window.

+
+
+ +
+
public const string NameOpenNew = "opennew"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NamePlay + +

+ +

Canonical Name for opening a media file and starting playback immediately.

+
+
+ +
+
public const string NamePlay = "play"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NamePreview + +

+ +

Canonical Name for displaying a quick, simple response that allows the user to rapidly preview and dismiss items.

+
+
+ +
+
public const string NamePreview = "Preview"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NamePrint + +

+ +

Canonical Name for printing a file while displaying as little as necessary to complete the task.

+
+
+ +
+
public const string NamePrint = "print"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Arguments + +

+ +

Command-line arguments to be passed to the command. Will be automatically escaped to allow proper concatenation of multiple arguments containing spaces. +"${item}" gets replaced with the path of the file being opened.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Arg> Arguments { get; }
+
+ + + + + +

Property Value

+
+
List<Arg>
+
+
+ + + + + + + + + + +

+ ArgumentsLiteral + +

+ +

Command-line arguments to be passed to the command in escaped form. "%V" gets replaced with the path of the file being opened. +This is ignored if Arguments has elements.

+
+
+ +
+
public string? ArgumentsLiteral { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Command + +

+ +

The name of the command in the Feed to use when launching via this capability; leave null for NameRun.

+
+
+ +
+
[TypeConverter(typeof(CommandNameConverter))]
+public string? Command { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Descriptions + +

+ +

Full descriptions for different languages, which can be several paragraphs long.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public LocalizableStringCollection Descriptions { get; }
+
+ + + + + +

Property Value

+
+
LocalizableStringCollection
+
+
+ + + + + + + + + + +

+ Extended + +

+ +

Set this to true to hide the verb in the Windows context menu unless the Shift key is pressed when opening the menu.

+
+
+ +
+
public bool Extended { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The name of the verb. Must be an alphanumeric string. +Use canonical names to get automatic localization; specify Descriptions otherwise.

+
+
+ +
+
[TypeConverter(typeof(VerbNameConverter))]
+public required string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SingleElementOnly + +

+ +

Set this to true to hide the verb if more than one element is selected.

+
+
+ +
+
public bool SingleElementOnly { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + +

Remarks

+

Use this to help avoid running out of resources if the user opens too many files.

+
+ + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Verb instance.

+
+
+ +
+
public Verb Clone()
+
+ + +

Returns

+
+
Verb
+

The new copy of the Verb.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the extension in the form "Name = Command". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Verb?, Verb?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Verb? left, Verb? right)
+
+ +

Parameters

+
+
left Verb
+

The left object

+
+
right Verb
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Verb?, Verb?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Verb? left, Verb? right)
+
+ +

Parameters

+
+
left Verb
+

The left object

+
+
right Verb
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.VerbCapability.html b/api/ZeroInstall.Model.Capabilities.VerbCapability.html new file mode 100644 index 000000000..2693074ce --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.VerbCapability.html @@ -0,0 +1,519 @@ + + + + + Class VerbCapability | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class VerbCapability +

+ +
+
Namespace
ZeroInstall.Model.Capabilities
+
Assembly
ZeroInstall.Model.dll
+
+ +

Abstract base class for capabilities that can have multiple Verbs.

+
+
+ +
+
[Equatable]
+public abstract class VerbCapability : IconCapability, IEquatable<XmlUnknown>, ICloneable<Capability>, IEquatable<Capability>, IEquatable<DefaultCapability>, IIconContainer, IDescriptionContainer, IEquatable<IconCapability>, IEquatable<VerbCapability>
+
+ + + + +
+
Inheritance
+
+ + + + + +
VerbCapability
+
+
+ +
+
Implements
+
+ + + + + + + + +
+
+ +
+
Derived
+
+ + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Verbs + +

+ +

A list of all available operations for the element.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Verb> Verbs { get; }
+
+ + + + + +

Property Value

+
+
List<Verb>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(VerbCapability?) + +

+ +
+
+ +
+
protected bool Equals(VerbCapability? other)
+
+ +

Parameters

+
+
other VerbCapability
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(VerbCapability?, VerbCapability?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(VerbCapability? left, VerbCapability? right)
+
+ +

Parameters

+
+
left VerbCapability
+

The left object

+
+
right VerbCapability
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(VerbCapability?, VerbCapability?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(VerbCapability? left, VerbCapability? right)
+
+ +

Parameters

+
+
left VerbCapability
+

The left object

+
+
right VerbCapability
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Capabilities.html b/api/ZeroInstall.Model.Capabilities.html new file mode 100644 index 000000000..abf323abf --- /dev/null +++ b/api/ZeroInstall.Model.Capabilities.html @@ -0,0 +1,232 @@ + + + + + Namespace ZeroInstall.Model.Capabilities | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Model.Capabilities

+
+

Extends the feed format with structures for describing application capabilities. This forms the basis for desktop integration.

+
+
+
+ +

+Classes +

+
+
AppRegistration
+

Indicates that an application should be listed in the "Set your Default Programs" UI (Windows Vista and later).

+
+
+
+
AutoPlay
+

An application's ability to handle one or more AutoPlay events.

+
+
+
+
AutoPlayEvent
+

A specific AutoPlay event such as "Audio CD inserted".

+
+
+
+
Capability
+

A capability tells the desktop environment what an application can do and in which fashion this can be represented to the user.

+
+
+
+
CapabilityList
+

Groups a number of application Capabilitys (for a specific operating system) that can be registered in a desktop environment.

+
+
+
+
CapabilityListExtensions
+

Contains extension methods for CapabilityLists.

+
+
+
+
ComServer
+

An application's ability to act as a COM server.

+
+
+
+
ContextMenu
+

An entry in the file manager's context menu for all file types.

+
+
+
+
DefaultCapability
+

Abstract base class for capabilities that can be applied as default handlers for something at the user's request.

+
+
+
+
DefaultProgram
+

Can act as the default provider for a well-known service such web-browser, e-mail client.

+
+
+
+
FileType
+

An application's ability to open a certain file type.

+
+
+
+
FileTypeExtension
+

A specific file extension used to identify a file type.

+
+
+
+
IconCapability
+

Abstract base class for capabilities that can have multiple Icons and descriptions.

+
+
+
+
KnownProtocolPrefix
+

Names a well-known protocol prefix. Used for protocols that are shared across many applications (e.g. HTTP, FTP) but not for application-specific protocols.

+
+
+
+
RemoveHook
+

A hook/callback into the application to be called during 0install remove.

+
+
+
+
UrlProtocol
+

An application's ability to handle a certain URL protocol such as HTTP.

+
+
+
+
Verb
+

The mapping of an action/verb (e.g. open, edit) to a Command.

+
+
+
+
VerbCapability
+

Abstract base class for capabilities that can have multiple Verbs.

+
+
+

+Structs +

+
+
InstallCommands
+

Lists the commands the application normally registers for use by Windows' "Set Program Access and Defaults". +Used by registry virtualization to stand in for the actual Zero Install commands at runtime.

+
+
+

+Enums +

+
+
ContextMenuTarget
+

Describes how important a dependency is (i.e. whether ignoring it is an option).

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Catalog.html b/api/ZeroInstall.Model.Catalog.html new file mode 100644 index 000000000..abe53e82d --- /dev/null +++ b/api/ZeroInstall.Model.Catalog.html @@ -0,0 +1,846 @@ + + + + + Class Catalog | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Catalog +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Contains a list of Feeds, reduced to only contain information relevant for overview lists.

+
+
+ +
+
[Serializable]
+[XmlNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance")]
+[Equatable]
+public class Catalog : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<Catalog>, IEquatable<Catalog>
+
+ + + + +
+
Inheritance
+
+ + +
Catalog
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + +
+ + + + +

Remarks

+ + + +

Fields +

+ + + +

+ SchemaLocation + +

+ +

Provides XML Editors with location hints for XSD files.

+
+
+ +
+
public string SchemaLocation
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ XmlNamespace + +

+ +

The XML namespace used for storing feed catalogs. Used in combination with XmlNamespace.

+
+
+ +
+
public const string XmlNamespace = "http://0install.de/schema/injector/catalog"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ XsdLocation + +

+ +

The URI to retrieve an XSD containing the XML Schema information for this class in serialized form.

+
+
+ +
+
public const string XsdLocation = "https://docs.0install.net/specifications/catalog.xsd"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ XsiSchemaLocation + +

+ +

Provides XML Editors with location hints for XSD files.

+
+
+ +
+
public const string XsiSchemaLocation = "http://0install.de/schema/injector/catalog https://docs.0install.net/specifications/catalog.xsd"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Feeds + +

+ +

A list of Feeds contained within this catalog.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Feed> Feeds { get; }
+
+ + + + + +

Property Value

+
+
List<Feed>
+
+
+ + + + + + + + + + +

+ this[FeedUri] + +

+ +

Returns the Feed with a specific URI.

+
+
+ +
+
public Feed this[FeedUri uri] { get; }
+
+ +

Parameters

+
+
uri FeedUri
+

The Uri to look for.

+
+
+ + + + +

Property Value

+
+
Feed
+

The identified Feed.

+
+
+ + + + + +

Exceptions

+
+
KeyNotFoundException
+

No Feed matching uri was found in Feeds.

+
+
+ + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Catalog instance.

+
+
+ +
+
public Catalog Clone()
+
+ + +

Returns

+
+
Catalog
+

The new copy of the Catalog.

+
+
+ + + + + + + + + + + + + +

+ ContainsFeed(FeedUri) + +

+ +

Determines whether this catalog contains a Feed with a specific URI.

+
+
+ +
+
public bool ContainsFeed(FeedUri uri)
+
+ +

Parameters

+
+
uri FeedUri
+

The Uri to look for.

+
+
+ +

Returns

+
+
bool
+

true if a matching feed was found; false otherwise.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Catalog?) + +

+ +
+
+ +
+
protected bool Equals(Catalog? other)
+
+ +

Parameters

+
+
other Catalog
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ FindByShortName(string?) + +

+ +

Returns the first Feed that matches a specific short name.

+
+
+ +
+
public Feed? FindByShortName(string? shortName)
+
+ +

Parameters

+
+
shortName string
+

The short name to look for. Must match either Name or BinaryName of NameRun.

+
+
+ +

Returns

+
+
Feed
+

The first matching Feed; null if no match was found.

+
+
+ + + + + + + + + + + + + +

+ GetFeed(FeedUri) + +

+ +

Returns the Feed with a specific URI. Safe for missing elements.

+
+
+ +
+
public Feed? GetFeed(FeedUri uri)
+
+ +

Parameters

+
+
uri FeedUri
+

The Uri to look for.

+
+
+ +

Returns

+
+
Feed
+

The identified Feed; null if no matching entry was found.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Normalizes the catalog and all feeds it contains. +Flattens inheritance structures, converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize(FeedUri? catalogUri = null)
+
+ +

Parameters

+
+
catalogUri FeedUri
+

The URI the catalog was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
NotSupportedException
+

The catalog requires a newer version of Zero Install.

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ Search(string?) + +

+ +

Returns all Feeds that match a specific search query.

+
+
+ +
+
public IEnumerable<Feed> Search(string? query)
+
+ +

Parameters

+
+
query string
+

The search query. Must be contained within Name or BinaryName of NameRun.

+
+
+ +

Returns

+
+
IEnumerable<Feed>
+

All Feeds matching query.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Catalog?, Catalog?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Catalog? left, Catalog? right)
+
+ +

Parameters

+
+
left Catalog
+

The left object

+
+
right Catalog
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Catalog?, Catalog?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Catalog? left, Catalog? right)
+
+ +

Parameters

+
+
left Catalog
+

The left object

+
+
right Catalog
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Category.html b/api/ZeroInstall.Model.Category.html new file mode 100644 index 000000000..e335dfcd5 --- /dev/null +++ b/api/ZeroInstall.Model.Category.html @@ -0,0 +1,562 @@ + + + + + Class Category | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Category +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An application category (e.g. Game or Office). Used for organizing application menus.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class Category : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Category>, IEquatable<Category>
+
+ + + + +
+
Inheritance
+
+ + + +
Category
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ WellKnownNames + +

+ +

Well-known values for Name if TypeNamespace is empty.

+
+
+ +
+
public static readonly string[] WellKnownNames
+
+ + + + +

Field Value

+
+
string[]
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Name + +

+ +

The category name as specified by the TypeNamespace.

+
+
+ +
+
[TypeConverter(typeof(CategoryNameConverter))]
+public string? Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ TypeNamespace + +

+ +

If no type is given, then the category is one of the 'Main' categories defined by the freedesktop.org menu specification (http://standards.freedesktop.org/menu-spec/latest/apa.html). Otherwise, it is a URI giving the namespace for the category.

+
+
+ +
+
public string? TypeNamespace { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a plain copy of this category.

+
+
+ +
+
public Category Clone()
+
+ + +

Returns

+
+
Category
+

The cloned category.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns Name directly. Safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Category?, Category?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Category? left, Category? right)
+
+ +

Parameters

+
+
left Category
+

The left object

+
+
right Category
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ implicit operator Category(string) + +

+ +

Convenience cast for turning strings into Categorys.

+
+
+ +
+
public static implicit operator Category(string value)
+
+ +

Parameters

+
+
value string
+
+
+ +

Returns

+
+
Category
+
+
+ + + + + + + + + + + + + +

+ operator !=(Category?, Category?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Category? left, Category? right)
+
+ +

Parameters

+
+
left Category
+

The left object

+
+
right Category
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Command.html b/api/ZeroInstall.Model.Command.html new file mode 100644 index 000000000..126c693a6 --- /dev/null +++ b/api/ZeroInstall.Model.Command.html @@ -0,0 +1,921 @@ + + + + + Class Command | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Command +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A command says how to run an Implementation as a program.

+
+
+ +
+
[Serializable]
+[Equatable]
+public class Command : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IArgBaseContainer, IBindingContainer, IDependencyContainer, ICloneable<Command>, IEquatable<Command>
+
+ + + + +
+
Inheritance
+
+ + + +
Command
+
+
+ +
+
Implements
+
+ + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Fields +

+ + + +

+ NameCompile + +

+ +

Canonical Name used by 0compile.

+
+
+ +
+
public const string NameCompile = "compile"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NameRun + +

+ +

Canonical Name corresponding to Main.

+
+
+ +
+
public const string NameRun = "run"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NameRunGui + +

+ +

Conventional Name for GUI-only versions of applications.

+
+
+ +
+
public const string NameRunGui = "run-gui"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ NameTest + +

+ +

Canonical Name corresponding to SelfTest.

+
+
+ +
+
public const string NameTest = "test"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Arguments + +

+ +

A list of command-line arguments to be passed to an implementation executable.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<ArgBase> Arguments { get; }
+
+ + + + + +

Property Value

+
+
List<ArgBase>
+
+
+ + + + + + + + + + +

+ Bindings + +

+ +

A list of Bindings for Implementations to locate Dependencys.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Binding> Bindings { get; }
+
+ + + + + +

Property Value

+
+
List<Binding>
+
+
+ + + + + + + + + + +

+ Dependencies + +

+ +

A list of interfaces this command depends upon.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Dependency> Dependencies { get; }
+
+ + + + + +

Property Value

+
+
List<Dependency>
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The name of the command. Well-known names are NameRun, NameTest and NameCompile.

+
+
+ +
+
[TypeConverter(typeof(CommandNameConverter))]
+public required string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Path + +

+ +

The relative path of an executable inside the implementation that should be executed to run this command.

+
+
+ +
+
public string? Path { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Restrictions + +

+ +

A list of interfaces that are restricted to specific versions when used.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Restriction> Restrictions { get; }
+
+ + + + + +

Property Value

+
+
List<Restriction>
+
+
+ + + + + + + + + + +

+ Runner + +

+ +

A special kind of dependency: the program that is used to run this one. For example, a Python program might specify Python as its runner.

+
+
+ +
+
[Browsable(false)]
+public Runner? Runner { get; set; }
+
+ + + + + +

Property Value

+
+
Runner
+
+
+ + + + + + + + + + +

+ WorkingDir + +

+ +

Switches the working directory of a process on startup to a location within an implementation.

+
+
+ +
+
[Browsable(false)]
+public WorkingDir? WorkingDir { get; set; }
+
+ + + + + +

Property Value

+
+
WorkingDir
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Command instance.

+
+
+ +
+
public Command Clone()
+
+ + +

Returns

+
+
Command
+

The new copy of the Command.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Command?) + +

+ +
+
+ +
+
protected bool Equals(Command? other)
+
+ +

Parameters

+
+
other Command
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public virtual void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the Command in the form "Name (Path)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Command?, Command?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Command? left, Command? right)
+
+ +

Parameters

+
+
left Command
+

The left object

+
+
right Command
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Command?, Command?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Command? left, Command? right)
+
+ +

Parameters

+
+
left Command
+

The left object

+
+
right Command
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+
+ +
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Constraint.html b/api/ZeroInstall.Model.Constraint.html new file mode 100644 index 000000000..721fd7f4d --- /dev/null +++ b/api/ZeroInstall.Model.Constraint.html @@ -0,0 +1,543 @@ + + + + + Class Constraint | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Constraint +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Restricts the set of versions from which the injector may choose an Implementation.

+
+
+ +
+
[Serializable]
+[Equatable]
+public class Constraint : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Constraint>, IEquatable<Constraint>
+
+ + + + +
+
Inheritance
+
+ + + +
Constraint
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Before + +

+ +

This version and all later versions are unsuitable.

+
+
+ +
+
public ImplementationVersion? Before { get; set; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + + + +

+ NotBefore + +

+ +

This is the lowest-numbered version that can be chosen.

+
+
+ +
+
public ImplementationVersion? NotBefore { get; set; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a copy of this Constraint instance.

+
+
+ +
+
public Constraint Clone()
+
+ + +

Returns

+
+
Constraint
+

The new copy of the Constraint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Constraint?) + +

+ +
+
+ +
+
protected bool Equals(Constraint? other)
+
+ +

Parameters

+
+
other Constraint
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the constraint in the form "NotBefore =< Ver %lt; Before". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Constraint?, Constraint?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Constraint? left, Constraint? right)
+
+ +

Parameters

+
+
left Constraint
+

The left object

+
+
right Constraint
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Constraint?, Constraint?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Constraint? left, Constraint? right)
+
+ +

Parameters

+
+
left Constraint
+

The left object

+
+
right Constraint
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.CopyFromStep.html b/api/ZeroInstall.Model.CopyFromStep.html new file mode 100644 index 000000000..817b0e08d --- /dev/null +++ b/api/ZeroInstall.Model.CopyFromStep.html @@ -0,0 +1,594 @@ + + + + + Class CopyFromStep | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CopyFromStep +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Copies files or directories from another implementation specified elsewhere in the same feed.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class CopyFromStep : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IRecipeStep, ICloneable<IRecipeStep>, IEquatable<CopyFromStep>
+
+ + + + +
+
Inheritance
+
+ + + +
CopyFromStep
+
+
+ +
+
Implements
+
+ + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Destination + +

+ +

The destination file or directory relative to the implementation root as a Unix-style path; null for top-level. Must be set if Source points to a file.

+
+
+ +
+
public string? Destination { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ID + +

+ +

The ID of the Implementation to copy from.

+
+
+ +
+
public string? ID { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Implementation + +

+ +

Used to hold the Implementation the ID references after Normalize(FeedUri?) has been executed.

+
+
+ +
+
[Browsable(false)]
+public Implementation? Implementation { get; set; }
+
+ + + + + +

Property Value

+
+
Implementation
+
+
+ + + + + + + + + + +

+ Source + +

+ +

The source file or directory relative to the source implementation root as a Unix-style path; null or Empty for entire implementation.

+
+
+ +
+
public string? Source { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this CopyFromStep instance.

+
+
+ +
+
public IRecipeStep Clone()
+
+ + +

Returns

+
+
IRecipeStep
+

The new copy of the CopyFromStep.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
UriFormatException
+

Href is relative and feedUri is a remote URI.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the copy-from step in the form "Copy from ID (Source => Destination)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(CopyFromStep?, CopyFromStep?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(CopyFromStep? left, CopyFromStep? right)
+
+ +

Parameters

+
+
left CopyFromStep
+

The left object

+
+
right CopyFromStep
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(CopyFromStep?, CopyFromStep?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(CopyFromStep? left, CopyFromStep? right)
+
+ +

Parameters

+
+
left CopyFromStep
+

The left object

+
+
right CopyFromStep
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Cpu.html b/api/ZeroInstall.Model.Cpu.html new file mode 100644 index 000000000..0a8d362ad --- /dev/null +++ b/api/ZeroInstall.Model.Cpu.html @@ -0,0 +1,201 @@ + + + + + Enum Cpu | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum Cpu +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Describes a CPU architecture.

+
+
+ +
+
[TypeConverter(typeof(EnumXmlConverter<Cpu>))]
+public enum Cpu
+
+ + + + + + + + +
+
Extension Methods
+
+ + + +
+ +

Fields +

+
+
AArch64 = 10
+

Supports ARMv8 CPUs in 64-bit mode.

+
+
All = 0
+

Supports all CPU architectures (e.g. developed with cross-platform language like Java).

+
+
ArmV6L = 8
+

Supports ARMv6 CPUs in little-endian mode.

+
+
ArmV7L = 9
+

Supports ARMv7 CPUs in little-endian mode.

+
+
I386 = 1
+

Supports CPUs with the i386 architecture or newer (up to i686).

+
+
I486 = 2
+

Supports CPUs with the i486 architecture or newer (up to i686).

+
+
I586 = 3
+

Supports CPUs with the i586 architecture or newer (up to i686).

+
+
I686 = 4
+

Supports CPUs with the i686.

+
+
Ppc = 6
+

Supports CPUs with the PowerPC-architecture (used in older Macs).

+
+
Ppc64 = 7
+

Requires a 64-bit capable PowerPC CPU.

+
+
Source = 99
+

This is a source release and therefore architecture-independent.

+
+
Unknown = 100
+

The supported CPU architecture has not been set yet.

+
+
X64 = 5
+

Requires a x86-64 capable CPU.

+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Dependency.html b/api/ZeroInstall.Model.Dependency.html new file mode 100644 index 000000000..8a1de1831 --- /dev/null +++ b/api/ZeroInstall.Model.Dependency.html @@ -0,0 +1,714 @@ + + + + + Class Dependency | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Dependency +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A reference to an interface that is required as dependency.

+
+
+ +
+
[Serializable]
+[Equatable]
+public class Dependency : Restriction, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Restriction>, IEquatable<Restriction>, IInterfaceUriBindingContainer, IInterfaceUri, IBindingContainer, ICloneable<Dependency>, IEquatable<Dependency>
+
+ + + + +
+
Inheritance
+
+ + + + +
Dependency
+
+
+ +
+
Implements
+
+ + + + + + + + + +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Bindings + +

+ +

A list of Bindings for Implementations to locate Dependencys.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Binding> Bindings { get; }
+
+ + + + + +

Property Value

+
+
List<Binding>
+
+
+ + + + + + + + + + +

+ Importance + +

+ +

Controls how important this dependency is (i.e. whether ignoring it is an option).

+
+
+ +
+
public Importance Importance { get; set; }
+
+ + + + + +

Property Value

+
+
Importance
+
+
+ + + + + + + + + + +

+ Use + +

+ +

This can be used to indicate that this dependency is only needed in some cases. Deprecated; use Commands instead.

+
+
+ +
+
public string? Use { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ XmlTagName + +

+ +
+
+ +
+
protected override string XmlTagName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Dependency instance.

+
+
+ +
+
public override Restriction Clone()
+
+ + +

Returns

+
+
Restriction
+

The new copy of the Dependency.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Dependency?) + +

+ +
+
+ +
+
protected bool Equals(Dependency? other)
+
+ +

Parameters

+
+
other Dependency
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ IsApplicable(Requirements) + +

+ +

Determines whether this reference is applicable for the given requirements.

+
+
+ +
+
public override bool IsApplicable(Requirements requirements)
+
+ +

Parameters

+
+
requirements Requirements
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Flattens inheritance structures, Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the dependency in the form "Interface (Use)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Dependency?, Dependency?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Dependency? left, Dependency? right)
+
+ +

Parameters

+
+
left Dependency
+

The left object

+
+
right Dependency
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Dependency?, Dependency?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Dependency? left, Dependency? right)
+
+ +

Parameters

+
+
left Dependency
+

The left object

+
+
right Dependency
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.DependencyContainerExtensions.html b/api/ZeroInstall.Model.DependencyContainerExtensions.html new file mode 100644 index 000000000..893d12edc --- /dev/null +++ b/api/ZeroInstall.Model.DependencyContainerExtensions.html @@ -0,0 +1,218 @@ + + + + + Class DependencyContainerExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DependencyContainerExtensions +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Provides extension methods for IDependencyContainer.

+
+
+ +
+
public static class DependencyContainerExtensions
+
+ + + + +
+
Inheritance
+
+ +
DependencyContainerExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ GetEffectiveRestrictions(IDependencyContainer) + +

+ +

A combination of Restrictions and Dependencies.

+
+
+ +
+
public static IEnumerable<Restriction> GetEffectiveRestrictions(this IDependencyContainer container)
+
+ +

Parameters

+
+
container IDependencyContainer
+
+
+ +

Returns

+
+
IEnumerable<Restriction>
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Design.ArgBaseConverter.html b/api/ZeroInstall.Model.Design.ArgBaseConverter.html new file mode 100644 index 000000000..ee12dd101 --- /dev/null +++ b/api/ZeroInstall.Model.Design.ArgBaseConverter.html @@ -0,0 +1,437 @@ + + + + + Class ArgBaseConverter | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ArgBaseConverter +

+ +
+
Namespace
ZeroInstall.Model.Design
+
Assembly
ZeroInstall.Model.dll
+
+ +

Converts strings to Args and Args/ForEachArgs to strings.

+
+
+ +
+
public class ArgBaseConverter : TypeConverter
+
+ + + + +
+
Inheritance
+
+ + +
ArgBaseConverter
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ CanConvertFrom(ITypeDescriptorContext?, Type) + +

+ +

Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context.

+
+
+ +
+
public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType)
+
+ +

Parameters

+
+
context ITypeDescriptorContext
+

An ITypeDescriptorContext that provides a format context.

+
+
sourceType Type
+

A Type that represents the type you want to convert from.

+
+
+ +

Returns

+
+
bool
+

true if this converter can perform the conversion; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ ConvertFrom(ITypeDescriptorContext?, CultureInfo?, object) + +

+ +

Converts the given object to the type of this converter, using the specified context and culture information.

+
+
+ +
+
public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value)
+
+ +

Parameters

+
+
context ITypeDescriptorContext
+

An ITypeDescriptorContext that provides a format context.

+
+
culture CultureInfo
+

The CultureInfo to use as the current culture.

+
+
value object
+

The object to convert.

+
+
+ +

Returns

+
+
object
+

An object that represents the converted value.

+
+
+ + + + + + + + +

Exceptions

+
+
NotSupportedException
+

The conversion cannot be performed.

+
+
+ + + + + +

+ ConvertTo(ITypeDescriptorContext?, CultureInfo?, object?, Type) + +

+ +

Converts the given value object to the specified type, using the specified context and culture information.

+
+
+ +
+
public override object? ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value, Type destinationType)
+
+ +

Parameters

+
+
context ITypeDescriptorContext
+

An ITypeDescriptorContext that provides a format context.

+
+
culture CultureInfo
+

A CultureInfo. If null is passed, the current culture is assumed.

+
+
value object
+

The object to convert.

+
+
destinationType Type
+

The Type to convert the value parameter to.

+
+
+ +

Returns

+
+
object
+

An object that represents the converted value.

+
+
+ + + + + + + + +

Exceptions

+
+
ArgumentNullException
+

The destinationType parameter is null.

+
+
NotSupportedException
+

The conversion cannot be performed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Design.CategoryNameConverter.html b/api/ZeroInstall.Model.Design.CategoryNameConverter.html new file mode 100644 index 000000000..6c7d000cf --- /dev/null +++ b/api/ZeroInstall.Model.Design.CategoryNameConverter.html @@ -0,0 +1,404 @@ + + + + + Class CategoryNameConverter | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CategoryNameConverter +

+ +
+
Namespace
ZeroInstall.Model.Design
+
Assembly
ZeroInstall.Model.dll
+
+ +
+
+ +
+
public class CategoryNameConverter : StringConverter
+
+ + + + +
+
Inheritance
+
+ + + +
CategoryNameConverter
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ GetStandardValues(ITypeDescriptorContext?) + +

+ +

Returns a collection of standard values for the data type this type converter is designed for when provided with a format context.

+
+
+ +
+
public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext? context)
+
+ +

Parameters

+
+
context ITypeDescriptorContext
+

An ITypeDescriptorContext that provides a format context that can be used to extract additional information about the environment from which this converter is invoked. This parameter or properties of this parameter can be null.

+
+
+ +

Returns

+
+
TypeConverter.StandardValuesCollection
+

A TypeConverter.StandardValuesCollection that holds a standard set of valid values, or null if the data type does not support a standard set of values.

+
+
+ + + + + + + + + + + + + +

+ GetStandardValuesExclusive(ITypeDescriptorContext?) + +

+ +

Returns whether the collection of standard values returned from GetStandardValues() is an exclusive list of possible values, using the specified context.

+
+
+ +
+
public override bool GetStandardValuesExclusive(ITypeDescriptorContext? context)
+
+ +

Parameters

+
+
context ITypeDescriptorContext
+

An ITypeDescriptorContext that provides a format context.

+
+
+ +

Returns

+
+
bool
+

true if the TypeConverter.StandardValuesCollection returned from GetStandardValues() is an exhaustive list of possible values; false if other values are possible.

+
+
+ + + + + + + + + + + + + +

+ GetStandardValuesSupported(ITypeDescriptorContext?) + +

+ +

Returns whether this object supports a standard set of values that can be picked from a list, using the specified context.

+
+
+ +
+
public override bool GetStandardValuesSupported(ITypeDescriptorContext? context)
+
+ +

Parameters

+
+
context ITypeDescriptorContext
+

An ITypeDescriptorContext that provides a format context.

+
+
+ +

Returns

+
+
bool
+

true if GetStandardValues() should be called to find a common set of values the object supports; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Design.html b/api/ZeroInstall.Model.Design.html new file mode 100644 index 000000000..99ee698f7 --- /dev/null +++ b/api/ZeroInstall.Model.Design.html @@ -0,0 +1,134 @@ + + + + + Namespace ZeroInstall.Model.Design | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ + + + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.DownloadRetrievalMethod.html b/api/ZeroInstall.Model.DownloadRetrievalMethod.html new file mode 100644 index 000000000..ee579f3af --- /dev/null +++ b/api/ZeroInstall.Model.DownloadRetrievalMethod.html @@ -0,0 +1,569 @@ + + + + + Class DownloadRetrievalMethod | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DownloadRetrievalMethod +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Represents a retrieval method that downloads data from the net.

+
+
+ +
+
[Equatable]
+public abstract class DownloadRetrievalMethod : RetrievalMethod, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<RetrievalMethod>, IRecipeStep, ICloneable<IRecipeStep>, IEquatable<DownloadRetrievalMethod>
+
+ + + + +
+
Inheritance
+
+ + + + +
DownloadRetrievalMethod
+
+
+ +
+
Implements
+
+ + + + + + +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ DownloadSize + +

+ +

The effective size of the file on the server.

+
+
+ +
+
[Browsable(false)]
+public virtual long DownloadSize { get; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + + + + + + + +

+ Href + +

+ +

The URL to download the file from. Relative URLs are only allowed in local feed files.

+
+
+ +
+
[Browsable(false)]
+public required Uri Href { get; set; }
+
+ + + + + +

Property Value

+
+
Uri
+
+
+ + + + + + + + + + +

+ Size + +

+ +

The size of the file in bytes. The file must have the given size or it will be rejected.

+
+
+ +
+
public long Size { get; set; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(DownloadRetrievalMethod?) + +

+ +
+
+ +
+
protected bool Equals(DownloadRetrievalMethod? other)
+
+ +

Parameters

+
+
other DownloadRetrievalMethod
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Sets missing default values and handles legacy elements.

+
+
+ +
+
public override void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
UriFormatException
+

Href is relative and feedUri is a remote URI.

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(DownloadRetrievalMethod?, DownloadRetrievalMethod?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(DownloadRetrievalMethod? left, DownloadRetrievalMethod? right)
+
+ +

Parameters

+
+
left DownloadRetrievalMethod
+

The left object

+
+
right DownloadRetrievalMethod
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(DownloadRetrievalMethod?, DownloadRetrievalMethod?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(DownloadRetrievalMethod? left, DownloadRetrievalMethod? right)
+
+ +

Parameters

+
+
left DownloadRetrievalMethod
+

The left object

+
+
right DownloadRetrievalMethod
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Element.html b/api/ZeroInstall.Model.Element.html new file mode 100644 index 000000000..ea244800e --- /dev/null +++ b/api/ZeroInstall.Model.Element.html @@ -0,0 +1,1259 @@ + + + + + Class Element | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Element +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Abstract base class for ImplementationBase and Group. +Contains those parameters that can be transferred from a Group to an Implementation.

+
+
+ +
+
[Equatable]
+public abstract class Element : TargetBase, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IEquatable<TargetBase>, IBindingContainer, IDependencyContainer, ICloneable<Element>, IEquatable<Element>
+
+ + + + +
+
Inheritance
+
+ + + + +
Element
+
+
+ +
+
Implements
+
+ + + + + + + +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Fields +

+ + + +

+ ReleaseDateFormat + +

+ + +
+ +
+
public const string ReleaseDateFormat = "yyyy-MM-dd"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ ReleasedVerbatim + +

+ +

Used to store the unparsed release date string (instead of Released) if it ContainsTemplateVariables(string).

+
+
+ +
+
protected string? ReleasedVerbatim
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Bindings + +

+ +

A list of Bindings for Implementations to locate Dependencys.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Binding> Bindings { get; }
+
+ + + + + +

Property Value

+
+
List<Binding>
+
+
+ + + + + + + + + + +

+ Commands + +

+ +

A list of commands that can be used to launch this implementation.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Command> Commands { get; }
+
+ + + + + +

Property Value

+
+
List<Command>
+
+
+ + + + +

Remarks

+

This will eventually replace Main and SelfTest.

+
+ + + + + + +

+ Dependencies + +

+ +

A list of interfaces this implementation depends upon.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Dependency> Dependencies { get; }
+
+ + + + + +

Property Value

+
+
List<Dependency>
+
+
+ + + + + + + + + + +

+ DocDir + +

+ +

The relative path of a directory inside the implementation that contains the package's documentation. This is the directory that would end up inside /usr/share/doc on a traditional Linux system.

+
+
+ +
+
public string? DocDir { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ this[string] + +

+ +

Returns the Command with a specific name.

+
+
+ +
+
public Command? this[string name] { get; }
+
+ +

Parameters

+
+
name string
+

The Name to look for; Empty for none.

+
+
+ + + + +

Property Value

+
+
Command
+

The first matching command; null if name is Empty.

+
+
+ + + + +

Remarks

+

Should only be called after Normalize(FeedUri?) has been called, otherwise nested Implementations will not be considered.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

No matching Command was found.

+
+
+ + + + + +

+ License + +

+ +

License terms (typically a Trove category, as used on freshmeat.net).

+
+
+ +
+
[TypeConverter(typeof(LicenseNameConverter))]
+public string? License { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Main + +

+ +

The relative path of an executable inside the implementation that should be executed by default when the interface is run. If an implementation has no main setting, then it cannot be executed without specifying one manually. This typically means that the interface is for a library.

+
+
+ +
+
public string? Main { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + +

Remarks

+

This is deprecated in favor of Commands. +null corresponds to no Commands. +An empty string corresponds to a Command with no Path.

+
+ + + + + + +

+ Released + +

+ +

The date this implementation was made available. For development versions checked out from version control this attribute should not be present.

+
+
+ +
+
public virtual DateTime Released { get; set; }
+
+ + + + + +

Property Value

+
+
DateTime
+
+
+ + + + + + + + + + +

+ ReleasedString + +

+ +

The string form of Released. Only use this if the string ContainsTemplateVariables(string).

+
+
+ +
+
public virtual string? ReleasedString { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + +
+
See Also
+
+ +
+
+ + + + +

+ Restrictions + +

+ +

A list of interfaces that are restricted to specific versions when used.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Restriction> Restrictions { get; }
+
+ + + + + +

Property Value

+
+
List<Restriction>
+
+
+ + + + + + + + + + +

+ RolloutPercentage + +

+ +

The percentage (0-100) of users that should treat this as Stable. May only be set if Stability is Unset or Testing. +This can be used to perform staged rollouts.

+
+
+ +
+
public virtual int RolloutPercentage { get; set; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ SelfTest + +

+ +

The relative path of an executable inside the implementation that can be executed to test the program. The program must be non-interactive (e.g. it can't open any windows or prompt for input). It should return with an exit status of 0 if the tests pass. Any other status indicates failure.

+
+
+ +
+
public string? SelfTest { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + +

Remarks

+

This is deprecated in favor of Commands. +null corresponds to no Commands. +An empty string corresponds to a Command with no Path.

+
+ + + + + + +

+ Stability + +

+ +

The default stability rating for this implementation.

+
+
+ +
+
public virtual Stability Stability { get; set; }
+
+ + + + + +

Property Value

+
+
Stability
+
+
+ + + + + + + + + + +

+ Version + +

+ +

The version number of the implementation.

+
+
+ +
+
public virtual ImplementationVersion? Version { get; set; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + + + +

+ VersionModifier + +

+ +

A string to be appended to the version. The purpose of this is to allow complex version numbers (such as "1.0-rc2") in older versions of the injector.

+
+
+ +
+
public virtual string? VersionModifier { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Element instance.

+
+
+ +
+
public abstract Element Clone()
+
+ + +

Returns

+
+
Element
+

The new copy of the Element.

+
+
+ + + + + + + + + + + + + +

+ CloneFromTo(Element, Element) + +

+ +

Copies all known values from one instance to another. Helper method for instance cloning.

+
+
+ +
+
protected static void CloneFromTo(Element from, Element to)
+
+ +

Parameters

+
+
from Element
+
+
to Element
+
+
+ + + + + + + + + + + + + + +

+ ContainsCommand(string) + +

+ +

Determines whether Commands contains a Command with a specific name.

+
+
+ +
+
public bool ContainsCommand(string name)
+
+ +

Parameters

+
+
name string
+

The Name to look for; Empty for none.

+
+
+ +

Returns

+
+
bool
+

true if a matching command was found or if name is Empty; false otherwise.

+
+
+ + + + + + + + + + + + + +

+ EnsureAttributes() + +

+ +

Ensures that required values deserialized from XML attributes are set (not null).

+
+
+ +
+
protected virtual void EnsureAttributes()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Element?) + +

+ +
+
+ +
+
protected bool Equals(Element? other)
+
+ +

Parameters

+
+
other Element
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetCommand(string) + +

+ +

Returns the Command with a specific name. Safe for missing elements.

+
+
+ +
+
public Command? GetCommand(string name)
+
+ +

Parameters

+
+
name string
+

The Name to look for.

+
+
+ +

Returns

+
+
Command
+

The first matching command; null if no matching one was found.

+
+
+ + + + + + + +

Remarks

+

Should only be called after Normalize(FeedUri?) has been called, otherwise nested Implementations will not be considered.

+
+ + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Flattens inheritance structures, Converts legacy elements, sets default values, etc..

+
+
+ +
+
public virtual void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(Element?, Element?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Element? left, Element? right)
+
+ +

Parameters

+
+
left Element
+

The left object

+
+
right Element
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Element?, Element?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Element? left, Element? right)
+
+ +

Parameters

+
+
left Element
+

The left object

+
+
right Element
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ElementCollectionExtensions.html b/api/ZeroInstall.Model.ElementCollectionExtensions.html new file mode 100644 index 000000000..e684927e7 --- /dev/null +++ b/api/ZeroInstall.Model.ElementCollectionExtensions.html @@ -0,0 +1,258 @@ + + + + + Class ElementCollectionExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ElementCollectionExtensions +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Provides extension methods for Element collections.

+
+
+ +
+
public static class ElementCollectionExtensions
+
+ + + + +
+
Inheritance
+
+ +
ElementCollectionExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ GetImplementations(IReadOnlyCollection<Element>) + +

+ +

Returns a flat list of all Implementations.

+
+
+ +
+
public static IEnumerable<Implementation> GetImplementations(this IReadOnlyCollection<Element> elements)
+
+ +

Parameters

+
+
elements IReadOnlyCollection<Element>
+
+
+ +

Returns

+
+
IEnumerable<Implementation>
+
+
+ + + + + + + + + + + + + +

+ RemoveImplementation(ICollection<Element>, string) + +

+ +

Removes an Implementation identified by its ID.

+
+
+ +
+
public static bool RemoveImplementation(this ICollection<Element> elements, string id)
+
+ +

Parameters

+
+
elements ICollection<Element>
+
+
id string
+
+
+ +

Returns

+
+
bool
+

true if the implementation was removed; false if the implementation could not be found.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.EntryPoint.html b/api/ZeroInstall.Model.EntryPoint.html new file mode 100644 index 000000000..26a3a5229 --- /dev/null +++ b/api/ZeroInstall.Model.EntryPoint.html @@ -0,0 +1,798 @@ + + + + + Class EntryPoint | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class EntryPoint +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Associates a Command with a user-friendly name and description.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class EntryPoint : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IIconContainer, ISummaryContainer, IDescriptionContainer, ICloneable<EntryPoint>, IEquatable<EntryPoint>
+
+ + + + +
+
Inheritance
+
+ + + +
EntryPoint
+
+
+ +
+
Implements
+
+ + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ AppId + +

+ +

The Application User Model ID; used by Windows to associate shortcuts and pinned taskbar entries with running processes. +May not be longer than 128 characters and may not contain whitespace.

+
+
+ +
+
public string? AppId { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ BinaryName + +

+ +

The canonical name of the binary supplying the command (without file extensions). This is used to suggest suitable alias names.

+
+
+ +
+
public string? BinaryName { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + +

Remarks

+

Will default to Command when left null.

+
+ + + + + + +

+ Command + +

+ +

The name of the Command this entry point represents.

+
+
+ +
+
[TypeConverter(typeof(CommandNameConverter))]
+public required string Command { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Descriptions + +

+ +

Full descriptions for different languages, which can be several paragraphs long.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public LocalizableStringCollection Descriptions { get; }
+
+ + + + + +

Property Value

+
+
LocalizableStringCollection
+
+
+ + + + + + + + + + +

+ Icons + +

+ +

Zero or more icons representing the command. Used for desktop icons, menu entries, etc..

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Icon> Icons { get; }
+
+ + + + + +

Property Value

+
+
List<Icon>
+
+
+ + + + + + + + + + +

+ Names + +

+ +

User-friendly names for the command. If not present, Command is used instead.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public LocalizableStringCollection Names { get; }
+
+ + + + + +

Property Value

+
+
LocalizableStringCollection
+
+
+ + + + + + + + + + +

+ NeedsTerminal + +

+ +

If true, indicates that the Command represented by this entry point requires a terminal in order to run.

+
+
+ +
+
public bool NeedsTerminal { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ SuggestAutoStart + +

+ +

If true, indicates that this entry point should be offered as an auto-start candidate to the user.

+
+
+ +
+
public bool SuggestAutoStart { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ SuggestSendTo + +

+ +

If true, indicates that this entry point should be offered as a candidate for the "Send To" context menu to the user.

+
+
+ +
+
public bool SuggestSendTo { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Summaries + +

+ +

Short one-line descriptions for different languages; the first word should not be upper-case unless it is a proper noun (e.g. "cures all ills").

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public LocalizableStringCollection Summaries { get; }
+
+ + + + + +

Property Value

+
+
LocalizableStringCollection
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this EntryPoint instance.

+
+
+ +
+
public EntryPoint Clone()
+
+ + +

Returns

+
+
EntryPoint
+

The new copy of the EntryPoint.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the EntryPoint in the form "Command (BinaryName)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(EntryPoint?, EntryPoint?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(EntryPoint? left, EntryPoint? right)
+
+ +

Parameters

+
+
left EntryPoint
+

The left object

+
+
right EntryPoint
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(EntryPoint?, EntryPoint?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(EntryPoint? left, EntryPoint? right)
+
+ +

Parameters

+
+
left EntryPoint
+

The left object

+
+
right EntryPoint
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.EnvironmentBinding.html b/api/ZeroInstall.Model.EnvironmentBinding.html new file mode 100644 index 000000000..53ec9b05e --- /dev/null +++ b/api/ZeroInstall.Model.EnvironmentBinding.html @@ -0,0 +1,657 @@ + + + + + Class EnvironmentBinding | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class EnvironmentBinding +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Make a chosen Implementation available by setting environment variables.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class EnvironmentBinding : Binding, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Binding>, IEquatable<EnvironmentBinding>
+
+ + + + +
+
Inheritance
+
+ + + + +
EnvironmentBinding
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Default + +

+ +

If the environment variable is not currently set then this value is used for prepending or appending.

+
+
+ +
+
public string? Default { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Insert + +

+ +

The relative path of the item within the implementation to insert into the variable value. Use . to publish the root directory.

+
+
+ +
+
public string? Insert { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + +

Remarks

+

If this is set Value must be null.

+
+ + + + + + +

+ Mode + +

+ +

Controls how the Insert or Value is added to the variable.

+
+
+ +
+
public EnvironmentMode Mode { get; set; }
+
+ + + + + +

Property Value

+
+
EnvironmentMode
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The name of the environment variable.

+
+
+ +
+
public required string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Separator + +

+ +

Overrides the default separator character (":" on POSIX and ";" on Windows).

+
+
+ +
+
public string? Separator { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Value + +

+ +

A static value to set the variable to.

+
+
+ +
+
public string? Value { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + +

Remarks

+

If this is set Insert must be null.

+
+ + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this EnvironmentBinding instance.

+
+
+ +
+
public override Binding Clone()
+
+ + +

Returns

+
+
Binding
+

The new copy of the EnvironmentBinding.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the binding in the form "Name = Value (Mode, Default)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(EnvironmentBinding?, EnvironmentBinding?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(EnvironmentBinding? left, EnvironmentBinding? right)
+
+ +

Parameters

+
+
left EnvironmentBinding
+

The left object

+
+
right EnvironmentBinding
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(EnvironmentBinding?, EnvironmentBinding?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(EnvironmentBinding? left, EnvironmentBinding? right)
+
+ +

Parameters

+
+
left EnvironmentBinding
+

The left object

+
+
right EnvironmentBinding
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.EnvironmentMode.html b/api/ZeroInstall.Model.EnvironmentMode.html new file mode 100644 index 000000000..00c92953c --- /dev/null +++ b/api/ZeroInstall.Model.EnvironmentMode.html @@ -0,0 +1,157 @@ + + + + + Enum EnvironmentMode | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum EnvironmentMode +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Controls how Insert or Value is added to a variable.

+
+
+ +
+
public enum EnvironmentMode
+
+ + + + + + + + + +

Fields +

+
+
Append = 1
+

The absolute path of the item is append to the end of the current value of the variable.

+
+
Prepend = 0
+

The absolute path of the item is prepended to the current value of the variable.

+
+
Replace = 2
+

The old value is overwritten, and the Default attribute is ignored.

+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ExecutableInBinding.html b/api/ZeroInstall.Model.ExecutableInBinding.html new file mode 100644 index 000000000..d81929ab8 --- /dev/null +++ b/api/ZeroInstall.Model.ExecutableInBinding.html @@ -0,0 +1,464 @@ + + + + + Class ExecutableInBinding | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ExecutableInBinding +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Make a chosen Implementation available as an executable at runtime.

+
+
+ +
+
[Equatable]
+public abstract class ExecutableInBinding : Binding, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Binding>, IEquatable<ExecutableInBinding>
+
+ + + + +
+
Inheritance
+
+ + + + +
ExecutableInBinding
+
+
+ +
+
Implements
+
+ + + + +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Command + +

+ +

The name of the Command in the Implementation to launch; leave null for NameRun.

+
+
+ +
+
[TypeConverter(typeof(CommandNameConverter))]
+public string? Command { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(ExecutableInBinding?) + +

+ +
+
+ +
+
protected bool Equals(ExecutableInBinding? other)
+
+ +

Parameters

+
+
other ExecutableInBinding
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ExecutableInBinding?, ExecutableInBinding?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ExecutableInBinding? left, ExecutableInBinding? right)
+
+ +

Parameters

+
+
left ExecutableInBinding
+

The left object

+
+
right ExecutableInBinding
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ExecutableInBinding?, ExecutableInBinding?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ExecutableInBinding? left, ExecutableInBinding? right)
+
+ +

Parameters

+
+
left ExecutableInBinding
+

The left object

+
+
right ExecutableInBinding
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ExecutableInPath.html b/api/ZeroInstall.Model.ExecutableInPath.html new file mode 100644 index 000000000..903d49a90 --- /dev/null +++ b/api/ZeroInstall.Model.ExecutableInPath.html @@ -0,0 +1,496 @@ + + + + + Class ExecutableInPath | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ExecutableInPath +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Make a chosen Implementation available as an executable in the search PATH.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class ExecutableInPath : ExecutableInBinding, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Binding>, IEquatable<ExecutableInBinding>, IEquatable<ExecutableInPath>
+
+ + + + +
+
Inheritance
+
+ + + + + +
ExecutableInPath
+
+
+ +
+
Implements
+
+ + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Name + +

+ +

The name of the executable (without file extensions).

+
+
+ +
+
public required string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this ExecutableInPath instance.

+
+
+ +
+
public override Binding Clone()
+
+ + +

Returns

+
+
Binding
+

The new copy of the ExecutableInPath.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the binding in the form " Name = Command". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ExecutableInPath?, ExecutableInPath?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ExecutableInPath? left, ExecutableInPath? right)
+
+ +

Parameters

+
+
left ExecutableInPath
+

The left object

+
+
right ExecutableInPath
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ExecutableInPath?, ExecutableInPath?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ExecutableInPath? left, ExecutableInPath? right)
+
+ +

Parameters

+
+
left ExecutableInPath
+

The left object

+
+
right ExecutableInPath
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ExecutableInVar.html b/api/ZeroInstall.Model.ExecutableInVar.html new file mode 100644 index 000000000..d775fdfcf --- /dev/null +++ b/api/ZeroInstall.Model.ExecutableInVar.html @@ -0,0 +1,496 @@ + + + + + Class ExecutableInVar | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ExecutableInVar +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Make a chosen Implementation available as an executable path in an environment variable.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class ExecutableInVar : ExecutableInBinding, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Binding>, IEquatable<ExecutableInBinding>, IEquatable<ExecutableInVar>
+
+ + + + +
+
Inheritance
+
+ + + + + +
ExecutableInVar
+
+
+ +
+
Implements
+
+ + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Name + +

+ +

The name of the environment variable.

+
+
+ +
+
public required string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this ExecutableInVar instance.

+
+
+ +
+
public override Binding Clone()
+
+ + +

Returns

+
+
Binding
+

The new copy of the ExecutableInVar.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the binding in the form "Name = Command". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ExecutableInVar?, ExecutableInVar?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ExecutableInVar? left, ExecutableInVar? right)
+
+ +

Parameters

+
+
left ExecutableInVar
+

The left object

+
+
right ExecutableInVar
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ExecutableInVar?, ExecutableInVar?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ExecutableInVar? left, ExecutableInVar? right)
+
+ +

Parameters

+
+
left ExecutableInVar
+

The left object

+
+
right ExecutableInVar
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Feed.html b/api/ZeroInstall.Model.Feed.html new file mode 100644 index 000000000..f5b83e1d0 --- /dev/null +++ b/api/ZeroInstall.Model.Feed.html @@ -0,0 +1,1605 @@ + + + + + Class Feed | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Feed +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A feed contains all the information required to download and execute an application.

+
+
+ +
+
[Serializable]
+[XmlNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance")]
+[Equatable]
+public class Feed : XmlUnknown, IEquatable<XmlUnknown>, IElementContainer, ISummaryContainer, IDescriptionContainer, IIconContainer, ICloneable<Feed>, IEquatable<Feed>
+
+ + + + +
+
Inheritance
+
+ + +
Feed
+
+
+ +
+
Implements
+
+ + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + +

Remarks

+ + + +

Fields +

+ + + +

+ SchemaLocation + +

+ +

Provides XML Editors with location hints for XSD files.

+
+
+ +
+
public string? SchemaLocation
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ XmlNamespace + +

+ +

The XML namespace used for storing feed/interface-related data.

+
+
+ +
+
public const string XmlNamespace = "http://zero-install.sourceforge.net/2004/injector/interface"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ XsdLocation + +

+ +

The URI to retrieve an XSD containing the XML Schema information for this class in serialized form.

+
+
+ +
+
public const string XsdLocation = "https://docs.0install.net/specifications/feed.xsd"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ XsiSchemaLocation + +

+ +

Provides XML Editors with location hints for XSD files.

+
+
+ +
+
public const string XsiSchemaLocation = "http://zero-install.sourceforge.net/2004/injector/interface https://docs.0install.net/specifications/feed.xsd http://0install.de/schema/desktop-integration/capabilities https://docs.0install.net/specifications/capabilities.xsd"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ CapabilityLists + +

+ +

A set of Capability lists for different architectures.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<CapabilityList> CapabilityLists { get; }
+
+ + + + + +

Property Value

+
+
List<CapabilityList>
+
+
+ + + + + + + + + + +

+ CatalogUri + +

+ +

The URI of the Catalog this feed was stored within. Used as an implementation detail; not part of the regular feed format!

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public FeedUri? CatalogUri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ Categories + +

+ +

A list of well-known categories the applications fits into. May influence the placement in the application menu.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Category> Categories { get; }
+
+ + + + + +

Property Value

+
+
List<Category>
+
+
+ + + + + + + + + + +

+ Descriptions + +

+ +

Full descriptions for different languages, which can be several paragraphs long.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public LocalizableStringCollection Descriptions { get; }
+
+ + + + + +

Property Value

+
+
LocalizableStringCollection
+
+
+ + + + + + + + + + +

+ Elements + +

+ +

A list of Groups and Implementations contained within this interface.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Element> Elements { get; }
+
+ + + + + +

Property Value

+
+
List<Element>
+
+
+ + + + + + + + + + +

+ EntryPoints + +

+ +

A list of EntryPoints for starting this interface.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<EntryPoint> EntryPoints { get; }
+
+ + + + + +

Property Value

+
+
List<EntryPoint>
+
+
+ + + + + + + + + + +

+ FeedFor + +

+ +

The implementations in this feed are implementations of the given interface. This is used when adding a third-party feed.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<InterfaceReference> FeedFor { get; }
+
+ + + + + +

Property Value

+
+
List<InterfaceReference>
+
+
+ + + + + + + + + + +

+ Feeds + +

+ +

Zero ore more additional feeds containing implementations of this interface.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<FeedReference> Feeds { get; }
+
+ + + + + +

Property Value

+
+
List<FeedReference>
+
+
+ + + + + + + + + + +

+ Homepage + +

+ +

The URL of a web-page describing feed or program in more detail.

+
+
+ +
+
[Browsable(false)]
+public Uri? Homepage { get; set; }
+
+ + + + + +

Property Value

+
+
Uri
+
+
+ + + + + + + + + + +

+ Icons + +

+ +

Icons representing the application. Used in the Catalog GUI as well as for desktop icons, menu entries, etc..

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Icon> Icons { get; }
+
+ + + + + +

Property Value

+
+
List<Icon>
+
+
+ + + + + + + + + + +

+ Implementations + +

+ +

A flat list of all Implementations contained in this feed.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public IEnumerable<Implementation> Implementations { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<Implementation>
+
+
+ + + + +

Remarks

+

If this is used before Normalize(FeedUri?) has been called, incomplete Implementations may be returned, because the Group inheritance structure has not been resolved.

+
+ + + + + + +

+ this[string] + +

+ +

Returns the Implementation with a specific ID string.

+
+
+ +
+
public Implementation this[string id] { get; }
+
+ +

Parameters

+
+
id string
+

The ID to look for.

+
+
+ + + + +

Property Value

+
+
Implementation
+

The identified Implementation.

+
+
+ + + + +

Remarks

+

If this is used before Normalize(FeedUri?) has been called, incomplete Implementations may be returned, because the Group inheritance structure has not been resolved.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

No Implementation matching id was found in Elements.

+
+
+ + + + + +

+ MinInjectorVersion + +

+ +

This attribute gives the oldest version of the injector that can read this file. Older versions will tell the user to upgrade if they are asked to read the file. Versions prior to 0.20 do not perform this check, however. If the attribute is not present, the file can be read by all versions.

+
+
+ +
+
[Browsable(false)]
+public ImplementationVersion? MinInjectorVersion { get; set; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + + + +

+ Name + +

+ +

A short name to identify the feed or program (e.g. "Foo").

+
+
+ +
+
public required string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ NeedsTerminal + +

+ +

If true, indicates that the program requires a terminal in order to run. Graphical launchers should therefore run this program in a suitable terminal emulator.

+
+
+ +
+
[Browsable(false)]
+public bool NeedsTerminal { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Publisher + +

+ +

The publisher (company or organization) of the program.

+
+
+ +
+
public string? Publisher { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ReplacedBy + +

+ +

This interface Uri of the feed has been replaced by the given interface. Any references to the old URI should be updated to use the new one.

+
+
+ +
+
[Browsable(false)]
+public InterfaceReference? ReplacedBy { get; set; }
+
+ + + + + +

Property Value

+
+
InterfaceReference
+
+
+ + + + + + +
+
See Also
+
+ +
+
+ + + + +

+ SplashScreens + +

+ +

Splash screens Zero Install can display during downloads, etc. for better branding.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Icon> SplashScreens { get; }
+
+ + + + + +

Property Value

+
+
List<Icon>
+
+
+ + + + + + + + + + +

+ Summaries + +

+ +

Short one-line descriptions for different languages; the first word should not be upper-case unless it is a proper noun (e.g. "cures all ills").

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public LocalizableStringCollection Summaries { get; }
+
+ + + + + +

Property Value

+
+
LocalizableStringCollection
+
+
+ + + + + + + + + + +

+ Uri + +

+ +

This attribute is only needed for remote feeds (fetched via HTTP). The value must exactly match the expected URL, to prevent an attacker replacing one correctly-signed feed with another (e.g., returning a feed for the shred program when the user asked for the backup program).

+
+
+ +
+
[Browsable(false)]
+public FeedUri? Uri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Feed instance.

+
+
+ +
+
public Feed Clone()
+
+ + +

Returns

+
+
Feed
+

The new copy of the Feed.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Feed?) + +

+ +
+
+ +
+
protected bool Equals(Feed? other)
+
+ +

Parameters

+
+
other Feed
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetBestIcon(string, string?) + +

+ +

Returns the best matching icon for a specific Command/EntryPoint. Will fall back to Icons.

+
+
+ +
+
public Icon? GetBestIcon(string mimeType, string? command)
+
+ +

Parameters

+
+
mimeType string
+

The MimeType to try to find. Will only return exact matches.

+
+
command string
+

The name of the command the icon should represent; null is equivalent to NameRun.

+
+
+ +

Returns

+
+
Icon
+

The best matching icon that was found or null if no matching icon was found.

+
+
+ + + + + + + + + + + + + +

+ GetBestName(CultureInfo, string?) + +

+ +

Returns the best matching name for a specific Command/EntryPoint.

+
+
+ +
+
public string GetBestName(CultureInfo language, string? command)
+
+ +

Parameters

+
+
language CultureInfo
+

The language to look for; use InvariantCulture for none.

+
+
command string
+

The name of the command the name should represent; null is equivalent to NameRun.

+
+
+ +

Returns

+
+
string
+

The best matching name that was found.

+
+
+ + + + + + + + + + + + + +

+ GetBestSummary(CultureInfo, string?) + +

+ +

Returns the best matching summary for a specific Command/EntryPoint. Will fall back to Summaries.

+
+
+ +
+
public string? GetBestSummary(CultureInfo language, string? command)
+
+ +

Parameters

+
+
language CultureInfo
+

The language to look for; use InvariantCulture for none.

+
+
command string
+

The name of the command the summary should represent; null is equivalent to NameRun.

+
+
+ +

Returns

+
+
string
+

The best matching summary that was found; null if no matching summary was found.

+
+
+ + + + + + + + + + + + + +

+ GetEntryPoint(string?) + +

+ +

Returns the first EntryPoint referencing a specific Command.

+
+
+ +
+
public EntryPoint? GetEntryPoint(string? command)
+
+ +

Parameters

+
+
command string
+

The command name to search for; null is equivalent to NameRun.

+
+
+ +

Returns

+
+
EntryPoint
+

The identified EntryPoint; null no matching one was found.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Prepares the feed for solver processing. +Flattens inheritance structures, converts legacy elements, sets default values, etc.. +Do not call it if you plan on serializing the feed again since it may loose some of its structure.

+
+
+ +
+
public void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The URI the feed was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
NotSupportedException
+

The feed requires a newer version of Zero Install.

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ RemoveImplementation(string) + +

+ +

Removes an Implementation identified by its ID.

+
+
+ +
+
public bool RemoveImplementation(string id)
+
+ +

Parameters

+
+
id string
+
+
+ +

Returns

+
+
bool
+

true if the implementation was removed; false if the implementation could not be found.

+
+
+ + + + + + + + + + + + + +

+ ResolveInternalReferences() + +

+ +

Resolves references between elements within the Feed.

+
+
+ +
+
public void ResolveInternalReferences()
+
+ + + + + + + + + +

Remarks

+

This method should be called instead of Normalize(FeedUri?) if you plan on serializing the feed again since it preservers the structure.

+
+ +

Exceptions

+
+
InvalidDataException
+

A reference could not be resolved.

+
+
+ + + + + +

+ Strip() + +

+ +

Strips the feed down to the application metadata removing specific Implementations.

+
+
+ +
+
public void Strip()
+
+ + + + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the feed/interface in the form "Name (Uri)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Feed?, Feed?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Feed? left, Feed? right)
+
+ +

Parameters

+
+
left Feed
+

The left object

+
+
right Feed
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Feed?, Feed?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Feed? left, Feed? right)
+
+ +

Parameters

+
+
left Feed
+

The left object

+
+
right Feed
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.FeedElement.html b/api/ZeroInstall.Model.FeedElement.html new file mode 100644 index 000000000..c50d83d83 --- /dev/null +++ b/api/ZeroInstall.Model.FeedElement.html @@ -0,0 +1,536 @@ + + + + + Class FeedElement | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedElement +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Abstract base class for XML serializable classes that are part of the Zero Install feed model.

+
+
+ +
+
[Equatable]
+public abstract class FeedElement : XmlUnknown, IEquatable<XmlUnknown>, IEquatable<FeedElement>
+
+ + + + +
+
Inheritance
+
+ + +
FeedElement
+
+
+ +
+
Implements
+
+ + +
+
+ +
+
Derived
+
+ + + + + + + + + + + + + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + +
+ + + + +

Remarks

+

Does not include ZeroInstall.Model.Capabilities.

+
+ + +

Properties +

+ + + + +

+ IfZeroInstallVersion + +

+ +

Only process this element if the current Zero Install version matches the range.

+
+
+ +
+
[Browsable(false)]
+public VersionRange? IfZeroInstallVersion { get; set; }
+
+ + + + + +

Property Value

+
+
VersionRange
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(FeedElement?) + +

+ +
+
+ +
+
protected bool Equals(FeedElement? other)
+
+ +

Parameters

+
+
other FeedElement
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ FilterMismatch(IRecipeStep) + +

+ +

Checks whether an element passes the specified IfZeroInstallVersion restriction, if any.

+
+
+ +
+
protected static bool FilterMismatch(IRecipeStep step)
+
+ +

Parameters

+
+
step IRecipeStep
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ FilterMismatch<T>(T) + +

+ +

Checks whether an element passes the specified IfZeroInstallVersion restriction, if any.

+
+
+ +
+
protected static bool FilterMismatch<T>(T element) where T : FeedElement?
+
+ +

Parameters

+
+
element T
+
+
+ +

Returns

+
+
bool
+
+
+ +

Type Parameters

+
+
T
+
+
+ + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(FeedElement?, FeedElement?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(FeedElement? left, FeedElement? right)
+
+ +

Parameters

+
+
left FeedElement
+

The left object

+
+
right FeedElement
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(FeedElement?, FeedElement?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(FeedElement? left, FeedElement? right)
+
+ +

Parameters

+
+
left FeedElement
+

The left object

+
+
right FeedElement
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.FeedReference.html b/api/ZeroInstall.Model.FeedReference.html new file mode 100644 index 000000000..d79d331ba --- /dev/null +++ b/api/ZeroInstall.Model.FeedReference.html @@ -0,0 +1,502 @@ + + + + + Class FeedReference | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedReference +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A linked feed that contains more implementations of this interface. Is treated by the solver as if it were part of the main feed.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class FeedReference : TargetBase, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IEquatable<TargetBase>, ICloneable<FeedReference>, IEquatable<FeedReference>
+
+ + + + +
+
Inheritance
+
+ + + + +
FeedReference
+
+
+ +
+
Implements
+
+ + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Source + +

+ +

The URL or local path used to locate the feed.

+
+
+ +
+
public required FeedUri Source { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this FeedReference instance.

+
+
+ +
+
public FeedReference Clone()
+
+ + +

Returns

+
+
FeedReference
+

The new copy of the FeedReference.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the feed reference in the form "Source (Architecture, Languages)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(FeedReference?, FeedReference?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(FeedReference? left, FeedReference? right)
+
+ +

Parameters

+
+
left FeedReference
+

The left object

+
+
right FeedReference
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(FeedReference?, FeedReference?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(FeedReference? left, FeedReference? right)
+
+ +

Parameters

+
+
left FeedReference
+

The left object

+
+
right FeedReference
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+
+ +
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.FeedTarget.html b/api/ZeroInstall.Model.FeedTarget.html new file mode 100644 index 000000000..6d2336ef4 --- /dev/null +++ b/api/ZeroInstall.Model.FeedTarget.html @@ -0,0 +1,315 @@ + + + + + Struct FeedTarget | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct FeedTarget +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Associates a FeedUri with the Feed data acquired from there.

+
+
+ +
+
public readonly record struct FeedTarget : IEquatable<FeedTarget>
+
+ + + + + +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ FeedTarget(FeedUri, Feed) + +

+ +

Associates a FeedUri with the Feed data acquired from there.

+
+
+ +
+
public FeedTarget(FeedUri Uri, Feed Feed)
+
+ +

Parameters

+
+
Uri FeedUri
+

The URI or local path (must be absolute) to the feed.

+
+
Feed Feed
+

The data acquired from Uri. Normalize(FeedUri?) has already been called.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Feed + +

+ +

The data acquired from Uri. Normalize(FeedUri?) has already been called.

+
+
+ +
+
public Feed Feed { get; init; }
+
+ + + + + +

Property Value

+
+
Feed
+
+
+ + + + + + + + + + +

+ Uri + +

+ +

The URI or local path (must be absolute) to the feed.

+
+
+ +
+
public FeedUri Uri { get; init; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Returns the fully qualified type name of this instance.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+

The fully qualified type name.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.FeedUri.html b/api/ZeroInstall.Model.FeedUri.html new file mode 100644 index 000000000..7eadd9989 --- /dev/null +++ b/api/ZeroInstall.Model.FeedUri.html @@ -0,0 +1,1122 @@ + + + + + Class FeedUri | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedUri +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Represents a feed or interface URI or local path. Unlike Uri this class only accepts HTTP(S) URLs and absolute local paths.

+
+
+ +
+
[TypeConverter(typeof(StringConstructorConverter<FeedUri>))]
+[Equatable]
+public sealed class FeedUri : Uri, ISpanFormattable, IFormattable, ISerializable, IEquatable<FeedUri>
+
+ + + + +
+
Inheritance
+
+ + +
FeedUri
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Uri.Host +
+ + + + + + +
+ Uri.IsUnc +
+ + + +
+ Uri.Port +
+
+ Uri.Query +
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ FeedUri(string) + +

+ +

Creates a feed URI from a string.

+
+
+ +
+
public FeedUri(string value)
+
+ +

Parameters

+
+
value string
+

A string to parse as an HTTP(S) URL or an absolute local path.

+
+
+ + + + + + + + + +

Exceptions

+
+
UriFormatException
+

value is not a valid HTTP(S) URL or an absolute local path.

+
+
+ + + + + +

+ FeedUri(Uri) + +

+ +

Creates a feed URI from an existing Uri.

+
+
+ +
+
public FeedUri(Uri value)
+
+ +

Parameters

+
+
value Uri
+

An existing Uri.

+
+
+ + + + + + + + + +

Exceptions

+
+
UriFormatException
+

value is not a valid HTTP(S) URL or an absolute local path.

+
+
+ + + + + +

+ FeedUri(FeedUri) + +

+ +

Passing a FeedUri instance into the FeedUri constructor does nothing useful. Just use the original object.

+
+
+ +
+
[Obsolete("Passing a FeedUri instance into the FeedUri constructor does nothing useful. Just use the original object.")]
+public FeedUri(FeedUri value)
+
+ +

Parameters

+
+
value FeedUri
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ FakePrefix + +

+ +

This is prepended to a FeedUri if it is meant for demo data and should not be used to actually fetch a feed.

+
+
+ +
+
public const string FakePrefix = "fake:"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + +
+
See Also
+
+ +
+
+ + + +

+ FromDistributionPrefix + +

+ +

This is prepended to FromFeed if data was pulled from a native package manager rather than the feed itself.

+
+
+ +
+
public const string FromDistributionPrefix = "distribution:"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + +
+
See Also
+
+ + +
+
+ + +

Properties +

+ + + + +

+ IsFake + +

+ +

Indicates whether this is a fake identifier meant for demo data and should not be used to actually fetch a feed.

+
+
+ +
+
public bool IsFake { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + +
+
See Also
+
+ +
+
+ + + + +

+ IsFromDistribution + +

+ +

Indicates that an ImplementationSelection was generated with data from a native package manager rather than the feed itself.

+
+
+ +
+
public bool IsFromDistribution { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + +
+
See Also
+
+ +
+
+ + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Compares two Uri instances for equality.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+
+
+ +

Returns

+
+
bool
+

true if the two instances represent the same URI; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Escape() + +

+ +

Escapes the identifier using URL encoding.

+
+
+ +
+
public string Escape()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Escape(string) + +

+ +

Escapes an identifier using URL encoding.

+
+
+ +
+
[Pure]
+public static string Escape(string value)
+
+ +

Parameters

+
+
value string
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ EscapeComponent() + +

+ +

Convert the identifier to a list of path components. +e.g. "http://example.com/foo.xml" becomes ["http", "example.com", "foo.xml"], while +"/root/feed.xml" becomes ["file", "root__feed.xml"]. +The number of components is determined by the scheme (three for http, two for file). +Uses [underscore_escape] to escape each component.

+
+
+ +
+
public string[] EscapeComponent()
+
+ + +

Returns

+
+
string[]
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Gets the hash code for the URI.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

The hash value generated for this URI.

+
+
+ + + + + + + + + + + + + +

+ PrettyEscape() + +

+ +

Escapes the identifier using URL encoding except for slashes (encoded as #) and colons (left as-is on POSIX systems).

+
+
+ +
+
public string PrettyEscape()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ PrettyEscape(string) + +

+ +

Escapes an identifier using URL encoding except for slashes (encoded as #) and colons (left as-is on POSIX systems).

+
+
+ +
+
[Pure]
+public static string PrettyEscape(string value)
+
+ +

Parameters

+
+
value string
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ PrettyUnescape(string) + +

+ +

Unescapes an identifier using URL encoding except for slashes (encoded as #).

+
+
+ +
+
[Pure]
+public static FeedUri PrettyUnescape(string escaped)
+
+ +

Parameters

+
+
escaped string
+
+
+ +

Returns

+
+
FeedUri
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns a string representation of the URI, not adhering to the escaping rules of RFC 2396. +Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ ToStringRfc() + +

+ +

An alternate version of ToString() that produces results escaped according to RFC 2396. +Safe for parsing!

+
+
+ +
+
public string ToStringRfc()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Unescape(string) + +

+ +

Unescapes an identifier using URL encoding.

+
+
+ +
+
public static FeedUri Unescape(string escaped)
+
+ +

Parameters

+
+
escaped string
+
+
+ +

Returns

+
+
FeedUri
+
+
+ + + + + + + + +

Exceptions

+
+
UriFormatException
+

The unescaped string is not a valid HTTP(S) URL or an absolute local path.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(FeedUri?, FeedUri?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(FeedUri? left, FeedUri? right)
+
+ +

Parameters

+
+
left FeedUri
+

The left object

+
+
right FeedUri
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(FeedUri?, FeedUri?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(FeedUri? left, FeedUri? right)
+
+ +

Parameters

+
+
left FeedUri
+

The left object

+
+
right FeedUri
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ForEachArgs.html b/api/ZeroInstall.Model.ForEachArgs.html new file mode 100644 index 000000000..438bcda67 --- /dev/null +++ b/api/ZeroInstall.Model.ForEachArgs.html @@ -0,0 +1,612 @@ + + + + + Class ForEachArgs | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ForEachArgs +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Expands an environment variable to multiple arguments. +The variable specified in ItemFrom is split using Separator and the Arguments are added once for each item.

+
+
+ +
+
[Serializable]
+[Equatable]
+public class ForEachArgs : ArgBase, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<ArgBase>, IEquatable<ForEachArgs>
+
+ + + + +
+
Inheritance
+
+ + + + +
ForEachArgs
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Arguments + +

+ +

A list of command-line arguments to be passed to an executable. "${item}" will be substituted with each for-each value.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Arg> Arguments { get; }
+
+ + + + + +

Property Value

+
+
List<Arg>
+
+
+ + + + + + + + + + +

+ ItemFrom + +

+ +

The name of the environment variable to be expanded.

+
+
+ +
+
public required string ItemFrom { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Separator + +

+ +

Overrides the default separator character (":" on POSIX and ";" on Windows).

+
+
+ +
+
public string? Separator { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this ForEachArgs instance.

+
+
+ +
+
public override ArgBase Clone()
+
+ + +

Returns

+
+
ArgBase
+

The new copy of the ForEachArgs.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(ForEachArgs?) + +

+ +
+
+ +
+
protected bool Equals(ForEachArgs? other)
+
+ +

Parameters

+
+
other ForEachArgs
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the for-each instruction in the form "ItemFrom". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ForEachArgs?, ForEachArgs?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ForEachArgs? left, ForEachArgs? right)
+
+ +

Parameters

+
+
left ForEachArgs
+

The left object

+
+
right ForEachArgs
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ForEachArgs?, ForEachArgs?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ForEachArgs? left, ForEachArgs? right)
+
+ +

Parameters

+
+
left ForEachArgs
+

The left object

+
+
right ForEachArgs
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.GenericBinding.html b/api/ZeroInstall.Model.GenericBinding.html new file mode 100644 index 000000000..a33f682bd --- /dev/null +++ b/api/ZeroInstall.Model.GenericBinding.html @@ -0,0 +1,466 @@ + + + + + Class GenericBinding | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class GenericBinding +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Zero Install will not know how to run a program using generic bindings itself, but it will include them in any selections documents it creates, which can then be executed by your custom code.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class GenericBinding : ExecutableInBinding, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Binding>, IEquatable<ExecutableInBinding>, IEquatable<GenericBinding>
+
+ + + + +
+
Inheritance
+
+ + + + + +
GenericBinding
+
+
+ +
+
Implements
+
+ + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Path + +

+ +

If your binding needs a path within the selected implementation, it is suggested that the path attribute be used for this. Other attributes and child elements should be namespaced to avoid collisions.

+
+
+ +
+
public string? Path { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this GenericBinding instance.

+
+
+ +
+
public override Binding Clone()
+
+ + +

Returns

+
+
Binding
+

The new copy of the GenericBinding.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the binding in the form "Path = Command". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(GenericBinding?, GenericBinding?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(GenericBinding? left, GenericBinding? right)
+
+ +

Parameters

+
+
left GenericBinding
+

The left object

+
+
right GenericBinding
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(GenericBinding?, GenericBinding?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(GenericBinding? left, GenericBinding? right)
+
+ +

Parameters

+
+
left GenericBinding
+

The left object

+
+
right GenericBinding
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Group.html b/api/ZeroInstall.Model.Group.html new file mode 100644 index 000000000..a076d45cb --- /dev/null +++ b/api/ZeroInstall.Model.Group.html @@ -0,0 +1,610 @@ + + + + + Class Group | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Group +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

All attributes of a group are inherited by any child Groups and Implementations as defaults, but can be overridden there. +All Dependencys and Bindings are inherited (sub-groups may add more Dependencys and Bindings to the list, but cannot remove any).

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class Group : Element, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IEquatable<TargetBase>, IBindingContainer, IDependencyContainer, ICloneable<Element>, IEquatable<Element>, IElementContainer, IEquatable<Group>
+
+ + + + +
+
Inheritance
+
+ + + + + +
Group
+
+
+ +
+
Implements
+
+ + + + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Properties +

+ + + + +

+ Elements + +

+ +

A list of Groups and Implementations contained within this group.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Element> Elements { get; }
+
+ + + + + +

Property Value

+
+
List<Element>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Element instance.

+
+
+ +
+
public override Element Clone()
+
+ + +

Returns

+
+
Element
+

The new copy of the Element.

+
+
+ + + + + + + + + + + + + +

+ CloneGroup() + +

+ +

Creates a deep copy of this Group instance.

+
+
+ +
+
public Group CloneGroup()
+
+ + +

Returns

+
+
Group
+

The new copy of the Group.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Flattens inheritance structures, Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the group in the form "Comma-separated list of set values". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Group?, Group?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Group? left, Group? right)
+
+ +

Parameters

+
+
left Group
+

The left object

+
+
right Group
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Group?, Group?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Group? left, Group? right)
+
+ +

Parameters

+
+
left Group
+

The left object

+
+
right Group
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+
+ +
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.IArgBaseContainer.html b/api/ZeroInstall.Model.IArgBaseContainer.html new file mode 100644 index 000000000..d9ed6735c --- /dev/null +++ b/api/ZeroInstall.Model.IArgBaseContainer.html @@ -0,0 +1,181 @@ + + + + + Interface IArgBaseContainer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IArgBaseContainer +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An object that contains ArgBases.

+
+
+ +
+
public interface IArgBaseContainer
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ Arguments + +

+ +

A list of command-line arguments to be passed to an executable.

+
+
+ +
+
List<ArgBase> Arguments { get; }
+
+ + + + + +

Property Value

+
+
List<ArgBase>
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.IBindingContainer.html b/api/ZeroInstall.Model.IBindingContainer.html new file mode 100644 index 000000000..ac864aae9 --- /dev/null +++ b/api/ZeroInstall.Model.IBindingContainer.html @@ -0,0 +1,181 @@ + + + + + Interface IBindingContainer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IBindingContainer +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An object that contains Bindings.

+
+
+ +
+
public interface IBindingContainer
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ Bindings + +

+ +

A list of Bindings for Implementations to locate Dependencys.

+
+
+ +
+
List<Binding> Bindings { get; }
+
+ + + + + +

Property Value

+
+
List<Binding>
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.IDependencyContainer.html b/api/ZeroInstall.Model.IDependencyContainer.html new file mode 100644 index 000000000..cd4a6c869 --- /dev/null +++ b/api/ZeroInstall.Model.IDependencyContainer.html @@ -0,0 +1,220 @@ + + + + + Interface IDependencyContainer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IDependencyContainer +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An object that contains Dependencys and Restrictions.

+
+
+ +
+
public interface IDependencyContainer
+
+ + + + + + + + +
+
Extension Methods
+
+ +
+ + + + + +

Properties +

+ + + + +

+ Dependencies + +

+ +

A list of interfaces this implementation depends upon.

+
+
+ +
+
List<Dependency> Dependencies { get; }
+
+ + + + + +

Property Value

+
+
List<Dependency>
+
+
+ + + + + + + + + + +

+ Restrictions + +

+ +

A list of interfaces that are restricted to specific versions when used.

+
+
+ +
+
List<Restriction> Restrictions { get; }
+
+ + + + + +

Property Value

+
+
List<Restriction>
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.IDescriptionContainer.html b/api/ZeroInstall.Model.IDescriptionContainer.html new file mode 100644 index 000000000..e2ea38de7 --- /dev/null +++ b/api/ZeroInstall.Model.IDescriptionContainer.html @@ -0,0 +1,182 @@ + + + + + Interface IDescriptionContainer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IDescriptionContainer +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An object that has localizable descriptions.

+
+
+ +
+
public interface IDescriptionContainer
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ Descriptions + +

+ +

Full descriptions for different languages, which can be several paragraphs long.

+
+
+ +
+
[Browsable(false)]
+LocalizableStringCollection Descriptions { get; }
+
+ + + + + +

Property Value

+
+
LocalizableStringCollection
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.IElementContainer.html b/api/ZeroInstall.Model.IElementContainer.html new file mode 100644 index 000000000..a2fc1c90a --- /dev/null +++ b/api/ZeroInstall.Model.IElementContainer.html @@ -0,0 +1,181 @@ + + + + + Interface IElementContainer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IElementContainer +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An object that contains Groups and Implementations. Supports a composite pattern.

+
+
+ +
+
public interface IElementContainer
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ Elements + +

+ +

A list of Groups and Implementations contained within this element.

+
+
+ +
+
List<Element> Elements { get; }
+
+ + + + + +

Property Value

+
+
List<Element>
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.IIconContainer.html b/api/ZeroInstall.Model.IIconContainer.html new file mode 100644 index 000000000..a9184b9cc --- /dev/null +++ b/api/ZeroInstall.Model.IIconContainer.html @@ -0,0 +1,182 @@ + + + + + Interface IIconContainer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IIconContainer +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An object that contains Iconss.

+
+
+ +
+
public interface IIconContainer
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ Icons + +

+ +

Zero or more icons.

+
+
+ +
+
[Browsable(false)]
+List<Icon> Icons { get; }
+
+ + + + + +

Property Value

+
+
List<Icon>
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.IInterfaceUri.html b/api/ZeroInstall.Model.IInterfaceUri.html new file mode 100644 index 000000000..7dd12c06b --- /dev/null +++ b/api/ZeroInstall.Model.IInterfaceUri.html @@ -0,0 +1,181 @@ + + + + + Interface IInterfaceUri | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IInterfaceUri +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An object that contains an interface URI.

+
+
+ +
+
public interface IInterfaceUri
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ InterfaceUri + +

+ +

An interface URI (URL or file path).

+
+
+ +
+
FeedUri InterfaceUri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.IInterfaceUriBindingContainer.html b/api/ZeroInstall.Model.IInterfaceUriBindingContainer.html new file mode 100644 index 000000000..f17fe87b7 --- /dev/null +++ b/api/ZeroInstall.Model.IInterfaceUriBindingContainer.html @@ -0,0 +1,155 @@ + + + + + Interface IInterfaceUriBindingContainer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IInterfaceUriBindingContainer +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An object that contains an interface URI string.

+
+
+ +
+
public interface IInterfaceUriBindingContainer : IInterfaceUri, IBindingContainer
+
+ + + + + + + +
+
Inherited Members
+
+ + +
+ + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.IRecipeStep.html b/api/ZeroInstall.Model.IRecipeStep.html new file mode 100644 index 000000000..4f70373a3 --- /dev/null +++ b/api/ZeroInstall.Model.IRecipeStep.html @@ -0,0 +1,195 @@ + + + + + Interface IRecipeStep | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IRecipeStep +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A retrieval step is a part of a Recipe.

+
+
+ +
+
public interface IRecipeStep : ICloneable<IRecipeStep>
+
+ + + + + + + +
+
Inherited Members
+
+ +
+ + + + + + +

Methods +

+ + + + +

+ Normalize(FeedUri?) + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
UriFormatException
+

Href is relative and feedUri is a remote URI.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ISummaryContainer.html b/api/ZeroInstall.Model.ISummaryContainer.html new file mode 100644 index 000000000..faef077af --- /dev/null +++ b/api/ZeroInstall.Model.ISummaryContainer.html @@ -0,0 +1,189 @@ + + + + + Interface ISummaryContainer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface ISummaryContainer +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An object that has localizable summaries and descriptions.

+
+
+ +
+
public interface ISummaryContainer : IDescriptionContainer
+
+ + + + + + + +
+
Inherited Members
+
+ +
+ + + + + + +

Properties +

+ + + + +

+ Summaries + +

+ +

Short one-line descriptions for different languages; the first word should not be upper-case unless it is a proper noun (e.g. "cures all ills").

+
+
+ +
+
[Browsable(false)]
+LocalizableStringCollection Summaries { get; }
+
+ + + + + +

Property Value

+
+
LocalizableStringCollection
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Icon.html b/api/ZeroInstall.Model.Icon.html new file mode 100644 index 000000000..5b396b6b5 --- /dev/null +++ b/api/ZeroInstall.Model.Icon.html @@ -0,0 +1,742 @@ + + + + + Class Icon | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Icon +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An icon representing the application. Used in the Catalog GUI as well as for desktop icons, menu entries, etc..

+
+
+ +
+
[Serializable]
+[Equatable]
+public class Icon : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Icon>, IEquatable<Icon>
+
+ + + + +
+
Inheritance
+
+ + + +
Icon
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ KnownMimeTypes + +

+ +

All known MimeType values for icons.

+
+
+ +
+
public static readonly string[] KnownMimeTypes
+
+ + + + +

Field Value

+
+
string[]
+
+
+ + + + + + + + + + +

+ MimeTypeIcns + +

+ +

The MimeType value for Apple icons (.icns).

+
+
+ +
+
public const string MimeTypeIcns = "image/x-icns"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeIco + +

+ +

The MimeType value for Windows icons (.ico).

+
+
+ +
+
public const string MimeTypeIco = "image/vnd.microsoft.icon"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypePng + +

+ +

The MimeType value for PNG icons (.png(.

+
+
+ +
+
public const string MimeTypePng = "image/png"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ MimeTypeSvg + +

+ +

The MimeType value for SVG icons (.svg).

+
+
+ +
+
public const string MimeTypeSvg = "image/svg"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Href + +

+ +

The URL used to locate the icon.

+
+
+ +
+
[Browsable(false)]
+public required Uri Href { get; set; }
+
+ + + + + +

Property Value

+
+
Uri
+
+
+ + + + + + + + + + +

+ MimeType + +

+ +

The MIME type of the icon. This value is case-insensitive.

+
+
+ +
+
[TypeConverter(typeof(IconMimeTypeConverter))]
+public string? MimeType { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Icon instance.

+
+
+ +
+
public Icon Clone()
+
+ + +

Returns

+
+
Icon
+

The new copy of the Icon.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Icon?) + +

+ +
+
+ +
+
protected bool Equals(Icon? other)
+
+ +

Parameters

+
+
other Icon
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the icon in the form "Location (MimeType)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Icon?, Icon?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Icon? left, Icon? right)
+
+ +

Parameters

+
+
left Icon
+

The left object

+
+
right Icon
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Icon?, Icon?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Icon? left, Icon? right)
+
+ +

Parameters

+
+
left Icon
+

The left object

+
+
right Icon
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+
+ + +
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.IconExtensions.html b/api/ZeroInstall.Model.IconExtensions.html new file mode 100644 index 000000000..037ec6104 --- /dev/null +++ b/api/ZeroInstall.Model.IconExtensions.html @@ -0,0 +1,223 @@ + + + + + Class IconExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IconExtensions +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Provides extensions methods related to Icons.

+
+
+ +
+
public static class IconExtensions
+
+ + + + +
+
Inheritance
+
+ +
IconExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ GetIcon(IEnumerable<Icon>, string) + +

+ +

Returns an icon with a specific mime type if available.

+
+
+ +
+
public static Icon? GetIcon(this IEnumerable<Icon> icons, string mimeType)
+
+ +

Parameters

+
+
icons IEnumerable<Icon>
+

The list of icons to search

+
+
mimeType string
+

The MimeType to try to find. Will only return exact matches.

+
+
+ +

Returns

+
+
Icon
+

The first matching icon that was found or null if no matching icon was found.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Implementation.html b/api/ZeroInstall.Model.Implementation.html new file mode 100644 index 000000000..d2960b9fd --- /dev/null +++ b/api/ZeroInstall.Model.Implementation.html @@ -0,0 +1,674 @@ + + + + + Class Implementation | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Implementation +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An implementation is a specific version of an application that can be downloaded and executed (e.g. Firefox 3.6 for Windows).

+
+
+ +
+
[Serializable]
+[Equatable]
+public class Implementation : ImplementationBase, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IEquatable<TargetBase>, IBindingContainer, IDependencyContainer, ICloneable<Element>, IEquatable<Element>, IEquatable<ImplementationBase>, IEquatable<Implementation>
+
+ + + + +
+
Inheritance
+
+ + + + + + +
Implementation
+
+
+ +
+
Implements
+
+ + + + + + + + + +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Properties +

+ + + + +

+ RetrievalMethods + +

+ +

A list of RetrievalMethods for downloading the implementation.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<RetrievalMethod> RetrievalMethods { get; }
+
+ + + + + +

Property Value

+
+
List<RetrievalMethod>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Implementation instance.

+
+
+ +
+
public override Element Clone()
+
+ + +

Returns

+
+
Element
+

The new copy of the Implementation.

+
+
+ + + + + + + + + + + + + +

+ CloneImplementation() + +

+ +

Creates a deep copy of this Implementation instance.

+
+
+ +
+
public Implementation CloneImplementation()
+
+ + +

Returns

+
+
Implementation
+

The new copy of the Implementation.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Implementation?) + +

+ +
+
+ +
+
protected bool Equals(Implementation? other)
+
+ +

Parameters

+
+
other Implementation
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Flattens inheritance structures, Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + +

Operators +

+ + + + +

+ operator ==(Implementation?, Implementation?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Implementation? left, Implementation? right)
+
+ +

Parameters

+
+
left Implementation
+

The left object

+
+
right Implementation
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Implementation?, Implementation?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Implementation? left, Implementation? right)
+
+ +

Parameters

+
+
left Implementation
+

The left object

+
+
right Implementation
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+
+ +
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ImplementationBase.html b/api/ZeroInstall.Model.ImplementationBase.html new file mode 100644 index 000000000..f8c74949d --- /dev/null +++ b/api/ZeroInstall.Model.ImplementationBase.html @@ -0,0 +1,745 @@ + + + + + Class ImplementationBase | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationBase +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Information for identifying an implementation of a Feed. +Common base for Implementation and ImplementationSelection.

+
+
+ +
+
[Equatable]
+public abstract class ImplementationBase : Element, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IEquatable<TargetBase>, IBindingContainer, IDependencyContainer, ICloneable<Element>, IEquatable<Element>, IEquatable<ImplementationBase>
+
+ + + + +
+
Inheritance
+
+ + + + + +
ImplementationBase
+
+
+ +
+
Implements
+
+ + + + + + + + +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Properties +

+ + + + +

+ ID + +

+ +

A unique identifier for this implementation. Used when storing implementation-specific user preferences.

+
+
+ +
+
public required string ID { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ LocalPath + +

+ +

If the feed file is a local file (the interface 'uri' starts with /) then the local-path attribute may contain the pathname of a local directory (either an absolute path or a path relative to the directory containing the feed file).

+
+
+ +
+
public string? LocalPath { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ManifestDigest + +

+ +

A manifest digest is a means of uniquely identifying an Implementation and verifying its contents.

+
+
+ +
+
public ManifestDigest ManifestDigest { get; set; }
+
+ + + + + +

Property Value

+
+
ManifestDigest
+
+
+ + + + + + + + + + +

+ Version + +

+ +

The version number of the implementation.

+
+
+ +
+
public override required ImplementationVersion Version { get; set; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CloneFromTo(ImplementationBase, ImplementationBase) + +

+ +

Copies all known values from one instance to another. Helper method for instance cloning.

+
+
+ +
+
protected static void CloneFromTo(ImplementationBase from, ImplementationBase to)
+
+ +

Parameters

+
+
from ImplementationBase
+
+
to ImplementationBase
+
+
+ + + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(ImplementationBase?) + +

+ +
+
+ +
+
protected bool Equals(ImplementationBase? other)
+
+ +

Parameters

+
+
other ImplementationBase
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Flattens inheritance structures, Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the implementation in the form "Comma-separated list of set values". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ImplementationBase?, ImplementationBase?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ImplementationBase? left, ImplementationBase? right)
+
+ +

Parameters

+
+
left ImplementationBase
+

The left object

+
+
right ImplementationBase
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ImplementationBase?, ImplementationBase?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ImplementationBase? left, ImplementationBase? right)
+
+ +

Parameters

+
+
left ImplementationBase
+

The left object

+
+
right ImplementationBase
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ImplementationVersion.html b/api/ZeroInstall.Model.ImplementationVersion.html new file mode 100644 index 000000000..d4d614d51 --- /dev/null +++ b/api/ZeroInstall.Model.ImplementationVersion.html @@ -0,0 +1,832 @@ + + + + + Class ImplementationVersion | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationVersion +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Represents a version number consisting of dot-separated decimals and optional modifier strings.

+
+
+ +
+
[TypeConverter(typeof(StringConstructorConverter<ImplementationVersion>))]
+[Serializable]
+[Equatable]
+public sealed class ImplementationVersion : IComparable<ImplementationVersion>, IEquatable<ImplementationVersion>
+
+ + + + +
+
Inheritance
+
+ +
ImplementationVersion
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+

+ This is the syntax for valid version strings: +

Version := DottedList ("-" Modifier? DottedList?)*
+  DottedList := (Integer ("." Integer)*)
+  Modifier := "pre" | "rc" | "post"
+ If the string ContainsTemplateVariables(string) the entire string is stored verbatim and not parsed. + +
+ + +

Constructors +

+ + + + +

+ ImplementationVersion(string) + +

+ +

Creates a new implementation version from a a string.

+
+
+ +
+
public ImplementationVersion(string value)
+
+ +

Parameters

+
+
value string
+

The string containing the version information.

+
+
+ + + + + + + + + +

Exceptions

+
+
FormatException
+

value is not a valid version string.

+
+
+ + + + + +

+ ImplementationVersion(Version) + +

+ +

Creates a new implementation version from a .NET Version.

+
+
+ +
+
public ImplementationVersion(Version version)
+
+ +

Parameters

+
+
version Version
+

The .NET Version to convert.

+
+
+ + + + + + + + + + + + + + +

+ ImplementationVersion(VersionDottedList, params VersionPart[]) + +

+ +

Creates a new implementation version.

+
+
+ +
+
public ImplementationVersion(VersionDottedList firstPart, params VersionPart[] additionalParts)
+
+ +

Parameters

+
+
firstPart VersionDottedList
+

The first part of the version number.

+
+
additionalParts VersionPart[]
+

All additional parts of the version number.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ AdditionalParts + +

+ +

All additional parts of the version number.

+
+
+ +
+
[OrderedEquality]
+public IReadOnlyList<VersionPart> AdditionalParts { get; }
+
+ + + + + +

Property Value

+
+
IReadOnlyList<VersionPart>
+
+
+ + + + + + + + + + +

+ ContainsTemplateVariables + +

+ +

Indicates whether this version number contains a template variable (a substring enclosed in curly brackets, e.g {var}) .

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public bool ContainsTemplateVariables { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + +

Remarks

+

This must be false in regular feeds; true is only valid for templates.

+
+ + + + + + +

+ FirstPart + +

+ +

The first part of the version number.

+
+
+ +
+
public VersionDottedList FirstPart { get; }
+
+ + + + + +

Property Value

+
+
VersionDottedList
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CompareTo(ImplementationVersion?) + +

+ +

Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.

+
+
+ +
+
public int CompareTo(ImplementationVersion? other)
+
+ +

Parameters

+
+
other ImplementationVersion
+

An object to compare with this instance.

+
+
+ +

Returns

+
+
int
+

A value that indicates the relative order of the objects being compared. The return value has these meanings:

+
Value Meaning
Less than zero This instance precedes other in the sort order.
Zero This instance occurs in the same position in the sort order as other.
Greater than zero This instance follows other in the sort order.
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns a string representation of the version. Safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ TryCreate(string, out ImplementationVersion?) + +

+ +

Creates a new ImplementationVersion using the specified string representation.

+
+
+ +
+
public static bool TryCreate(string value, out ImplementationVersion? result)
+
+ +

Parameters

+
+
value string
+

The string to parse.

+
+
result ImplementationVersion
+

Returns the created ImplementationVersion if successfully; null otherwise.

+
+
+ +

Returns

+
+
bool
+

true if the ImplementationVersion was successfully created; false otherwise.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ImplementationVersion?, ImplementationVersion?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ImplementationVersion? left, ImplementationVersion? right)
+
+ +

Parameters

+
+
left ImplementationVersion
+

The left object

+
+
right ImplementationVersion
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator >(ImplementationVersion?, ImplementationVersion?) + +

+ +
+
+ +
+
public static bool operator >(ImplementationVersion? left, ImplementationVersion? right)
+
+ +

Parameters

+
+
left ImplementationVersion
+
+
right ImplementationVersion
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator >=(ImplementationVersion?, ImplementationVersion?) + +

+ +
+
+ +
+
public static bool operator >=(ImplementationVersion? left, ImplementationVersion? right)
+
+ +

Parameters

+
+
left ImplementationVersion
+
+
right ImplementationVersion
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator !=(ImplementationVersion?, ImplementationVersion?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ImplementationVersion? left, ImplementationVersion? right)
+
+ +

Parameters

+
+
left ImplementationVersion
+

The left object

+
+
right ImplementationVersion
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator <(ImplementationVersion?, ImplementationVersion?) + +

+ +
+
+ +
+
public static bool operator <(ImplementationVersion? left, ImplementationVersion? right)
+
+ +

Parameters

+
+
left ImplementationVersion
+
+
right ImplementationVersion
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator <=(ImplementationVersion?, ImplementationVersion?) + +

+ +
+
+ +
+
public static bool operator <=(ImplementationVersion? left, ImplementationVersion? right)
+
+ +

Parameters

+
+
left ImplementationVersion
+
+
right ImplementationVersion
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Importance.html b/api/ZeroInstall.Model.Importance.html new file mode 100644 index 000000000..b70258492 --- /dev/null +++ b/api/ZeroInstall.Model.Importance.html @@ -0,0 +1,154 @@ + + + + + Enum Importance | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum Importance +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Describes how important a dependency is (i.e. whether ignoring it is an option).

+
+
+ +
+
public enum Importance
+
+ + + + + + + + + +

Fields +

+
+
Essential = 0
+

A version of the Dependency must be selected.

+
+ +

No version of the Dependency is also an option, although selecting a version is preferable to not selecting one.

+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.InterfaceReference.html b/api/ZeroInstall.Model.InterfaceReference.html new file mode 100644 index 000000000..b3fabcf05 --- /dev/null +++ b/api/ZeroInstall.Model.InterfaceReference.html @@ -0,0 +1,496 @@ + + + + + Class InterfaceReference | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class InterfaceReference +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A reference to an interface URI, e.g. for specifying which interface this feed implements or by which interface it is replaced.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class InterfaceReference : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<InterfaceReference>, IEquatable<InterfaceReference>
+
+ + + + +
+
Inheritance
+
+ + + +
InterfaceReference
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Target + +

+ +

The URI used to locate the interface.

+
+
+ +
+
[Browsable(false)]
+public required FeedUri Target { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this InterfaceReference instance.

+
+
+ +
+
public InterfaceReference Clone()
+
+ + +

Returns

+
+
InterfaceReference
+

The new copy of the InterfaceReference.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the interface reference in the form "Target". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(InterfaceReference?, InterfaceReference?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(InterfaceReference? left, InterfaceReference? right)
+
+ +

Parameters

+
+
left InterfaceReference
+

The left object

+
+
right InterfaceReference
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(InterfaceReference?, InterfaceReference?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(InterfaceReference? left, InterfaceReference? right)
+
+ +

Parameters

+
+
left InterfaceReference
+

The left object

+
+
right InterfaceReference
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ManifestDigest.html b/api/ZeroInstall.Model.ManifestDigest.html new file mode 100644 index 000000000..e9e69c3c0 --- /dev/null +++ b/api/ZeroInstall.Model.ManifestDigest.html @@ -0,0 +1,637 @@ + + + + + Struct ManifestDigest | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct ManifestDigest +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A manifest digest is a means of uniquely identifying an Implementation and verifying its contents.

+
+
+ +
+
[TypeConverter(typeof(ManifestDigestConverter))]
+[Serializable]
+public record struct ManifestDigest : IEquatable<ManifestDigest>
+
+ + + + + +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + +
+ + + + +

Remarks

+

Stores digests of the manifest file using various hashing algorithms.

+
+ + +

Constructors +

+ + + + +

+ ManifestDigest(string) + +

+ +

Creates a new manifest digest structure by parsing a string.

+
+
+ +
+
public ManifestDigest(string value)
+
+ +

Parameters

+
+
value string
+

One or more comma separated digest values.

+
+
+ + + + + + + + + +

Exceptions

+
+
NotSupportedException
+

value contains no known digest algorithms.

+
+
+ + + + + +

+ ManifestDigest(string?, string?, string?, string?) + +

+ +

A manifest digest is a means of uniquely identifying an Implementation and verifying its contents.

+
+
+ +
+
public ManifestDigest(string? Sha1 = null, string? Sha1New = null, string? Sha256 = null, string? Sha256New = null)
+
+ +

Parameters

+
+
Sha1 string
+

A SHA-1 hash of the old manifest format. Not supported anymore!

+
+
Sha1New string
+

A SHA-1 hash of the new manifest format.

+
+
Sha256 string
+

A SHA-256 hash of the new manifest format. (most secure)

+
+
Sha256New string
+

A SHA-256 hash of the new manifest format with a base32 encoding and no equals sign in the path.

+
+
+ + + + + + + + +

Remarks

+

Stores digests of the manifest file using various hashing algorithms.

+
+ + + + +

Fields +

+ + + +

+ Empty + +

+ +

The manifest digest of an empty directory.

+
+
+ +
+
public static readonly ManifestDigest Empty
+
+ + + + +

Field Value

+
+
ManifestDigest
+
+
+ + + + + + + + + + +

+ UnknownAlgorithms + +

+ +

Contains any unknown hash algorithms specified as pure XML attributes.

+
+
+ +
+
[NonSerialized]
+public XmlAttribute[]? UnknownAlgorithms
+
+ + + + +

Field Value

+
+
XmlAttribute[]
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AvailableDigests + +

+ +

Lists all contained manifest digests sorted from best (safest) to worst.

+
+
+ +
+
[Browsable(false)]
+public IEnumerable<string> AvailableDigests { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + + + + + + + +

+ Best + +

+ +

Returns the best entry of AvailableDigests; null if there are none.

+
+
+ +
+
[Browsable(false)]
+public string? Best { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Sha1 + +

+ +

A SHA-1 hash of the old manifest format. Not supported anymore!

+
+
+ +
+
public string? Sha1 { readonly get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Sha1New + +

+ +

A SHA-1 hash of the new manifest format.

+
+
+ +
+
public string? Sha1New { readonly get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Sha256 + +

+ +

A SHA-256 hash of the new manifest format. (most secure)

+
+
+ +
+
public string? Sha256 { readonly get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Sha256New + +

+ +

A SHA-256 hash of the new manifest format with a base32 encoding and no equals sign in the path.

+
+
+ +
+
public string? Sha256New { readonly get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ PartialEquals(ManifestDigest) + +

+ +

Indicates whether this digest is at least partially equal to another one.

+
+
+ +
+
public bool PartialEquals(ManifestDigest other)
+
+ +

Parameters

+
+
other ManifestDigest
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + +

Remarks

+

Two digests are considered partially equal if at least one digest algorithm matches and no values are contradictory.

+
+ + + + + + +

+ ToString() + +

+ +

Returns the manifest digests in the form "sha1new=abc123,sha256new_ABC123,...". Safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ TryParse(string) + +

+ +

Tries to parse a string containing a digest value. +Does nothing if the corresponding algorithm is already set or if the string contains no known digest algorithm.

+
+
+ +
+
public void TryParse(string digest)
+
+ +

Parameters

+
+
digest string
+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer-1.html b/api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer-1.html new file mode 100644 index 000000000..14e913819 --- /dev/null +++ b/api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer-1.html @@ -0,0 +1,303 @@ + + + + + Class ManifestDigestPartialEqualityComparer<T> | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ManifestDigestPartialEqualityComparer<T> +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ + +
+ +
+
public sealed class ManifestDigestPartialEqualityComparer<T> : IEqualityComparer<T> where T : ImplementationBase
+
+ + + +

Type Parameters

+
+
T
+
+
+ +
+
Inheritance
+
+ +
ManifestDigestPartialEqualityComparer<T>
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Fields +

+ + + +

+ Instance + +

+ +

A singleton instance of the comparer.

+
+
+ +
+
public static readonly ManifestDigestPartialEqualityComparer<T> Instance
+
+ + + + +

Field Value

+
+
ManifestDigestPartialEqualityComparer<T>
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Equals(T?, T?) + +

+ +

Determines whether the specified objects are equal.

+
+
+ +
+
public bool Equals(T? x, T? y)
+
+ +

Parameters

+
+
x T
+

The first object of type T to compare.

+
+
y T
+

The second object of type T to compare.

+
+
+ +

Returns

+
+
bool
+

true if the specified objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode(T) + +

+ +

Always returns 0. The concept of hashing is not applicable to partial equality.

+
+
+ +
+
public int GetHashCode(T obj)
+
+ +

Parameters

+
+
obj T
+
+
+ +

Returns

+
+
int
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer.html b/api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer.html new file mode 100644 index 000000000..588233e08 --- /dev/null +++ b/api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer.html @@ -0,0 +1,298 @@ + + + + + Class ManifestDigestPartialEqualityComparer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ManifestDigestPartialEqualityComparer +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ + +
+ +
+
public sealed class ManifestDigestPartialEqualityComparer : IEqualityComparer<ManifestDigest>
+
+ + + + +
+
Inheritance
+
+ +
ManifestDigestPartialEqualityComparer
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Fields +

+ + + +

+ Instance + +

+ +

A singleton instance of the comparer.

+
+
+ +
+
public static readonly ManifestDigestPartialEqualityComparer Instance
+
+ + + + +

Field Value

+
+
ManifestDigestPartialEqualityComparer
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Equals(ManifestDigest, ManifestDigest) + +

+ +

Determines whether the specified objects are equal.

+
+
+ +
+
public bool Equals(ManifestDigest x, ManifestDigest y)
+
+ +

Parameters

+
+
x ManifestDigest
+

The first object of type T to compare.

+
+
y ManifestDigest
+

The second object of type T to compare.

+
+
+ +

Returns

+
+
bool
+

true if the specified objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode(ManifestDigest) + +

+ +

Always returns 0. The concept of hashing is not applicable to partial equality.

+
+
+ +
+
public int GetHashCode(ManifestDigest obj)
+
+ +

Parameters

+
+
obj ManifestDigest
+
+
+ +

Returns

+
+
int
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ModelUtils.html b/api/ZeroInstall.Model.ModelUtils.html new file mode 100644 index 000000000..8f6ad052c --- /dev/null +++ b/api/ZeroInstall.Model.ModelUtils.html @@ -0,0 +1,446 @@ + + + + + Class ModelUtils | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ModelUtils +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Provides utility methods for interface and feed URIs.

+
+
+ +
+
public static class ModelUtils
+
+ + + + +
+
Inheritance
+
+ +
ModelUtils
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Version + +

+ +

The version of Zero Install feed model (used for compatibility checks).

+
+
+ +
+
public static ImplementationVersion Version { get; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ContainsTemplateVariables(string) + +

+ +

Determines whether a string contains a template variable (a substring enclosed in curly brackets, e.g {var}).

+
+
+ +
+
public static bool ContainsTemplateVariables(string value)
+
+ +

Parameters

+
+
value string
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetAbsoluteHref(Uri, string?) + +

+ +

Turns a relative HREF into an absolute one, using the file containing the reference as the base.

+
+
+ +
+
public static Uri GetAbsoluteHref(Uri href, string? source)
+
+ +

Parameters

+
+
href Uri
+

The potentially relative HREF; will remain untouched if absolute.

+
+
source string
+

The file containing the reference; can be null.

+
+
+ +

Returns

+
+
Uri
+

An absolute HREF.

+
+
+ + + + + + + + +

Exceptions

+
+
UriFormatException
+

href is a relative URI that cannot be resolved.

+
+
+ + + + + +

+ GetAbsoluteHref(Uri, FeedUri?) + +

+ +

Turns a relative HREF into an absolute one, using the file containing the reference as the base.

+
+
+ +
+
public static Uri GetAbsoluteHref(Uri href, FeedUri? source = null)
+
+ +

Parameters

+
+
href Uri
+

The potentially relative HREF; will remain untouched if absolute.

+
+
source FeedUri
+

The file containing the reference; can be null.

+
+
+ +

Returns

+
+
Uri
+

An absolute HREF.

+
+
+ + + + + + + + +

Exceptions

+
+
UriFormatException
+

href is a relative URI that cannot be resolved.

+
+
+ + + + + +

+ GetAbsolutePath(string, string?) + +

+ +

Turns a relative path into an absolute one, using the file containing the reference as the base.

+
+
+ +
+
public static string GetAbsolutePath(string path, string? source)
+
+ +

Parameters

+
+
path string
+

The potentially relative path; will remain untouched if absolute.

+
+
source string
+

The file containing the reference; can be null.

+
+
+ +

Returns

+
+
string
+

An absolute path.

+
+
+ + + + + + + + +

Exceptions

+
+
UriFormatException
+

path is a relative URI that cannot be resolved.

+
+
+ + + + + +

+ GetAbsolutePath(string, FeedUri?) + +

+ +

Turns a relative path into an absolute one, using the file containing the reference as the base.

+
+
+ +
+
public static string GetAbsolutePath(string path, FeedUri? source = null)
+
+ +

Parameters

+
+
path string
+

The potentially relative path; will remain untouched if absolute.

+
+
source FeedUri
+

The file containing the reference; can be null.

+
+
+ +

Returns

+
+
string
+

An absolute path.

+
+
+ + + + + + + + +

Exceptions

+
+
UriFormatException
+

path is a relative URI that cannot be resolved.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.OS.html b/api/ZeroInstall.Model.OS.html new file mode 100644 index 000000000..a8738c1fd --- /dev/null +++ b/api/ZeroInstall.Model.OS.html @@ -0,0 +1,186 @@ + + + + + Enum OS | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum OS +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Describes an operating system family.

+
+
+ +
+
[TypeConverter(typeof(EnumXmlConverter<OS>))]
+public enum OS
+
+ + + + + + + + +
+
Extension Methods
+
+ +
+ +

Fields +

+
+
All = 0
+

Supports all operating systems (e.g. developed with cross-platform language like Java).

+
+
Cygwin = 7
+

A Unix-compatibility layer for Windows.

+
+
Darwin = 5
+

MacOSX, without the proprietary bits.

+
+
FreeBsd = 4
+

Supports only FreeBSD.

+
+
Linux = 2
+

Supports only Linux operating systems.

+
+
MacOSX = 6
+

Supports only MacOS X.

+
+
Posix = 1
+

Everything except Windows.

+
+
Solaris = 3
+

Supports only Solaris.

+
+
Unknown = 100
+

The supported operating system has not been set yet.

+
+
Windows = 8
+

Supports only Windows NT 5.0+ (Windows 2000, XP, 2003, Vista, 2008, 7, 2008 R2, ...).

+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.OverlayBinding.html b/api/ZeroInstall.Model.OverlayBinding.html new file mode 100644 index 000000000..6b61ce91e --- /dev/null +++ b/api/ZeroInstall.Model.OverlayBinding.html @@ -0,0 +1,496 @@ + + + + + Class OverlayBinding | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class OverlayBinding +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Make a chosen Implementation available by overlaying it onto another part of the file-system.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class OverlayBinding : Binding, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Binding>, IEquatable<OverlayBinding>
+
+ + + + +
+
Inheritance
+
+ + + + +
OverlayBinding
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + +
+ + + + +

Remarks

+

This is to support legacy programs which use hard-coded paths.

+
+ + +

Properties +

+ + + + +

+ MountPoint + +

+ +

The mount point on which src is to appear in the filesystem. If missing, '/' (on POSIX) or '%systemdrive%' (on Windows) is assumed.

+
+
+ +
+
public string? MountPoint { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Source + +

+ +

The relative path of the directory in the implementation to publish. The default is to publish everything.

+
+
+ +
+
public string? Source { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this OverlayBinding instance.

+
+
+ +
+
public override Binding Clone()
+
+ + +

Returns

+
+
Binding
+

The new copy of the OverlayBinding.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the binding in the form "Source => MountPoint". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(OverlayBinding?, OverlayBinding?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(OverlayBinding? left, OverlayBinding? right)
+
+ +

Parameters

+
+
left OverlayBinding
+

The left object

+
+
right OverlayBinding
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(OverlayBinding?, OverlayBinding?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(OverlayBinding? left, OverlayBinding? right)
+
+ +

Parameters

+
+
left OverlayBinding
+

The left object

+
+
right OverlayBinding
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.PackageImplementation.html b/api/ZeroInstall.Model.PackageImplementation.html new file mode 100644 index 000000000..e8613e5d7 --- /dev/null +++ b/api/ZeroInstall.Model.PackageImplementation.html @@ -0,0 +1,740 @@ + + + + + Class PackageImplementation | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PackageImplementation +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An implementation provided by a distribution-specific package manager instead of Zero Install.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class PackageImplementation : Element, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IEquatable<TargetBase>, IBindingContainer, IDependencyContainer, ICloneable<Element>, IEquatable<Element>, IEquatable<PackageImplementation>
+
+ + + + +
+
Inheritance
+
+ + + + + +
PackageImplementation
+
+
+ +
+
Implements
+
+ + + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + +

Remarks

+

Any Bindings inside Dependencys for the Feed will be ignored; it is assumed that the requiring component knows how to use the packaged version without further help.

+
+ + +

Fields +

+ + + +

+ DistributionNames + +

+ +

Well-known values for Distributions.

+
+
+ +
+
public static readonly string[] DistributionNames
+
+ + + + +

Field Value

+
+
string[]
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Distributions + +

+ +

A list of distribution names (e.g. Debian, RPM) where Package applies. Applies everywhere if empty.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<string> Distributions { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ DistributionsString + +

+ +

Used for XML serialization.

+
+
+ +
+
[TypeConverter(typeof(DistributionNameConverter))]
+[IgnoreEquality]
+public string DistributionsString { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + +
+
See Also
+
+ +
+
+ + + + +

+ Package + +

+ +

The name of the package in the distribution-specific package manager.

+
+
+ +
+
public string? Package { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Version + +

+ +

The range of versions to accept for the specified Package.

+
+
+ +
+
public VersionRange? Version { get; set; }
+
+ + + + + +

Property Value

+
+
VersionRange
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this PackageImplementation instance.

+
+
+ +
+
public override Element Clone()
+
+ + +

Returns

+
+
Element
+

The new copy of the PackageImplementation.

+
+
+ + + + + + + + + + + + + +

+ CloneImplementation() + +

+ +

Creates a deep copy of this PackageImplementation instance.

+
+
+ +
+
public PackageImplementation CloneImplementation()
+
+ + +

Returns

+
+
PackageImplementation
+

The new copy of the PackageImplementation.

+
+
+ + + + + + + + + + + + + +

+ EnsureAttributes() + +

+ +

Ensures that required values deserialized from XML attributes are set (not null).

+
+
+ +
+
protected override void EnsureAttributes()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the implementation in the form "Package (Distributions)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(PackageImplementation?, PackageImplementation?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(PackageImplementation? left, PackageImplementation? right)
+
+ +

Parameters

+
+
left PackageImplementation
+

The left object

+
+
right PackageImplementation
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(PackageImplementation?, PackageImplementation?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(PackageImplementation? left, PackageImplementation? right)
+
+ +

Parameters

+
+
left PackageImplementation
+

The left object

+
+
right PackageImplementation
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Preferences.FeedPreferences.html b/api/ZeroInstall.Model.Preferences.FeedPreferences.html new file mode 100644 index 000000000..740c934e1 --- /dev/null +++ b/api/ZeroInstall.Model.Preferences.FeedPreferences.html @@ -0,0 +1,682 @@ + + + + + Class FeedPreferences | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedPreferences +

+ +
+
Namespace
ZeroInstall.Model.Preferences
+
Assembly
ZeroInstall.Model.dll
+
+ +

Stores user-specific preferences for a Feed.

+
+
+ +
+
[Equatable]
+public sealed class FeedPreferences : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<FeedPreferences>, IEquatable<FeedPreferences>
+
+ + + + +
+
Inheritance
+
+ + +
FeedPreferences
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Implementations + +

+ +

A list of implementation-specific user-overrides.

+
+
+ +
+
[OrderedEquality]
+public List<ImplementationPreferences> Implementations { get; }
+
+ + + + + +

Property Value

+
+
List<ImplementationPreferences>
+
+
+ + + + + + + + + + +

+ this[string] + +

+ +

Retrieves an existing entry from Implementations by ID or creates a new one if no appropriate one exists.

+
+
+ +
+
public ImplementationPreferences this[string id] { get; }
+
+ +

Parameters

+
+
id string
+

The ID to search for.

+
+
+ + + + +

Property Value

+
+
ImplementationPreferences
+

The found or newly created ImplementationPreferences.

+
+
+ + + + + + + + + + +

+ LastChecked + +

+ +

The point in time this feed was last checked for updates.

+
+
+ +
+
public UnixTime LastChecked { get; set; }
+
+ + + + + +

Property Value

+
+
UnixTime
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this FeedPreferences instance.

+
+
+ +
+
public FeedPreferences Clone()
+
+ + +

Returns

+
+
FeedPreferences
+

The new copy of the FeedPreferences.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ LoadFor(FeedUri) + +

+ +

Loads FeedPreferences for a specific feed.

+
+
+ +
+
public static FeedPreferences LoadFor(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed to load the preferences for.

+
+
+ +

Returns

+
+
FeedPreferences
+

The loaded FeedPreferences.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ LoadForSafe(FeedUri) + +

+ +

Tries to load FeedPreferences for a specific feed. Automatically falls back to defaults on errors.

+
+
+ +
+
public static FeedPreferences LoadForSafe(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed to load the preferences for.

+
+
+ +

Returns

+
+
FeedPreferences
+

The loaded FeedPreferences or default value if there was a problem.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Removes superfluous entries from Implementations.

+
+
+ +
+
public void Normalize()
+
+ + + + + + + + + + + + + + + +

+ SaveFor(FeedUri) + +

+ +

Saves these FeedPreferences for a specific feed.

+
+
+ +
+
public void SaveFor(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed to save the preferences for.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing the file.

+
+
UnauthorizedAccessException
+

Write access to the file is not permitted.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the preferences in the form "FeedPreferences: LastChecked". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(FeedPreferences?, FeedPreferences?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(FeedPreferences? left, FeedPreferences? right)
+
+ +

Parameters

+
+
left FeedPreferences
+

The left object

+
+
right FeedPreferences
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(FeedPreferences?, FeedPreferences?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(FeedPreferences? left, FeedPreferences? right)
+
+ +

Parameters

+
+
left FeedPreferences
+

The left object

+
+
right FeedPreferences
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Preferences.ImplementationPreferences.html b/api/ZeroInstall.Model.Preferences.ImplementationPreferences.html new file mode 100644 index 000000000..178d93287 --- /dev/null +++ b/api/ZeroInstall.Model.Preferences.ImplementationPreferences.html @@ -0,0 +1,550 @@ + + + + + Class ImplementationPreferences | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationPreferences +

+ +
+
Namespace
ZeroInstall.Model.Preferences
+
Assembly
ZeroInstall.Model.dll
+
+ +

Stores user-specific preferences for an Implementation.

+
+
+ +
+
[Equatable]
+public sealed class ImplementationPreferences : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<ImplementationPreferences>, IEquatable<ImplementationPreferences>
+
+ + + + +
+
Inheritance
+
+ + +
ImplementationPreferences
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ID + +

+ +

A unique identifier for the implementation. Corresponds to ID.

+
+
+ +
+
public required string ID { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ IsSuperfluous + +

+ +

Indicates whether this configuration object stores no information other than the ID and is thus superfluous.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public bool IsSuperfluous { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ RolloutPercentage + +

+ +

A random number used to compare against RolloutPercentage.

+
+
+ +
+
[Browsable(false)]
+public int RolloutPercentage { get; set; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ UserStability + +

+ +

A user-specified override for Stability specified in the feed.

+
+
+ +
+
public Stability UserStability { get; set; }
+
+ + + + + +

Property Value

+
+
Stability
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this ImplementationPreferences instance.

+
+
+ +
+
public ImplementationPreferences Clone()
+
+ + +

Returns

+
+
ImplementationPreferences
+

The new copy of the ImplementationPreferences.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the preferences in the form "ImplementationPreferences: ID". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ImplementationPreferences?, ImplementationPreferences?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ImplementationPreferences? left, ImplementationPreferences? right)
+
+ +

Parameters

+
+
left ImplementationPreferences
+

The left object

+
+
right ImplementationPreferences
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ImplementationPreferences?, ImplementationPreferences?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ImplementationPreferences? left, ImplementationPreferences? right)
+
+ +

Parameters

+
+
left ImplementationPreferences
+

The left object

+
+
right ImplementationPreferences
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Preferences.InterfacePreferences.html b/api/ZeroInstall.Model.Preferences.InterfacePreferences.html new file mode 100644 index 000000000..cfc720350 --- /dev/null +++ b/api/ZeroInstall.Model.Preferences.InterfacePreferences.html @@ -0,0 +1,649 @@ + + + + + Class InterfacePreferences | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class InterfacePreferences +

+ +
+
Namespace
ZeroInstall.Model.Preferences
+
Assembly
ZeroInstall.Model.dll
+
+ +

Stores user-specific preferences for an interface.

+
+
+ +
+
[Equatable]
+public sealed class InterfacePreferences : XmlUnknown, IEquatable<XmlUnknown>, ICloneable<InterfacePreferences>, IEquatable<InterfacePreferences>
+
+ + + + +
+
Inheritance
+
+ + +
InterfacePreferences
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Feeds + +

+ +

Zero ore more additional feeds containing implementations of this interface.

+
+
+ +
+
[OrderedEquality]
+public List<FeedReference> Feeds { get; }
+
+ + + + + +

Property Value

+
+
List<FeedReference>
+
+
+ + + + + + + + + + +

+ StabilityPolicy + +

+ +

Implementations at this stability level or higher are preferred. Lower levels are used only if there is no other choice.

+
+
+ +
+
public Stability StabilityPolicy { get; set; }
+
+ + + + + +

Property Value

+
+
Stability
+
+
+ + + + + + + + + + +

+ Uri + +

+ +

The URI of the interface to be configured.

+
+
+ +
+
[Browsable(false)]
+public required FeedUri Uri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this InterfacePreferences instance.

+
+
+ +
+
public InterfacePreferences Clone()
+
+ + +

Returns

+
+
InterfacePreferences
+

The new copy of the InterfacePreferences.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ LoadFor(FeedUri) + +

+ +

Loads InterfacePreferences for a specific interface.

+
+
+ +
+
public static InterfacePreferences LoadFor(FeedUri interfaceUri)
+
+ +

Parameters

+
+
interfaceUri FeedUri
+

The interface to load the preferences for.

+
+
+ +

Returns

+
+
InterfacePreferences
+

The loaded InterfacePreferences.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ LoadForSafe(FeedUri) + +

+ +

Tries to load InterfacePreferences for a specific interface. Automatically falls back to defaults on errors.

+
+
+ +
+
public static InterfacePreferences LoadForSafe(FeedUri interfaceUri)
+
+ +

Parameters

+
+
interfaceUri FeedUri
+

The interface to load the preferences for.

+
+
+ +

Returns

+
+
InterfacePreferences
+

The loaded InterfacePreferences or default value if there was a problem.

+
+
+ + + + + + + + + + + + + +

+ SaveFor(FeedUri) + +

+ +

Saves these InterfacePreferences for a specific interface.

+
+
+ +
+
public void SaveFor(FeedUri interfaceUri)
+
+ +

Parameters

+
+
interfaceUri FeedUri
+

The interface to save the preferences for.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing the file.

+
+
UnauthorizedAccessException
+

Write access to the file is not permitted.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the preferences in the form "InterfacePreferences: Uri". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(InterfacePreferences?, InterfacePreferences?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(InterfacePreferences? left, InterfacePreferences? right)
+
+ +

Parameters

+
+
left InterfacePreferences
+

The left object

+
+
right InterfacePreferences
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(InterfacePreferences?, InterfacePreferences?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(InterfacePreferences? left, InterfacePreferences? right)
+
+ +

Parameters

+
+
left InterfacePreferences
+

The left object

+
+
right InterfacePreferences
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Preferences.html b/api/ZeroInstall.Model.Preferences.html new file mode 100644 index 000000000..193333dda --- /dev/null +++ b/api/ZeroInstall.Model.Preferences.html @@ -0,0 +1,140 @@ + + + + + Namespace ZeroInstall.Model.Preferences | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Model.Preferences

+
+

Structures for user-specified preferences and overrides for interfaces, feeds and implementations.

+
+
+
+ +

+Classes +

+
+
FeedPreferences
+

Stores user-specific preferences for a Feed.

+
+
+
+
ImplementationPreferences
+

Stores user-specific preferences for an Implementation.

+
+
+
+
InterfacePreferences
+

Stores user-specific preferences for an interface.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Recipe.html b/api/ZeroInstall.Model.Recipe.html new file mode 100644 index 000000000..9803b4c51 --- /dev/null +++ b/api/ZeroInstall.Model.Recipe.html @@ -0,0 +1,535 @@ + + + + + Class Recipe | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Recipe +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Retrieves an implementation by applying a list of IRecipeSteps, such as downloading and combining multiple archives.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class Recipe : RetrievalMethod, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<RetrievalMethod>, IEquatable<Recipe>
+
+ + + + +
+
Inheritance
+
+ + + + +
Recipe
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ContainsUnknownSteps + +

+ +

Indicates whether this recipe contains steps of unknown type and therefore can not be processed.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public bool ContainsUnknownSteps { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Steps + +

+ +

An ordered list of IRecipeSteps to execute.

+
+
+ +
+
[OrderedEquality]
+public List<IRecipeStep> Steps { get; }
+
+ + + + + +

Property Value

+
+
List<IRecipeStep>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Recipe instance.

+
+
+ +
+
public override RetrievalMethod Clone()
+
+ + +

Returns

+
+
RetrievalMethod
+

The new copy of the Recipe.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
UriFormatException
+

Href is relative and feedUri is a remote URI.

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the recipe in the form "Recipe (X steps)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Recipe?, Recipe?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Recipe? left, Recipe? right)
+
+ +

Parameters

+
+
left Recipe
+

The left object

+
+
right Recipe
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Recipe?, Recipe?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Recipe? left, Recipe? right)
+
+ +

Parameters

+
+
left Recipe
+

The left object

+
+
right Recipe
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.RemoveStep.html b/api/ZeroInstall.Model.RemoveStep.html new file mode 100644 index 000000000..4b904e860 --- /dev/null +++ b/api/ZeroInstall.Model.RemoveStep.html @@ -0,0 +1,497 @@ + + + + + Class RemoveStep | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RemoveStep +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Removes or moves a file or directory. It is an error if the path is outside the implementation.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class RemoveStep : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IRecipeStep, ICloneable<IRecipeStep>, IEquatable<RemoveStep>
+
+ + + + +
+
Inheritance
+
+ + + +
RemoveStep
+
+
+ +
+
Implements
+
+ + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Path + +

+ +

The file or directory to be removed relative to the implementation root as a Unix-style path.

+
+
+ +
+
public required string Path { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this RemoveStep instance.

+
+
+ +
+
public IRecipeStep Clone()
+
+ + +

Returns

+
+
IRecipeStep
+

The new copy of the RemoveStep.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
UriFormatException
+

Href is relative and feedUri is a remote URI.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the remove step in the form "Path". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(RemoveStep?, RemoveStep?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(RemoveStep? left, RemoveStep? right)
+
+ +

Parameters

+
+
left RemoveStep
+

The left object

+
+
right RemoveStep
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(RemoveStep?, RemoveStep?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(RemoveStep? left, RemoveStep? right)
+
+ +

Parameters

+
+
left RemoveStep
+

The left object

+
+
right RemoveStep
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.RenameStep.html b/api/ZeroInstall.Model.RenameStep.html new file mode 100644 index 000000000..72440dd29 --- /dev/null +++ b/api/ZeroInstall.Model.RenameStep.html @@ -0,0 +1,529 @@ + + + + + Class RenameStep | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RenameStep +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Renames or moves a file or directory. It is an error if the source or destination are outside the implementation.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class RenameStep : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IRecipeStep, ICloneable<IRecipeStep>, IEquatable<RenameStep>
+
+ + + + +
+
Inheritance
+
+ + + +
RenameStep
+
+
+ +
+
Implements
+
+ + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Destination + +

+ +

The destination file or directory relative to the implementation root as a Unix-style path.

+
+
+ +
+
public required string Destination { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Source + +

+ +

The source file or directory relative to the implementation root as a Unix-style path.

+
+
+ +
+
public required string Source { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this RenameStep instance.

+
+
+ +
+
public IRecipeStep Clone()
+
+ + +

Returns

+
+
IRecipeStep
+

The new copy of the RenameStep.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Converts legacy elements, sets default values, etc..

+
+
+ +
+
public void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
UriFormatException
+

Href is relative and feedUri is a remote URI.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the rename step in the form "Source => Destination". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(RenameStep?, RenameStep?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(RenameStep? left, RenameStep? right)
+
+ +

Parameters

+
+
left RenameStep
+

The left object

+
+
right RenameStep
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(RenameStep?, RenameStep?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(RenameStep? left, RenameStep? right)
+
+ +

Parameters

+
+
left RenameStep
+

The left object

+
+
right RenameStep
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Requirements.html b/api/ZeroInstall.Model.Requirements.html new file mode 100644 index 000000000..34d809fe1 --- /dev/null +++ b/api/ZeroInstall.Model.Requirements.html @@ -0,0 +1,864 @@ + + + + + Class Requirements | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Requirements +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A set of requirements/restrictions imposed by the user on the Implementation selection process. Used as input for the solver.

+
+
+ +
+
[Serializable]
+[Equatable]
+public record Requirements : IEquatable<Requirements>
+
+ + + + +
+
Inheritance
+
+ +
Requirements
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Requirements() + +

+ +

Creates an empty requirements object. Use this to fill in values incrementally, e.g. when parsing command-line arguments.

+
+
+ +
+
public Requirements()
+
+ + + + + + + + + + + + + + + +

+ Requirements(FeedUri, string?, Architecture) + +

+ +

Creates a new requirements object.

+
+
+ +
+
public Requirements(FeedUri interfaceUri, string? command = null, Architecture architecture = default)
+
+ +

Parameters

+
+
interfaceUri FeedUri
+

The URI or local path (must be absolute) to the interface to solve the dependencies for.

+
+
command string
+

The name of the command in the implementation to execute. Will default to NameRun or NameCompile if null. Will not try to find any command if set to Empty.

+
+
architecture Architecture
+

The architecture to find executables for. Find for the current system if left at default value.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Architecture + +

+ +

The architecture to find executables for. Find for the current system if left at default value.

+
+
+ +
+
[JsonIgnore]
+public Architecture Architecture { get; set; }
+
+ + + + + +

Property Value

+
+
Architecture
+
+
+ + + + +

Remarks

+

Will default to CurrentSystem if left at default value. Will not try to find any command if set to Empty.

+
+ + + + + + +

+ Command + +

+ +

The name of the command in the implementation to execute. Will default to NameRun or NameCompile if null. Will not try to find any command if set to Empty.

+
+
+ +
+
[TypeConverter(typeof(CommandNameConverter))]
+[JsonProperty("command")]
+public string? Command { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ CpuString + +

+ +

Used for XML and JSON serialization.

+
+
+ +
+
[Browsable(false)]
+[JsonProperty("cpu", DefaultValueHandling = DefaultValueHandling.Ignore)]
+public string CpuString { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + +
+
See Also
+
+ +
+
+ + + + +

+ Distributions + +

+ +

Specifies that the selected implementations must be from one of the given distributions (e.g. Debian, RPM). +The special value DistributionZeroInstall may be used to require implementations provided by Zero Install (i.e. one not provided by a PackageImplementation).

+
+
+ +
+
[Browsable(false)]
+[JsonIgnore]
+[UnorderedEquality]
+public List<string> Distributions { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + +

Remarks

+

Used internally by solvers, copied from Distributions, not set directly by user, not serialized.

+
+ + + + + + +

+ ExtraRestrictions + +

+ +

The ranges of versions of specific sub-implementations that can be chosen.

+
+
+ +
+
[JsonProperty("extra_restrictions")]
+[UnorderedEquality]
+public Dictionary<FeedUri, VersionRange> ExtraRestrictions { get; }
+
+ + + + + +

Property Value

+
+
Dictionary<FeedUri, VersionRange>
+
+
+ + + + + + + + + + +

+ InterfaceUri + +

+ +

The URI or local path (must be absolute) to the interface to solve the dependencies for.

+
+
+ +
+
[JsonProperty("interface")]
+public required FeedUri InterfaceUri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ Languages + +

+ +

The preferred languages for the implementation.

+
+
+ +
+
[JsonIgnore]
+[SetEquality]
+public LanguageSet Languages { get; }
+
+ + + + + +

Property Value

+
+
LanguageSet
+
+
+ + + + + + + + + + +

+ Message + +

+ +

Message to display when interacting with user.

+
+
+ +
+
[JsonProperty("message", DefaultValueHandling = DefaultValueHandling.Ignore)]
+public string? Message { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ OSString + +

+ +

Used for XML and JSON serialization.

+
+
+ +
+
[Browsable(false)]
+[JsonProperty("os", DefaultValueHandling = DefaultValueHandling.Ignore)]
+public string OSString { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + +
+
See Also
+
+ +
+
+ + + + +

+ Source + +

+ +

Used for XML and JSON serialization.

+
+
+ +
+
[Browsable(false)]
+[JsonProperty("source")]
+public bool Source { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + +
+
See Also
+
+ +
+
+ + +

Methods +

+ + + + +

+ AddRestriction(FeedUri, VersionRange) + +

+ +

Adds version restriction for a specific feeds. Merges with any existing restrictions for that feed.

+
+
+ +
+
public void AddRestriction(FeedUri feedUri, VersionRange versions)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed URI to apply the restriction for.

+
+
versions VersionRange
+

The version range set to restrict to.

+
+
+ + + + + + + + + + + + + + +

+ Equals(Requirements?) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public virtual bool Equals(Requirements? other)
+
+ +

Parameters

+
+
other Requirements
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ ForCurrentSystem() + +

+ +

Substitutes blank values with default values appropriate for the current system.

+
+
+ +
+
public Requirements ForCurrentSystem()
+
+ + +

Returns

+
+
Requirements
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToCommandLineArgs() + +

+ +

Transforms the requirements into a command-line arguments.

+
+
+ +
+
public string[] ToCommandLineArgs()
+
+ + +

Returns

+
+
string[]
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the requirements in the form "InterfaceUri (Command)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ implicit operator Requirements(FeedUri) + +

+ +

Convenience cast for creating simple Requirements from a FeedUri.

+
+
+ +
+
public static implicit operator Requirements(FeedUri uri)
+
+ +

Parameters

+
+
uri FeedUri
+
+
+ +

Returns

+
+
Requirements
+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Restriction.html b/api/ZeroInstall.Model.Restriction.html new file mode 100644 index 000000000..810d0a573 --- /dev/null +++ b/api/ZeroInstall.Model.Restriction.html @@ -0,0 +1,829 @@ + + + + + Class Restriction | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Restriction +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Restricts the versions of an Implementation that are allowed without creating a dependency on the implementation if its was not already chosen.

+
+
+ +
+
[Serializable]
+[Equatable]
+public class Restriction : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IInterfaceUri, ICloneable<Restriction>, IEquatable<Restriction>
+
+ + + + +
+
Inheritance
+
+ + + +
Restriction
+
+
+ +
+
Implements
+
+ + + + + +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ DistributionZeroInstall + +

+ +

Special value for Distributions that requires require an implementation provided by Zero Install (i.e. one not provided by a PackageImplementation).

+
+
+ +
+
public const string DistributionZeroInstall = "0install"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Constraints + +

+ +

A list of version Constraints that must be fulfilled.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<Constraint> Constraints { get; }
+
+ + + + + +

Property Value

+
+
List<Constraint>
+
+
+ + + + + + + + + + +

+ Distributions + +

+ +

Specifies that the selected implementation must be from one of the given distributions (e.g. Debian, RPM). +The special value DistributionZeroInstall may be used to require an implementation provided by Zero Install (i.e. one not provided by a PackageImplementation).

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<string> Distributions { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ DistributionsString + +

+ +

Specifies that the selected implementation must be from one of the space-separated distributions (e.g. Debian, RPM). +The special value '0install' may be used to require an implementation provided by Zero Install (i.e. one not provided by a PackageImplementation).

+
+
+ +
+
[TypeConverter(typeof(DistributionNameConverter))]
+[IgnoreEquality]
+public string DistributionsString { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + +
+
See Also
+
+ +
+
+ + + + +

+ InterfaceUri + +

+ +

The URI or local path used to identify the interface.

+
+
+ +
+
public required FeedUri InterfaceUri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ OS + +

+ +

Determines for which operating systems this dependency is required.

+
+
+ +
+
public OS OS { get; set; }
+
+ + + + + +

Property Value

+
+
OS
+
+
+ + + + + + + + + + +

+ Versions + +

+ +

A more flexible alternative to Constraints. +Each range is in the form "START..!END". The range matches versions where START <= VERSION < END. The start or end may be omitted. A single version number may be used instead of a range to match only that version, or !VERSION to match everything except that version.

+
+
+ +
+
public VersionRange? Versions { get; set; }
+
+ + + + + +

Property Value

+
+
VersionRange
+
+
+ + + + + + + + + + +

+ XmlTagName + +

+ +
+
+ +
+
protected virtual string XmlTagName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Restriction instance.

+
+
+ +
+
public virtual Restriction Clone()
+
+ + +

Returns

+
+
Restriction
+

The new copy of the Restriction.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Restriction?) + +

+ +
+
+ +
+
protected bool Equals(Restriction? other)
+
+ +

Parameters

+
+
other Restriction
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ IsApplicable(Requirements) + +

+ +

Determines whether this reference is applicable for the given requirements.

+
+
+ +
+
public virtual bool IsApplicable(Requirements requirements)
+
+ +

Parameters

+
+
requirements Requirements
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Flattens inheritance structures, Converts legacy elements, sets default values, etc..

+
+
+ +
+
public virtual void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the dependency in the form "Interface". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Restriction?, Restriction?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Restriction? left, Restriction? right)
+
+ +

Parameters

+
+
left Restriction
+

The left object

+
+
right Restriction
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Restriction?, Restriction?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Restriction? left, Restriction? right)
+
+ +

Parameters

+
+
left Restriction
+

The left object

+
+
right Restriction
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.RetrievalMethod.html b/api/ZeroInstall.Model.RetrievalMethod.html new file mode 100644 index 000000000..5bf787c69 --- /dev/null +++ b/api/ZeroInstall.Model.RetrievalMethod.html @@ -0,0 +1,304 @@ + + + + + Class RetrievalMethod | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RetrievalMethod +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A retrieval method is a way of getting a copy of an Implementation.

+
+
+ +
+
public abstract class RetrievalMethod : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<RetrievalMethod>
+
+ + + + +
+
Inheritance
+
+ + + +
RetrievalMethod
+
+
+ +
+
Implements
+
+ + + +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this RetrievalMethod instance.

+
+
+ +
+
public abstract RetrievalMethod Clone()
+
+ + +

Returns

+
+
RetrievalMethod
+

The new copy of the RetrievalMethod.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Sets missing default values and handles legacy elements.

+
+
+ +
+
public virtual void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
UriFormatException
+

Href is relative and feedUri is a remote URI.

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Runner.html b/api/ZeroInstall.Model.Runner.html new file mode 100644 index 000000000..ae0f61a3f --- /dev/null +++ b/api/ZeroInstall.Model.Runner.html @@ -0,0 +1,695 @@ + + + + + Class Runner | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Runner +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A special kind of dependency: the program that is used to run this one. For example, a Python program might specify Python as its runner.

+
+
+ +
+
[Serializable]
+[Equatable]
+public class Runner : Dependency, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<Restriction>, IEquatable<Restriction>, IInterfaceUriBindingContainer, IInterfaceUri, IBindingContainer, ICloneable<Dependency>, IEquatable<Dependency>, IArgBaseContainer, IEquatable<Runner>
+
+ + + + +
+
Inheritance
+
+ + + + + +
Runner
+
+
+ +
+
Implements
+
+ + + + + + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Arguments + +

+ +

A list of command-line arguments to be passed to the runner before the path of the implementation.

+
+
+ +
+
[Browsable(false)]
+[OrderedEquality]
+public List<ArgBase> Arguments { get; }
+
+ + + + + +

Property Value

+
+
List<ArgBase>
+
+
+ + + + + + + + + + +

+ Command + +

+ +

The name of the command in the InterfaceUri to use; leave null for NameRun.

+
+
+ +
+
[TypeConverter(typeof(CommandNameConverter))]
+public string? Command { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ XmlTagName + +

+ +
+
+ +
+
protected override string XmlTagName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Runner instance.

+
+
+ +
+
public override Restriction Clone()
+
+ + +

Returns

+
+
Restriction
+

The new copy of the Runner.

+
+
+ + + + + + + + + + + + + +

+ CloneRunner() + +

+ +

Creates a deep copy of this Runner instance.

+
+
+ +
+
public Runner CloneRunner()
+
+ + +

Returns

+
+
Runner
+

The new copy of the Runner.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Runner?) + +

+ +
+
+ +
+
protected bool Equals(Runner? other)
+
+ +

Parameters

+
+
other Runner
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ +

Flattens inheritance structures, Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the runner in the form "Interface (Command)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Runner?, Runner?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Runner? left, Runner? right)
+
+ +

Parameters

+
+
left Runner
+

The left object

+
+
right Runner
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Runner?, Runner?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Runner? left, Runner? right)
+
+ +

Parameters

+
+
left Runner
+

The left object

+
+
right Runner
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+
+ +
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Selection.ImplementationSelection.html b/api/ZeroInstall.Model.Selection.ImplementationSelection.html new file mode 100644 index 000000000..3a6969674 --- /dev/null +++ b/api/ZeroInstall.Model.Selection.ImplementationSelection.html @@ -0,0 +1,829 @@ + + + + + Class ImplementationSelection | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationSelection +

+ +
+
Namespace
ZeroInstall.Model.Selection
+
Assembly
ZeroInstall.Model.dll
+
+ +

An executable implementation of a Feed as a part of a Selections.

+
+
+ +
+
[Equatable]
+public sealed class ImplementationSelection : ImplementationBase, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IEquatable<TargetBase>, IDependencyContainer, ICloneable<Element>, IEquatable<Element>, IEquatable<ImplementationBase>, IInterfaceUriBindingContainer, IInterfaceUri, IBindingContainer, ICloneable<ImplementationSelection>, IComparable<ImplementationSelection>, IEquatable<ImplementationSelection>
+
+ + + + +
+
Inheritance
+
+ + + + + + +
ImplementationSelection
+
+
+ +
+
Implements
+
+ + + + + + + + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + +

Remarks

+

This class does not contain information on how to download the implementation in case it is not in cache. That must be obtained from a Implementation instance.

+
+ + +

Constructors +

+ + + + +

+ ImplementationSelection() + +

+ +

Used for XML serialization.

+
+
+ +
+
public ImplementationSelection()
+
+ + + + + + + + + + + + + + + +

+ ImplementationSelection(IReadOnlyList<SelectionCandidate>) + +

+ +

Creates a new implementation selection.

+
+
+ +
+
public ImplementationSelection(IReadOnlyList<SelectionCandidate> candidates)
+
+ +

Parameters

+
+
candidates IReadOnlyList<SelectionCandidate>
+

All candidates that were considered for selection (including the selected one). These are used to present the user with possible alternatives.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Candidates + +

+ +

All Implementations that were considered by the solver when this one was chosen. +null when selections are loaded from a file.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public IReadOnlyList<SelectionCandidate>? Candidates { get; }
+
+ + + + + +

Property Value

+
+
IReadOnlyList<SelectionCandidate>
+
+
+ + + + + + + + + + +

+ Distribution + +

+ +

The name of the distribution (e.g. Debian, RPM) where this implementation comes from, if any.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+public string? Distribution { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FromFeed + +

+ +

The URL or local path of the feed that contains this implementation. +FromDistributionPrefix is prepended if data is pulled from a native package manager. +If null or Empty use InterfaceUri instead.

+
+
+ +
+
public FeedUri? FromFeed { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ InterfaceUri + +

+ +

The URI or local path of the interface this implementation is for.

+
+
+ +
+
public required FeedUri InterfaceUri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ QuickTestFile + +

+ +

A file which, if present, indicates that the selection is still valid. This is sometimes used with distribution-provided selections. If not present and the ID starts with "package:", you'll need to query the distribution's package manager to check that this version is still installed.

+
+
+ +
+
public string? QuickTestFile { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this ImplementationSelection instance.

+
+
+ +
+
public override Element Clone()
+
+ + +

Returns

+
+
Element
+

The new copy of the ImplementationSelection.

+
+
+ + + + + + + + + + + + + +

+ CompareTo(ImplementationSelection?) + +

+ +

Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.

+
+
+ +
+
public int CompareTo(ImplementationSelection? other)
+
+ +

Parameters

+
+
other ImplementationSelection
+

An object to compare with this instance.

+
+
+ +

Returns

+
+
int
+

A value that indicates the relative order of the objects being compared. The return value has these meanings:

+
Value Meaning
Less than zero This instance precedes other in the sort order.
Zero This instance occurs in the same position in the sort order as other.
Greater than zero This instance follows other in the sort order.
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Flattens inheritance structures, Converts legacy elements, sets default values, etc..

+
+
+ +
+
public override void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the implementation in the form "Comma-separated list of set values". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ImplementationSelection?, ImplementationSelection?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ImplementationSelection? left, ImplementationSelection? right)
+
+ +

Parameters

+
+
left ImplementationSelection
+

The left object

+
+
right ImplementationSelection
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ImplementationSelection?, ImplementationSelection?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ImplementationSelection? left, ImplementationSelection? right)
+
+ +

Parameters

+
+
left ImplementationSelection
+

The left object

+
+
right ImplementationSelection
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Selection.SelectionCandidate.html b/api/ZeroInstall.Model.Selection.SelectionCandidate.html new file mode 100644 index 000000000..dc95bd234 --- /dev/null +++ b/api/ZeroInstall.Model.Selection.SelectionCandidate.html @@ -0,0 +1,727 @@ + + + + + Class SelectionCandidate | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SelectionCandidate +

+ +
+
Namespace
ZeroInstall.Model.Selection
+
Assembly
ZeroInstall.Model.dll
+
+ +

Represents an Implementation that is available to a solver for selection.

+
+
+ +
+
public sealed class SelectionCandidate : IEquatable<SelectionCandidate>
+
+ + + + +
+
Inheritance
+
+ +
SelectionCandidate
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + +
+ + + + + + +

Constructors +

+ + + + +

+ SelectionCandidate(FeedUri, FeedPreferences, Implementation, Requirements, bool) + +

+ +

Creates a new selection candidate.

+
+
+ +
+
public SelectionCandidate(FeedUri feedUri, FeedPreferences feedPreferences, Implementation implementation, Requirements requirements, bool offlineUncached = false)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The file name or URL of the feed listing the implementation.

+
+
feedPreferences FeedPreferences
+

The FeedPreferences for FeedUri.

+
+
implementation Implementation
+

The implementation this selection candidate references.

+
+
requirements Requirements
+

A set of requirements/restrictions the implementation needs to fulfill for IsSuitable to be true.

+
+
offlineUncached bool
+

Mark this candidate as unsuitable because it is uncached and the network mode is set to offline.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Architecture + +

+ +

For platform-specific binaries, the platform for which an Implementation was compiled, in the form os-cpu. Either the os or cpu part may be *, which will make it available on any OS or CPU.

+
+
+ +
+
public string Architecture { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ EffectiveStability + +

+ +

The UserStability if it is set, otherwise Stability.

+
+
+ +
+
[Browsable(false)]
+public Stability EffectiveStability { get; }
+
+ + + + + +

Property Value

+
+
Stability
+
+
+ + + + + + + + + + +

+ FeedPreferences + +

+ + +
+ +
+
[Browsable(false)]
+public FeedPreferences FeedPreferences { get; }
+
+ + + + + +

Property Value

+
+
FeedPreferences
+
+
+ + + + + + + + + + +

+ FeedUri + +

+ +

The file name or URL of the feed listing the implementation.

+
+
+ +
+
public FeedUri FeedUri { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ Implementation + +

+ +

The implementation this selection candidate references.

+
+
+ +
+
[Browsable(false)]
+public Implementation Implementation { get; }
+
+ + + + + +

Property Value

+
+
Implementation
+
+
+ + + + + + + + + + +

+ IsSuitable + +

+ +

Indicates whether this implementation fulfills all specified Requirements.

+
+
+ +
+
[Browsable(false)]
+public bool IsSuitable { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Notes + +

+ +

Human-readable notes about the implementation, e.g. "not suitable for this architecture".

+
+
+ +
+
public string? Notes { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Released + +

+ +

The date this implementation was made available. For development versions checked out from version control this attribute should not be present.

+
+
+ +
+
public DateTime Released { get; }
+
+ + + + + +

Property Value

+
+
DateTime
+
+
+ + + + + + + + + + +

+ Stability + +

+ +

The feed-specified stability rating for this implementation.

+
+
+ +
+
public Stability Stability { get; }
+
+ + + + + +

Property Value

+
+
Stability
+
+
+ + + + + + + + + + +

+ UserStability + +

+ +

A user-specified override for the Stability specified in the feed.

+
+
+ +
+
public Stability UserStability { get; set; }
+
+ + + + + +

Property Value

+
+
Stability
+
+
+ + + + + + + + + + +

+ Version + +

+ +

The version number of the implementation.

+
+
+ +
+
public ImplementationVersion Version { get; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(SelectionCandidate?) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public bool Equals(SelectionCandidate? other)
+
+ +

Parameters

+
+
other SelectionCandidate
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the selection candidate in the form "SelectionCandidate: Implementation". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Selection.SelectionCandidateExtensions.html b/api/ZeroInstall.Model.Selection.SelectionCandidateExtensions.html new file mode 100644 index 000000000..afb0d202d --- /dev/null +++ b/api/ZeroInstall.Model.Selection.SelectionCandidateExtensions.html @@ -0,0 +1,218 @@ + + + + + Class SelectionCandidateExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SelectionCandidateExtensions +

+ +
+
Namespace
ZeroInstall.Model.Selection
+
Assembly
ZeroInstall.Model.dll
+
+ +

Provides extension methods for SelectionCandidate.

+
+
+ +
+
public static class SelectionCandidateExtensions
+
+ + + + +
+
Inheritance
+
+ +
SelectionCandidateExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ GetSuitableVersions(IEnumerable<SelectionCandidate>) + +

+ +

Returns a deduplicated list of suitable version numbers, sorted from newest to oldest.

+
+
+ +
+
public static IEnumerable<ImplementationVersion> GetSuitableVersions(this IEnumerable<SelectionCandidate> candidates)
+
+ +

Parameters

+
+
candidates IEnumerable<SelectionCandidate>
+
+
+ +

Returns

+
+
IEnumerable<ImplementationVersion>
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Selection.Selections.html b/api/ZeroInstall.Model.Selection.Selections.html new file mode 100644 index 000000000..f00ee6f1f --- /dev/null +++ b/api/ZeroInstall.Model.Selection.Selections.html @@ -0,0 +1,816 @@ + + + + + Class Selections | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Selections +

+ +
+
Namespace
ZeroInstall.Model.Selection
+
Assembly
ZeroInstall.Model.dll
+
+ +

Represents a set of ImplementationBases chosen by a solver.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class Selections : XmlUnknown, IEquatable<XmlUnknown>, IInterfaceUri, ICloneable<Selections>, IEquatable<Selections>
+
+ + + + +
+
Inheritance
+
+ + +
Selections
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + +

Remarks

+ + + +

Properties +

+ + + + +

+ Command + +

+ +

The name of the Command in the interface to be started.

+
+
+ +
+
public string? Command { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Implementations + +

+ +

A list of ImplementationSelections chosen in this selection.

+
+
+ +
+
[UnorderedEquality]
+public List<ImplementationSelection> Implementations { get; }
+
+ + + + + +

Property Value

+
+
List<ImplementationSelection>
+
+
+ + + + + + + + + + +

+ InterfaceUri + +

+ +

The URI or local path of the interface this selection is based on.

+
+
+ +
+
public required FeedUri InterfaceUri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ this[FeedUri] + +

+ +

Returns the ImplementationSelection for a specific interface.

+
+
+ +
+
public ImplementationSelection this[FeedUri interfaceUri] { get; }
+
+ +

Parameters

+
+
interfaceUri FeedUri
+

The InterfaceUri to look for.

+
+
+ + + + +

Property Value

+
+
ImplementationSelection
+

The first matching implementation.

+
+
+ + + + + +

Exceptions

+
+
KeyNotFoundException
+

No matching implementation was found.

+
+
+ + + + + +

+ MainImplementation + +

+ +

The main implementation in the selection (the actual program to launch). Identified by InterfaceUri.

+
+
+ +
+
public ImplementationSelection MainImplementation { get; }
+
+ + + + + +

Property Value

+
+
ImplementationSelection
+
+
+ + + + + +

Exceptions

+
+
KeyNotFoundException
+

No ImplementationSelection matching InterfaceUri was found in Implementations.

+
+
+ + + + + +

+ Name + +

+ +

The name specified by the feed at InterfaceUri.

+
+
+ +
+
public string? Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Source + +

+ +

Indicates whether the selection was generated for Source.

+
+
+ +
+
public bool Source { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Selections instance.

+
+
+ +
+
public Selections Clone()
+
+ + +

Returns

+
+
Selections
+

The new copy of the Selections.

+
+
+ + + + + + + + + + + + + +

+ ContainsImplementation(FeedUri) + +

+ +

Determines whether an ImplementationSelection for a specific interface is listed in the selection.

+
+
+ +
+
public bool ContainsImplementation(FeedUri interfaceUri)
+
+ +

Parameters

+
+
interfaceUri FeedUri
+

The InterfaceUri to look for.

+
+
+ +

Returns

+
+
bool
+

true if an implementation was found; false otherwise.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ GetImplementation(FeedUri) + +

+ +

Returns the ImplementationSelection for a specific interface. Safe for missing elements.

+
+
+ +
+
public ImplementationSelection? GetImplementation(FeedUri interfaceUri)
+
+ +

Parameters

+
+
interfaceUri FeedUri
+

The InterfaceUri to look for.

+
+
+ +

Returns

+
+
ImplementationSelection
+

The first matching implementation; null if no matching one was found.

+
+
+ + + + + + + + + + + + + +

+ Normalize() + +

+ + +
+ +
+
public void Normalize()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ RestrictionsFor(FeedUri) + +

+ +

Gets a list of all Restrictions and Dependency that point to a specific interfaceUri.

+
+
+ +
+
public IEnumerable<Restriction> RestrictionsFor(FeedUri interfaceUri)
+
+ +

Parameters

+
+
interfaceUri FeedUri
+
+
+ +

Returns

+
+
IEnumerable<Restriction>
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the selections as XML. Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Selections?, Selections?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Selections? left, Selections? right)
+
+ +

Parameters

+
+
left Selections
+

The left object

+
+
right Selections
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Selections?, Selections?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Selections? left, Selections? right)
+
+ +

Parameters

+
+
left Selections
+

The left object

+
+
right Selections
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Selection.TestCase.html b/api/ZeroInstall.Model.Selection.TestCase.html new file mode 100644 index 000000000..8e7fe17e3 --- /dev/null +++ b/api/ZeroInstall.Model.Selection.TestCase.html @@ -0,0 +1,405 @@ + + + + + Class TestCase | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TestCase +

+ +
+
Namespace
ZeroInstall.Model.Selection
+
Assembly
ZeroInstall.Model.dll
+
+ +

A test case describing Requirements and the Selections they are expected to lead to. Used for automated testing of Solvers.

+
+
+ +
+
public class TestCase
+
+ + + + +
+
Inheritance
+
+ +
TestCase
+
+
+ + + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ AddDownloads + +

+ +
+
+ +
+
public bool AddDownloads { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Feeds + +

+ +

A list of input Feeds for the solver.

+
+
+ +
+
public List<Feed> Feeds { get; }
+
+ + + + + +

Property Value

+
+
List<Feed>
+
+
+ + + + + + + + + + +

+ Name + +

+ +
+
+ +
+
public required string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Problem + +

+ +

A string describing the expected solver error message or null if no failure is expected.

+
+
+ +
+
public string? Problem { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Requirements + +

+ +

The input requirements for the solver.

+
+
+ +
+
public required Requirements Requirements { get; set; }
+
+ + + + + +

Property Value

+
+
Requirements
+
+
+ + + + + + + + + + +

+ Selections + +

+ +

The expected output of the solver.

+
+
+ +
+
public Selections? Selections { get; set; }
+
+ + + + + +

Property Value

+
+
Selections
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Returns a string that represents the current object.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+

A string that represents the current object.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Selection.TestCaseSet.html b/api/ZeroInstall.Model.Selection.TestCaseSet.html new file mode 100644 index 000000000..fd51637e0 --- /dev/null +++ b/api/ZeroInstall.Model.Selection.TestCaseSet.html @@ -0,0 +1,214 @@ + + + + + Class TestCaseSet | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TestCaseSet +

+ +
+
Namespace
ZeroInstall.Model.Selection
+
Assembly
ZeroInstall.Model.dll
+
+ +

A set of test case describing Requirements and the Selections they are expected to lead to. Used for automated testing of Solvers.

+
+
+ +
+
[XmlNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance")]
+public class TestCaseSet
+
+ + + + +
+
Inheritance
+
+ +
TestCaseSet
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ TestCases + +

+ +

A list of input Feeds for the solver.

+
+
+ +
+
public List<TestCase> TestCases { get; }
+
+ + + + + +

Property Value

+
+
List<TestCase>
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Selection.html b/api/ZeroInstall.Model.Selection.html new file mode 100644 index 000000000..b0d19a2ed --- /dev/null +++ b/api/ZeroInstall.Model.Selection.html @@ -0,0 +1,155 @@ + + + + + Namespace ZeroInstall.Model.Selection | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Model.Selection

+
+

Structures for representing Solver results.

+
+
+
+ +

+Classes +

+
+
ImplementationSelection
+

An executable implementation of a Feed as a part of a Selections.

+
+
+
+
SelectionCandidate
+

Represents an Implementation that is available to a solver for selection.

+
+
+
+
SelectionCandidateExtensions
+

Provides extension methods for SelectionCandidate.

+
+
+
+
Selections
+

Represents a set of ImplementationBases chosen by a solver.

+
+
+
+
TestCase
+

A test case describing Requirements and the Selections they are expected to lead to. Used for automated testing of Solvers.

+
+
+
+
TestCaseSet
+

A set of test case describing Requirements and the Selections they are expected to lead to. Used for automated testing of Solvers.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.SingleFile.html b/api/ZeroInstall.Model.SingleFile.html new file mode 100644 index 000000000..9563cf139 --- /dev/null +++ b/api/ZeroInstall.Model.SingleFile.html @@ -0,0 +1,545 @@ + + + + + Class SingleFile | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SingleFile +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Retrieves an implementation by downloading a single file.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class SingleFile : DownloadRetrievalMethod, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<RetrievalMethod>, IRecipeStep, ICloneable<IRecipeStep>, IEquatable<DownloadRetrievalMethod>, IEquatable<SingleFile>
+
+ + + + +
+
Inheritance
+
+ + + + + +
SingleFile
+
+
+ +
+
Implements
+
+ + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Destination + +

+ +

The file's target path relative to the implementation root as a Unix-style path.

+
+
+ +
+
public required string Destination { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Executable + +

+ +

Set this to true to mark the file as executable.

+
+
+ +
+
public bool Executable { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this SingleFile instance.

+
+
+ +
+
public override RetrievalMethod Clone()
+
+ + +

Returns

+
+
RetrievalMethod
+

The new copy of the SingleFile.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Normalize(FeedUri?) + +

+ +

Sets missing default values and handles legacy elements.

+
+
+ +
+
public override void Normalize(FeedUri? feedUri = null)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The feed the data was originally loaded from.

+
+
+ + + + + + + + + +

Exceptions

+
+
UriFormatException
+

Href is relative and feedUri is a remote URI.

+
+
InvalidDataException
+

A required property is not set or invalid.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the file in the form "Location (Size) => Destination". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(SingleFile?, SingleFile?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(SingleFile? left, SingleFile? right)
+
+ +

Parameters

+
+
left SingleFile
+

The left object

+
+
right SingleFile
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(SingleFile?, SingleFile?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(SingleFile? left, SingleFile? right)
+
+ +

Parameters

+
+
left SingleFile
+

The left object

+
+
right SingleFile
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.Stability.html b/api/ZeroInstall.Model.Stability.html new file mode 100644 index 000000000..8a5932a98 --- /dev/null +++ b/api/ZeroInstall.Model.Stability.html @@ -0,0 +1,172 @@ + + + + + Enum Stability | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum Stability +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A stability rating for an Implementation.

+
+
+ +
+
public enum Stability
+
+ + + + + + + + + +

Fields +

+
+
Buggy = 6
+

Known bugs, none security-related.

+
+
Developer = 5
+

More extreme version of Testing, expected to have bugs.

+
+
Insecure = 7
+

Known bugs, some or all security-related.

+
+
Packaged = 2
+

Indicates that an implementation is provided as a PackageImplementation.

+
+
Preferred = 1
+

Set by user as a personal preference overriding other stability criteria.

+
+
Stable = 3
+

No serious problems.

+
+
Testing = 4
+

Any new release.

+
+
Unset = 0
+

Inherit stability from Group or default to Testing

+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.TargetBase.html b/api/ZeroInstall.Model.TargetBase.html new file mode 100644 index 000000000..c99575fc0 --- /dev/null +++ b/api/ZeroInstall.Model.TargetBase.html @@ -0,0 +1,528 @@ + + + + + Class TargetBase | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TargetBase +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Abstract base class for Element and FeedReference. +Contains language and architecture parameters.

+
+
+ +
+
[Equatable]
+public abstract class TargetBase : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IEquatable<TargetBase>
+
+ + + + +
+
Inheritance
+
+ + + +
TargetBase
+
+
+ +
+
Implements
+
+ + + +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Architecture + +

+ +

For platform-specific binaries, the platform for which an Implementation was compiled.

+
+
+ +
+
public Architecture Architecture { get; set; }
+
+ + + + + +

Property Value

+
+
Architecture
+
+
+ + + + +

Remarks

+

The injector knows that certain platforms are backwards-compatible with others, so binaries with arch="Linux-i486" will still be available on Linux-i686 machines, for example.

+
+ + + + + + +

+ Languages + +

+ +

The natural language(s) which an Implementation supports.

+
+
+ +
+
[SetEquality]
+public LanguageSet Languages { get; set; }
+
+ + + + + +

Property Value

+
+
LanguageSet
+
+
+ + + +

Examples

+

For example, the value "en_GB fr" would be used for a package supporting British English and French.

+ + + + + + +

Methods +

+ + + + +

+ CloneFromTo(TargetBase, TargetBase) + +

+ +

Copies all known values from one instance to another. Helper method for instance cloning.

+
+
+ +
+
protected static void CloneFromTo(TargetBase from, TargetBase to)
+
+ +

Parameters

+
+
from TargetBase
+
+
to TargetBase
+
+
+ + + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(TargetBase?) + +

+ +
+
+ +
+
protected bool Equals(TargetBase? other)
+
+ +

Parameters

+
+
other TargetBase
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(TargetBase?, TargetBase?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(TargetBase? left, TargetBase? right)
+
+ +

Parameters

+
+
left TargetBase
+

The left object

+
+
right TargetBase
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(TargetBase?, TargetBase?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(TargetBase? left, TargetBase? right)
+
+ +

Parameters

+
+
left TargetBase
+

The left object

+
+
right TargetBase
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.VersionDottedList.html b/api/ZeroInstall.Model.VersionDottedList.html new file mode 100644 index 000000000..e89df3ef5 --- /dev/null +++ b/api/ZeroInstall.Model.VersionDottedList.html @@ -0,0 +1,743 @@ + + + + + Struct VersionDottedList | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct VersionDottedList +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Represents a dotted-list part of a ImplementationVersion.

+
+
+ +
+
[Serializable]
+public readonly struct VersionDottedList : IEquatable<VersionDottedList>, IComparable<VersionDottedList>
+
+ + + + + +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + +
+ + + + +

Remarks

+

This is the syntax for valid dot-separated decimals:

+
DottedList := (Integer ("." Integer)*)
+
+ + +

Constructors +

+ + + + +

+ VersionDottedList(params long[]) + +

+ +

Creates a new version dotted-list.

+
+
+ +
+
public VersionDottedList(params long[] decimals)
+
+ +

Parameters

+
+
decimals long[]
+

The numeric parts of the dotted-list.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Decimals + +

+ +

The individual decimals.

+
+
+ +
+
public IReadOnlyList<long>? Decimals { get; }
+
+ + + + + +

Property Value

+
+
IReadOnlyList<long>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CompareTo(VersionDottedList) + +

+ +

Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.

+
+
+ +
+
public int CompareTo(VersionDottedList other)
+
+ +

Parameters

+
+
other VersionDottedList
+

An object to compare with this instance.

+
+
+ +

Returns

+
+
int
+

A value that indicates the relative order of the objects being compared. The return value has these meanings:

+
Value Meaning
Less than zero This instance precedes other in the sort order.
Zero This instance occurs in the same position in the sort order as other.
Greater than zero This instance follows other in the sort order.
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Indicates whether this instance and a specified object are equal.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current instance.

+
+
+ +

Returns

+
+
bool
+

true if obj and this instance are the same type and represent the same value; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(VersionDottedList) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public bool Equals(VersionDottedList other)
+
+ +

Parameters

+
+
other VersionDottedList
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Returns the hash code for this instance.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A 32-bit signed integer that is the hash code for this instance.

+
+
+ + + + + + + + + + + + + +

+ IsValid(string) + +

+ +

Checks whether a string represents a valid dotted-list.

+
+
+ +
+
public static bool IsValid(string value)
+
+ +

Parameters

+
+
value string
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Parse(string) + +

+ +

Parses a string into a version dotted-list.

+
+
+ +
+
public static VersionDottedList Parse(string value)
+
+ +

Parameters

+
+
value string
+
+
+ +

Returns

+
+
VersionDottedList
+
+
+ + + + + + + + +

Exceptions

+
+
FormatException
+

value is not a valid version dotted-list.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the fully qualified type name of this instance.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+

The fully qualified type name.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(VersionDottedList, VersionDottedList) + +

+ +
+
+ +
+
public static bool operator ==(VersionDottedList left, VersionDottedList right)
+
+ +

Parameters

+
+
left VersionDottedList
+
+
right VersionDottedList
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator >(VersionDottedList, VersionDottedList) + +

+ +
+
+ +
+
public static bool operator >(VersionDottedList left, VersionDottedList right)
+
+ +

Parameters

+
+
left VersionDottedList
+
+
right VersionDottedList
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator >=(VersionDottedList, VersionDottedList) + +

+ +
+
+ +
+
public static bool operator >=(VersionDottedList left, VersionDottedList right)
+
+ +

Parameters

+
+
left VersionDottedList
+
+
right VersionDottedList
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator !=(VersionDottedList, VersionDottedList) + +

+ +
+
+ +
+
public static bool operator !=(VersionDottedList left, VersionDottedList right)
+
+ +

Parameters

+
+
left VersionDottedList
+
+
right VersionDottedList
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator <(VersionDottedList, VersionDottedList) + +

+ +
+
+ +
+
public static bool operator <(VersionDottedList left, VersionDottedList right)
+
+ +

Parameters

+
+
left VersionDottedList
+
+
right VersionDottedList
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator <=(VersionDottedList, VersionDottedList) + +

+ +
+
+ +
+
public static bool operator <=(VersionDottedList left, VersionDottedList right)
+
+ +

Parameters

+
+
left VersionDottedList
+
+
right VersionDottedList
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.VersionModifier.html b/api/ZeroInstall.Model.VersionModifier.html new file mode 100644 index 000000000..23227d003 --- /dev/null +++ b/api/ZeroInstall.Model.VersionModifier.html @@ -0,0 +1,159 @@ + + + + + Enum VersionModifier | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum VersionModifier +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +
+
+ +
+
public enum VersionModifier
+
+ + + + + + + + + +

Fields +

+
+
None = 0
+

No modifier; empty string

+
+
Post = 1
+

Post-release

+
+
Pre = -2
+

Pre-release

+
+
RC = -1
+

Release candidate

+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.VersionPart.html b/api/ZeroInstall.Model.VersionPart.html new file mode 100644 index 000000000..6c1513604 --- /dev/null +++ b/api/ZeroInstall.Model.VersionPart.html @@ -0,0 +1,737 @@ + + + + + Struct VersionPart | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct VersionPart +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Represents a part of a ImplementationVersion containing nothing, a VersionModifier, a DottedList or both.

+
+
+ +
+
[Serializable]
+public readonly struct VersionPart : IEquatable<VersionPart>, IComparable<VersionPart>
+
+ + + + + +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + +
+ + + + + + +

Constructors +

+ + + + +

+ VersionPart(VersionModifier, VersionDottedList) + +

+ +

Creates a new version part.

+
+
+ +
+
public VersionPart(VersionModifier modifier = VersionModifier.None, VersionDottedList dottedList = default)
+
+ +

Parameters

+
+
modifier VersionModifier
+

The optional modifier prefix.

+
+
dottedList VersionDottedList
+

The dotted list part.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ DottedList + +

+ +

The dotted list part.

+
+
+ +
+
public VersionDottedList DottedList { get; }
+
+ + + + + +

Property Value

+
+
VersionDottedList
+
+
+ + + + + + + + + + +

+ Modifier + +

+ +

The optional modifier prefix.

+
+
+ +
+
public VersionModifier Modifier { get; }
+
+ + + + + +

Property Value

+
+
VersionModifier
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CompareTo(VersionPart) + +

+ +

Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.

+
+
+ +
+
public int CompareTo(VersionPart other)
+
+ +

Parameters

+
+
other VersionPart
+

An object to compare with this instance.

+
+
+ +

Returns

+
+
int
+

A value that indicates the relative order of the objects being compared. The return value has these meanings:

+
Value Meaning
Less than zero This instance precedes other in the sort order.
Zero This instance occurs in the same position in the sort order as other.
Greater than zero This instance follows other in the sort order.
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Indicates whether this instance and a specified object are equal.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current instance.

+
+
+ +

Returns

+
+
bool
+

true if obj and this instance are the same type and represent the same value; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(VersionPart) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public bool Equals(VersionPart other)
+
+ +

Parameters

+
+
other VersionPart
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Returns the hash code for this instance.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A 32-bit signed integer that is the hash code for this instance.

+
+
+ + + + + + + + + + + + + +

+ Parse(string) + +

+ +

Parses a string into a version part.

+
+
+ +
+
public static VersionPart Parse(string value)
+
+ +

Parameters

+
+
value string
+
+
+ +

Returns

+
+
VersionPart
+
+
+ + + + + + + + +

Exceptions

+
+
FormatException
+

value is not a valid version part.

+
+
+ + + + + +

+ ToString() + +

+ +

Returns the fully qualified type name of this instance.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+

The fully qualified type name.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(VersionPart, VersionPart) + +

+ +
+
+ +
+
public static bool operator ==(VersionPart left, VersionPart right)
+
+ +

Parameters

+
+
left VersionPart
+
+
right VersionPart
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator >(VersionPart, VersionPart) + +

+ +
+
+ +
+
public static bool operator >(VersionPart left, VersionPart right)
+
+ +

Parameters

+
+
left VersionPart
+
+
right VersionPart
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator >=(VersionPart, VersionPart) + +

+ +
+
+ +
+
public static bool operator >=(VersionPart left, VersionPart right)
+
+ +

Parameters

+
+
left VersionPart
+
+
right VersionPart
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator !=(VersionPart, VersionPart) + +

+ +
+
+ +
+
public static bool operator !=(VersionPart left, VersionPart right)
+
+ +

Parameters

+
+
left VersionPart
+
+
right VersionPart
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator <(VersionPart, VersionPart) + +

+ +
+
+ +
+
public static bool operator <(VersionPart left, VersionPart right)
+
+ +

Parameters

+
+
left VersionPart
+
+
right VersionPart
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ operator <=(VersionPart, VersionPart) + +

+ +
+
+ +
+
public static bool operator <=(VersionPart left, VersionPart right)
+
+ +

Parameters

+
+
left VersionPart
+
+
right VersionPart
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.VersionRange.html b/api/ZeroInstall.Model.VersionRange.html new file mode 100644 index 000000000..05cf9bbee --- /dev/null +++ b/api/ZeroInstall.Model.VersionRange.html @@ -0,0 +1,743 @@ + + + + + Class VersionRange | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class VersionRange +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Represents a (possibly disjoint) set of ranges of ImplementationVersions.

+
+
+ +
+
[TypeConverter(typeof(StringConstructorConverter<VersionRange>))]
+[Serializable]
+[Equatable]
+public sealed class VersionRange : IEquatable<VersionRange>
+
+ + + + +
+
Inheritance
+
+ +
VersionRange
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + +
+ + + + +

Remarks

+

This class is immutable.

+

+ Ranges are separated by pipes (|). + Each range is in the form "START..!END". The range matches versions where START <= VERSION < END. + The start or end may be omitted. A single version number may be used instead of a range to match only that version, + or !VERSION to match everything except that version. +

+
+ + +

Constructors +

+ + + + +

+ VersionRange() + +

+ +

Creates an empty version range (matches everything).

+
+
+ +
+
public VersionRange()
+
+ + + + + + + + + + + + + + + +

+ VersionRange(string) + +

+ +

Creates a new version range set from a a string.

+
+
+ +
+
public VersionRange(string value)
+
+ +

Parameters

+
+
value string
+

The string containing the version ranges.

+
+
+ + + + + + + + + +

Exceptions

+
+
FormatException
+

value is not a valid version range string.

+
+
+ + + + + +

+ VersionRange(params VersionRangePart[]) + +

+ +

Creates a new version range set.

+
+
+ +
+
public VersionRange(params VersionRangePart[] parts)
+
+ +

Parameters

+
+
parts VersionRangePart[]
+

The individual ranges.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ None + +

+ +

An "impossible" range matching no versions.

+
+
+ +
+
public static readonly VersionRange None
+
+ + + + +

Field Value

+
+
VersionRange
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Parts + +

+ +

The individual ranges.

+
+
+ +
+
[OrderedEquality]
+public IReadOnlyList<VersionRangePart> Parts { get; }
+
+ + + + + +

Property Value

+
+
IReadOnlyList<VersionRangePart>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Intersect(VersionRange) + +

+ +

Intersects another version range set with this one and returns a new set as the result.

+
+
+ +
+
public VersionRange Intersect(VersionRange other)
+
+ +

Parameters

+
+
other VersionRange
+
+
+ +

Returns

+
+
VersionRange
+
+
+ + + + + + + + + + + + + +

+ Match(ImplementationVersion) + +

+ +

Determines whether a specific version lies within this range set.

+
+
+ +
+
public bool Match(ImplementationVersion version)
+
+ +

Parameters

+
+
version ImplementationVersion
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns a string representation of the version range set. Safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ TryCreate(string, out VersionRange?) + +

+ +

Creates a new VersionRange using the specified string representation.

+
+
+ +
+
public static bool TryCreate(string value, out VersionRange? result)
+
+ +

Parameters

+
+
value string
+

The string to parse.

+
+
result VersionRange
+

Returns the created VersionRange if successfully; null otherwise.

+
+
+ +

Returns

+
+
bool
+

true if the VersionRange was successfully created; false otherwise.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(VersionRange?, VersionRange?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(VersionRange? left, VersionRange? right)
+
+ +

Parameters

+
+
left VersionRange
+

The left object

+
+
right VersionRange
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ implicit operator VersionRange?(Constraint?) + +

+ +

Convenience cast for Constraints into VersionRanges.

+
+
+ +
+
public static implicit operator VersionRange?(Constraint? constraint)
+
+ +

Parameters

+
+
constraint Constraint
+
+
+ +

Returns

+
+
VersionRange
+
+
+ + + + + + + + + + + + + +

+ implicit operator VersionRange?(ImplementationVersion?) + +

+ +

Convenience cast for ImplementationVersions into VersionRanges that match that exact version.

+
+
+ +
+
public static implicit operator VersionRange?(ImplementationVersion? version)
+
+ +

Parameters

+
+
version ImplementationVersion
+
+
+ +

Returns

+
+
VersionRange
+
+
+ + + + + + + + + + + + + +

+ operator !=(VersionRange?, VersionRange?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(VersionRange? left, VersionRange? right)
+
+ +

Parameters

+
+
left VersionRange
+

The left object

+
+
right VersionRange
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.VersionRangePart.html b/api/ZeroInstall.Model.VersionRangePart.html new file mode 100644 index 000000000..1b11fde49 --- /dev/null +++ b/api/ZeroInstall.Model.VersionRangePart.html @@ -0,0 +1,312 @@ + + + + + Class VersionRangePart | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class VersionRangePart +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Represents an individual non-disjoint part of a VersionRange.

+
+
+ +
+
public abstract record VersionRangePart : IEquatable<VersionRangePart>
+
+ + + + +
+
Inheritance
+
+ +
VersionRangePart
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Intersect(VersionRange) + +

+ +

Intersects a set of version ranges with this individual range and returns the surviving parts.

+
+
+ +
+
public abstract IEnumerable<VersionRangePart> Intersect(VersionRange versions)
+
+ +

Parameters

+
+
versions VersionRange
+
+
+ +

Returns

+
+
IEnumerable<VersionRangePart>
+
+
+ + + + + + + + + + + + + +

+ Match(ImplementationVersion) + +

+ +

Determines whether a specific version lies within this range.

+
+
+ +
+
public abstract bool Match(ImplementationVersion version)
+
+ +

Parameters

+
+
version ImplementationVersion
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Parse(string) + +

+ +

Parses a string into a version range part.

+
+
+ +
+
public static VersionRangePart Parse(string value)
+
+ +

Parameters

+
+
value string
+
+
+ +

Returns

+
+
VersionRangePart
+
+
+ + + + + + + + +

Exceptions

+
+
FormatException
+

value is not a valid version range string.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.VersionRangePartExact.html b/api/ZeroInstall.Model.VersionRangePartExact.html new file mode 100644 index 000000000..821e1d1d0 --- /dev/null +++ b/api/ZeroInstall.Model.VersionRangePartExact.html @@ -0,0 +1,366 @@ + + + + + Class VersionRangePartExact | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class VersionRangePartExact +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An exact version number like 2.0 as a part of a VersionRange.

+
+
+ +
+
public sealed record VersionRangePartExact : VersionRangePart, IEquatable<VersionRangePart>, IEquatable<VersionRangePartExact>
+
+ + + + +
+
Inheritance
+
+ + +
VersionRangePartExact
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ VersionRangePartExact(ImplementationVersion) + +

+ +

An exact version number like 2.0 as a part of a VersionRange.

+
+
+ +
+
public VersionRangePartExact(ImplementationVersion Version)
+
+ +

Parameters

+
+
Version ImplementationVersion
+

The exact version to match.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Version + +

+ +

The exact version to match.

+
+
+ +
+
public ImplementationVersion Version { get; init; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Intersect(VersionRange) + +

+ +

Intersects a set of version ranges with this individual range and returns the surviving parts.

+
+
+ +
+
public override IEnumerable<VersionRangePart> Intersect(VersionRange versions)
+
+ +

Parameters

+
+
versions VersionRange
+
+
+ +

Returns

+
+
IEnumerable<VersionRangePart>
+
+
+ + + + + + + + + + + + + +

+ Match(ImplementationVersion) + +

+ +

Determines whether a specific version lies within this range.

+
+
+ +
+
public override bool Match(ImplementationVersion version)
+
+ +

Parameters

+
+
version ImplementationVersion
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns a string that represents the current object.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+

A string that represents the current object.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.VersionRangePartExclude.html b/api/ZeroInstall.Model.VersionRangePartExclude.html new file mode 100644 index 000000000..d21816eab --- /dev/null +++ b/api/ZeroInstall.Model.VersionRangePartExclude.html @@ -0,0 +1,366 @@ + + + + + Class VersionRangePartExclude | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class VersionRangePartExclude +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

An exclusion like !2.0 as a part of a VersionRange.

+
+
+ +
+
public sealed record VersionRangePartExclude : VersionRangePart, IEquatable<VersionRangePart>, IEquatable<VersionRangePartExclude>
+
+ + + + +
+
Inheritance
+
+ + +
VersionRangePartExclude
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ VersionRangePartExclude(ImplementationVersion) + +

+ +

An exclusion like !2.0 as a part of a VersionRange.

+
+
+ +
+
public VersionRangePartExclude(ImplementationVersion Version)
+
+ +

Parameters

+
+
Version ImplementationVersion
+

The version to be excluded.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Version + +

+ +

The version to be excluded.

+
+
+ +
+
public ImplementationVersion Version { get; init; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Intersect(VersionRange) + +

+ +

Intersects a set of version ranges with this individual range and returns the surviving parts.

+
+
+ +
+
public override IEnumerable<VersionRangePart> Intersect(VersionRange versions)
+
+ +

Parameters

+
+
versions VersionRange
+
+
+ +

Returns

+
+
IEnumerable<VersionRangePart>
+
+
+ + + + + + + + + + + + + +

+ Match(ImplementationVersion) + +

+ +

Determines whether a specific version lies within this range.

+
+
+ +
+
public override bool Match(ImplementationVersion version)
+
+ +

Parameters

+
+
version ImplementationVersion
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns a string that represents the current object.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+

A string that represents the current object.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.VersionRangePartRange.html b/api/ZeroInstall.Model.VersionRangePartRange.html new file mode 100644 index 000000000..12d7f9621 --- /dev/null +++ b/api/ZeroInstall.Model.VersionRangePartRange.html @@ -0,0 +1,404 @@ + + + + + Class VersionRangePartRange | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class VersionRangePartRange +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

A version range like 1.0..!2.0 as a part of a VersionRange.

+
+
+ +
+
public record VersionRangePartRange : VersionRangePart, IEquatable<VersionRangePart>, IEquatable<VersionRangePartRange>
+
+ + + + +
+
Inheritance
+
+ + +
VersionRangePartRange
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ VersionRangePartRange(ImplementationVersion?, ImplementationVersion?) + +

+ +

A version range like 1.0..!2.0 as a part of a VersionRange.

+
+
+ +
+
public VersionRangePartRange(ImplementationVersion? LowerInclusive, ImplementationVersion? UpperExclusive)
+
+ +

Parameters

+
+
LowerInclusive ImplementationVersion
+

The lower inclusive bound. May be null.

+
+
UpperExclusive ImplementationVersion
+

The upper exclusive bound. May be null.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ LowerInclusive + +

+ +

The lower inclusive bound. May be null.

+
+
+ +
+
public ImplementationVersion? LowerInclusive { get; init; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + + + +

+ UpperExclusive + +

+ +

The upper exclusive bound. May be null.

+
+
+ +
+
public ImplementationVersion? UpperExclusive { get; init; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Intersect(VersionRange) + +

+ +

Intersects a set of version ranges with this individual range and returns the surviving parts.

+
+
+ +
+
public override IEnumerable<VersionRangePart> Intersect(VersionRange versions)
+
+ +

Parameters

+
+
versions VersionRange
+
+
+ +

Returns

+
+
IEnumerable<VersionRangePart>
+
+
+ + + + + + + + + + + + + +

+ Match(ImplementationVersion) + +

+ +

Determines whether a specific version lies within this range.

+
+
+ +
+
public override bool Match(ImplementationVersion version)
+
+ +

Parameters

+
+
version ImplementationVersion
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns a string that represents the current object.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+

A string that represents the current object.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.WorkingDir.html b/api/ZeroInstall.Model.WorkingDir.html new file mode 100644 index 000000000..73db01436 --- /dev/null +++ b/api/ZeroInstall.Model.WorkingDir.html @@ -0,0 +1,462 @@ + + + + + Class WorkingDir | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class WorkingDir +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Switches the working directory of a process on startup to a location within an implementation. +Useful for supporting legacy Windows applications which do not properly locate their installation directory.

+
+
+ +
+
[Serializable]
+[Equatable]
+public sealed class WorkingDir : FeedElement, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<WorkingDir>, IEquatable<WorkingDir>
+
+ + + + +
+
Inheritance
+
+ + + +
WorkingDir
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Source + +

+ +

The relative path of the directory in the implementation to set as the working directory. Defaults to use the root of the implementation if unset.

+
+
+ +
+
public string? Source { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this WorkingDir instance.

+
+
+ +
+
public WorkingDir Clone()
+
+ + +

Returns

+
+
WorkingDir
+

The new copy of the WorkingDir.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the binding in the form "Source". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(WorkingDir?, WorkingDir?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(WorkingDir? left, WorkingDir? right)
+
+ +

Parameters

+
+
left WorkingDir
+

The left object

+
+
right WorkingDir
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(WorkingDir?, WorkingDir?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(WorkingDir? left, WorkingDir? right)
+
+ +

Parameters

+
+
left WorkingDir
+

The left object

+
+
right WorkingDir
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.XmlUnknown.html b/api/ZeroInstall.Model.XmlUnknown.html new file mode 100644 index 000000000..76afe821f --- /dev/null +++ b/api/ZeroInstall.Model.XmlUnknown.html @@ -0,0 +1,467 @@ + + + + + Class XmlUnknown | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class XmlUnknown +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Abstract base class for XML serializable classes that are intended to retain any unknown XML elements or attributes loaded from an XML file.

+
+
+ +
+
public abstract class XmlUnknown : IEquatable<XmlUnknown>
+
+ + + + +
+
Inheritance
+
+ +
XmlUnknown
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + + + + + + + + + + + + + + + + +
+
+ +
+
Inherited Members
+
+ + + + + + +
+ + + + +

Remarks

+

Inheriting from this class will prevent the UnknownElement event from being triggered.

+
+ + +

Fields +

+ + + +

+ UnknownAttributes + +

+ +

Contains any unknown additional XML attributes.

+
+
+ +
+
public XmlAttribute[]? UnknownAttributes
+
+ + + + +

Field Value

+
+
XmlAttribute[]
+
+
+ + + + + + + + + + +

+ UnknownElements + +

+ +

Contains any unknown additional XML elements.

+
+
+ +
+
public XmlElement[]? UnknownElements
+
+ + + + +

Field Value

+
+
XmlElement[]
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ EnsureAttribute(object?, string) + +

+ +

Ensures that a value deserialized from an XML attribute is set (not null).

+
+
+ +
+
protected void EnsureAttribute(object? value, string attributeName)
+
+ +

Parameters

+
+
value object
+

The mapped value to check.

+
+
attributeName string
+

The name of the XML attribute.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

value is null.

+
+
+ + + + + +

+ EnsureAttributeSafeID(string?, string) + +

+ +

Ensures that a value deserialized from an XML attribute is set (not null) and only contains alphanumeric characters, spaces ( ), dots (.), underscores (_), hyphens (-) and plus signs (+).

+
+
+ +
+
protected void EnsureAttributeSafeID(string? value, string attributeName)
+
+ +

Parameters

+
+
value string
+

The mapped value to check.

+
+
attributeName string
+

The name of the XML attribute.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

value is invalid.

+
+
+ + + + + +

+ Equals(XmlUnknown?) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public bool Equals(XmlUnknown? other)
+
+ +

Parameters

+
+
other XmlUnknown
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToShortXml() + +

+ +

Returns a shortened XML representation (with attributes but without child elements).

+
+
+ +
+
public string ToShortXml()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + +

Remarks

+

Intended for use in error messages. Not suitable for parsing. +Use ToXmlString(object, string) instead if you need a full XML representation.

+
+ + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ZeroInstallDeployment.html b/api/ZeroInstall.Model.ZeroInstallDeployment.html new file mode 100644 index 000000000..d30fe2898 --- /dev/null +++ b/api/ZeroInstall.Model.ZeroInstallDeployment.html @@ -0,0 +1,369 @@ + + + + + Class ZeroInstallDeployment | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ZeroInstallDeployment +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Registers and discovers Zero Install deployments on this system.

+
+
+ +
+
public static class ZeroInstallDeployment
+
+ + + + +
+
Inheritance
+
+ +
ZeroInstallDeployment
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ FindOther(bool) + +

+ +

Tries to find a deployment of Zero Install that is not the currently running one.

+
+
+ +
+
public static string? FindOther(bool needsMachineWide = false)
+
+ +

Parameters

+
+
needsMachineWide bool
+

true if a machine-wide deployment is required; false if a user-specific deployment will also do.

+
+
+ +

Returns

+
+
string
+

The directory path of an deployment of Zero Install; null if none was found.

+
+
+ + + + + + + + + + + + + +

+ GetPath(bool) + +

+ +

Tries to find a deployment of Zero Install.

+
+
+ +
+
public static string? GetPath(bool machineWide)
+
+ +

Parameters

+
+
machineWide bool
+

true to look for machine-wide deployments; false to look for user-specific deployments.

+
+
+ +

Returns

+
+
string
+

The directory path of an deployment of Zero Install; null if none was found.

+
+
+ + + + + + + + + + + + + +

+ IsLibraryMode(bool) + +

+ +

Indicates whether a deployment of Zero Install was made in library mode.

+
+
+ +
+
public static bool IsLibraryMode(bool machineWide)
+
+ +

Parameters

+
+
machineWide bool
+

true to look for machine-wide deployments; false to look for user-specific deployments.

+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Register(string, bool, bool) + +

+ +

Registers a Zero Install deployment in the Windows registry if possible.

+
+
+ +
+
public static void Register(string path, bool machineWide, bool libraryMode)
+
+ +

Parameters

+
+
path string
+

The directory path of the deployment of Zero Install.

+
+
machineWide bool
+

true if path is a machine-wide location; false if it is a user-specific location.

+
+
libraryMode bool
+

Indicates whether the deployment was made in library mode.

+
+
+ + + + + + + + + + + + + + +

+ Unregister(bool) + +

+ +

Unregisters a Zero Install deployment from the Windows registry if possible.

+
+
+ +
+
public static void Unregister(bool machineWide)
+
+ +

Parameters

+
+
machineWide bool
+

true if a machine-wide registration should be removed; false if a user-specific registration should be removed.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.ZeroInstallEnvironment.html b/api/ZeroInstall.Model.ZeroInstallEnvironment.html new file mode 100644 index 000000000..cea3db2b5 --- /dev/null +++ b/api/ZeroInstall.Model.ZeroInstallEnvironment.html @@ -0,0 +1,605 @@ + + + + + Class ZeroInstallEnvironment | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ZeroInstallEnvironment +

+ +
+
Namespace
ZeroInstall.Model
+
Assembly
ZeroInstall.Model.dll
+
+ +

Provides access to Zero Install-related environment variables.

+
+
+ +
+
public static class ZeroInstallEnvironment
+
+ + + + +
+
Inheritance
+
+ +
ZeroInstallEnvironment
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ CliName + +

+ +

The name of the environment variable for Cli.

+
+
+ +
+
public const string CliName = "ZEROINSTALL"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ ExternalFetcherName + +

+ +

The name of the environment variable for ExternalFetch.

+
+
+ +
+
public const string ExternalFetcherName = "ZEROINSTALL_EXTERNAL_FETCHER"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedUriName + +

+ +

The name of the environment variable for FeedUri.

+
+
+ +
+
public const string FeedUriName = "ZEROINSTALL_FEED_URI"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ GuiName + +

+ +

The name of the environment variable for Gui.

+
+
+ +
+
public const string GuiName = "ZEROINSTALL_GUI"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Cli + +

+ +

A command-line for launching the CLI version of Zero Install.

+
+
+ +
+
public static string? Cli { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ExternalFetch + +

+ +

A command-line that downloads a set of Implementations piped in as XML via stdin.

+
+
+ +
+
public static string? ExternalFetch { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedUri + +

+ +

The URI of the feed used to start this program.

+
+
+ +
+
public static FeedUri? FeedUri { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ Gui + +

+ +

A command-line for launching the graphical version of Zero Install.

+
+
+ +
+
public static string? Gui { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ LegacyMutexName(string?) + +

+ +

Old name for an AppMutex to detect running instances of Zero Install.

+
+
+ +
+
public static string LegacyMutexName(string? path = null)
+
+ +

Parameters

+
+
path string
+

The directory where the Zero Install instance is located. Leave null for the currently running instance.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + +

Remarks

+

Usually (but not guaranteed to be) different for multiple instances deployed in different paths.

+
+ + + + + + +

+ LegacyUpdateMutexName(string?) + +

+ +

Old name for an AppMutex to block instances of Zero Install from starting during an update.

+
+
+ +
+
public static string LegacyUpdateMutexName(string? path = null)
+
+ +

Parameters

+
+
path string
+

The directory where the Zero Install instance is located. Leave null for the currently running instance.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + +

Remarks

+

Usually (but not guaranteed to be) different for multiple instances deployed in different paths.

+
+ + + + + + +

+ MutexName(string?) + +

+ +

Name for an AppMutex to detect running instances of Zero Install.

+
+
+ +
+
public static string MutexName(string? path = null)
+
+ +

Parameters

+
+
path string
+

The directory where the Zero Install instance is located. Leave null for the currently running instance.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + +

Remarks

+

Usually (but not guaranteed to be) different for multiple instances deployed in different paths.

+
+ + + + + + +

+ UpdateMutexName(string?) + +

+ +

Name for an AppMutex to block instances of Zero Install from starting during an update.

+
+
+ +
+
public static string UpdateMutexName(string? path = null)
+
+ +

Parameters

+
+
path string
+

The directory where the Zero Install instance is located. Leave null for the currently running instance.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + +

Remarks

+

Usually (but not guaranteed to be) different for multiple instances deployed in different paths.

+
+ + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Model.html b/api/ZeroInstall.Model.html new file mode 100644 index 000000000..eb11e2d6f --- /dev/null +++ b/api/ZeroInstall.Model.html @@ -0,0 +1,552 @@ + + + + + Namespace ZeroInstall.Model | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Model

+
+

Data model for the Zero Install feed format.

+

NuGet package: ZeroInstall.Model

+
+
+
+ +

+Namespaces +

+
+
ZeroInstall.Model.Capabilities
+
+

Extends the feed format with structures for describing application capabilities. This forms the basis for desktop integration.

+
+
+
+
ZeroInstall.Model.Design
+
+

TypeConverters used for serialization and to provide a better runtime experience when using PropertyGrids.

+
+
+
+
ZeroInstall.Model.Preferences
+
+

Structures for user-specified preferences and overrides for interfaces, feeds and implementations.

+
+
+
+
ZeroInstall.Model.Selection
+
+

Structures for representing Solver results.

+
+
+

+Classes +

+
+
ArchitectureExtensions
+

Contains extension methods for Architecture, OS and Cpu.

+
+
+
+
Archive
+

Retrieves an implementation by downloading and extracting an archive.

+
+
+
+
Arg
+

A single command-line arguments to be passed to an executable.

+
+
+
+
ArgBase
+

Common base class for Arg and ForEachArgs.

+
+
+
+
Binding
+

Bindings specify how the chosen implementation is made known to the running program.

+
+
+
+
Catalog
+

Contains a list of Feeds, reduced to only contain information relevant for overview lists.

+
+
+
+
Category
+

An application category (e.g. Game or Office). Used for organizing application menus.

+
+
+
+
Command
+

A command says how to run an Implementation as a program.

+
+
+
+
Constraint
+

Restricts the set of versions from which the injector may choose an Implementation.

+
+
+
+
CopyFromStep
+

Copies files or directories from another implementation specified elsewhere in the same feed.

+
+
+
+
Dependency
+

A reference to an interface that is required as dependency.

+
+
+
+
DependencyContainerExtensions
+

Provides extension methods for IDependencyContainer.

+
+
+
+
DownloadRetrievalMethod
+

Represents a retrieval method that downloads data from the net.

+
+
+
+
Element
+

Abstract base class for ImplementationBase and Group. +Contains those parameters that can be transferred from a Group to an Implementation.

+
+
+
+
ElementCollectionExtensions
+

Provides extension methods for Element collections.

+
+
+
+
EntryPoint
+

Associates a Command with a user-friendly name and description.

+
+
+
+
EnvironmentBinding
+

Make a chosen Implementation available by setting environment variables.

+
+
+
+
ExecutableInBinding
+

Make a chosen Implementation available as an executable at runtime.

+
+
+
+
ExecutableInPath
+

Make a chosen Implementation available as an executable in the search PATH.

+
+
+
+
ExecutableInVar
+

Make a chosen Implementation available as an executable path in an environment variable.

+
+
+
+
Feed
+

A feed contains all the information required to download and execute an application.

+
+
+
+
FeedElement
+

Abstract base class for XML serializable classes that are part of the Zero Install feed model.

+
+
+
+
FeedReference
+

A linked feed that contains more implementations of this interface. Is treated by the solver as if it were part of the main feed.

+
+
+
+
FeedUri
+

Represents a feed or interface URI or local path. Unlike Uri this class only accepts HTTP(S) URLs and absolute local paths.

+
+
+
+
ForEachArgs
+

Expands an environment variable to multiple arguments. +The variable specified in ItemFrom is split using Separator and the Arguments are added once for each item.

+
+
+
+
GenericBinding
+

Zero Install will not know how to run a program using generic bindings itself, but it will include them in any selections documents it creates, which can then be executed by your custom code.

+
+
+
+
Group
+

All attributes of a group are inherited by any child Groups and Implementations as defaults, but can be overridden there. +All Dependencys and Bindings are inherited (sub-groups may add more Dependencys and Bindings to the list, but cannot remove any).

+
+
+
+
Icon
+

An icon representing the application. Used in the Catalog GUI as well as for desktop icons, menu entries, etc..

+
+
+
+
IconExtensions
+

Provides extensions methods related to Icons.

+
+
+
+
Implementation
+

An implementation is a specific version of an application that can be downloaded and executed (e.g. Firefox 3.6 for Windows).

+
+
+
+
ImplementationBase
+

Information for identifying an implementation of a Feed. +Common base for Implementation and ImplementationSelection.

+
+
+
+
ImplementationVersion
+

Represents a version number consisting of dot-separated decimals and optional modifier strings.

+
+
+
+
InterfaceReference
+

A reference to an interface URI, e.g. for specifying which interface this feed implements or by which interface it is replaced.

+
+
+
+
ManifestDigestPartialEqualityComparer
+

Uses PartialEquals(ManifestDigest) to compare ManifestDigests.

+
+
+
+
ManifestDigestPartialEqualityComparer<T>
+

Uses PartialEquals(ManifestDigest) to compare ImplementationBases.

+
+
+
+
ModelUtils
+

Provides utility methods for interface and feed URIs.

+
+
+
+
OverlayBinding
+

Make a chosen Implementation available by overlaying it onto another part of the file-system.

+
+
+
+
PackageImplementation
+

An implementation provided by a distribution-specific package manager instead of Zero Install.

+
+
+
+
Recipe
+

Retrieves an implementation by applying a list of IRecipeSteps, such as downloading and combining multiple archives.

+
+
+
+
RemoveStep
+

Removes or moves a file or directory. It is an error if the path is outside the implementation.

+
+
+
+
RenameStep
+

Renames or moves a file or directory. It is an error if the source or destination are outside the implementation.

+
+
+
+
Requirements
+

A set of requirements/restrictions imposed by the user on the Implementation selection process. Used as input for the solver.

+
+
+
+
Restriction
+

Restricts the versions of an Implementation that are allowed without creating a dependency on the implementation if its was not already chosen.

+
+
+
+
RetrievalMethod
+

A retrieval method is a way of getting a copy of an Implementation.

+
+
+
+
Runner
+

A special kind of dependency: the program that is used to run this one. For example, a Python program might specify Python as its runner.

+
+
+
+
SingleFile
+

Retrieves an implementation by downloading a single file.

+
+
+
+
TargetBase
+

Abstract base class for Element and FeedReference. +Contains language and architecture parameters.

+
+
+
+
VersionRange
+

Represents a (possibly disjoint) set of ranges of ImplementationVersions.

+
+
+
+
VersionRangePart
+

Represents an individual non-disjoint part of a VersionRange.

+
+
+
+
VersionRangePartExact
+

An exact version number like 2.0 as a part of a VersionRange.

+
+
+
+
VersionRangePartExclude
+

An exclusion like !2.0 as a part of a VersionRange.

+
+
+
+
VersionRangePartRange
+

A version range like 1.0..!2.0 as a part of a VersionRange.

+
+
+
+
WorkingDir
+

Switches the working directory of a process on startup to a location within an implementation. +Useful for supporting legacy Windows applications which do not properly locate their installation directory.

+
+
+
+
XmlUnknown
+

Abstract base class for XML serializable classes that are intended to retain any unknown XML elements or attributes loaded from an XML file.

+
+
+
+
ZeroInstallDeployment
+

Registers and discovers Zero Install deployments on this system.

+
+
+
+
ZeroInstallEnvironment
+

Provides access to Zero Install-related environment variables.

+
+
+

+Structs +

+
+
Architecture
+

Describes a combination of an operating system and a CPU architecture.

+
+
+
+
FeedTarget
+

Associates a FeedUri with the Feed data acquired from there.

+
+
+
+
ManifestDigest
+

A manifest digest is a means of uniquely identifying an Implementation and verifying its contents.

+
+
+
+
VersionDottedList
+

Represents a dotted-list part of a ImplementationVersion.

+
+
+
+
VersionPart
+

Represents a part of a ImplementationVersion containing nothing, a VersionModifier, a DottedList or both.

+
+
+

+Interfaces +

+
+
IArgBaseContainer
+

An object that contains ArgBases.

+
+
+
+
IBindingContainer
+

An object that contains Bindings.

+
+
+
+
IDependencyContainer
+

An object that contains Dependencys and Restrictions.

+
+
+
+
IDescriptionContainer
+

An object that has localizable descriptions.

+
+
+
+
IElementContainer
+

An object that contains Groups and Implementations. Supports a composite pattern.

+
+
+
+
IIconContainer
+

An object that contains Iconss.

+
+
+
+
IInterfaceUri
+

An object that contains an interface URI.

+
+
+
+
IInterfaceUriBindingContainer
+

An object that contains an interface URI string.

+
+
+
+
IRecipeStep
+

A retrieval step is a part of a Recipe.

+
+
+
+
ISummaryContainer
+

An object that has localizable summaries and descriptions.

+
+
+

+Enums +

+
+
Cpu
+

Describes a CPU architecture.

+
+
+
+
EnvironmentMode
+

Controls how Insert or Value is added to a variable.

+
+
+
+
Importance
+

Describes how important a dependency is (i.e. whether ignoring it is an option).

+
+
+
+
OS
+

Describes an operating system family.

+
+
+
+
Stability
+

A stability rating for an Implementation.

+
+
+
+
VersionModifier
+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.BuilderExtensions.html b/api/ZeroInstall.Publish.BuilderExtensions.html new file mode 100644 index 000000000..d87ed1271 --- /dev/null +++ b/api/ZeroInstall.Publish.BuilderExtensions.html @@ -0,0 +1,340 @@ + + + + + Class BuilderExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class BuilderExtensions +

+ +
+
Namespace
ZeroInstall.Publish
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Helpers for adding RetrievalMethods to IBuilders and setting missing properties.

+
+
+ +
+
public static class BuilderExtensions
+
+ + + + +
+
Inheritance
+
+ +
BuilderExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Add(IBuilder, DownloadRetrievalMethod, ICommandExecutor, ITaskHandler, string?) + +

+ +

Applies a retrieval method to the implementation. Sets missing properties in the process.

+
+
+ +
+
public static void Add(this IBuilder builder, DownloadRetrievalMethod retrievalMethod, ICommandExecutor executor, ITaskHandler handler, string? localPath = null)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder.

+
+
retrievalMethod DownloadRetrievalMethod
+

The retrieval method.

+
+
executor ICommandExecutor
+

Used to modify properties in an undoable fashion.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
localPath string
+

An optional local file path where the retrievalMethod has already been downloaded.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
IOException
+

There is a problem accessing localPath.

+
+
UnauthorizedAccessException
+

Read access to localPath is not permitted.

+
+
+ + + + + +

+ Add(IBuilder, RetrievalMethod, ICommandExecutor, ITaskHandler) + +

+ +

Applies a retrieval method to the implementation. Sets missing properties in the process.

+
+
+ +
+
public static void Add(this IBuilder builder, RetrievalMethod retrievalMethod, ICommandExecutor executor, ITaskHandler handler)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder.

+
+
retrievalMethod RetrievalMethod
+

The retrieval method.

+
+
executor ICommandExecutor
+

Used to modify properties in an undoable fashion.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
+ + + + + +

+ CopyFrom(IBuilder, CopyFromStep, ITaskHandler) + +

+ +

Copies files or directories from another implementation fetched by an external 0install process.

+
+
+ +
+
public static void CopyFrom(this IBuilder builder, CopyFromStep metadata, ITaskHandler handler)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder.

+
+
metadata CopyFromStep
+

The path of the source and destination file or directory.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.Capture.CaptureSession.html b/api/ZeroInstall.Publish.Capture.CaptureSession.html new file mode 100644 index 000000000..b6cf7e157 --- /dev/null +++ b/api/ZeroInstall.Publish.Capture.CaptureSession.html @@ -0,0 +1,506 @@ + + + + + Class CaptureSession | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CaptureSession +

+ +
+
Namespace
ZeroInstall.Publish.Capture
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Manages the process of taking two Snapshots and comparing them to generate a Feed.

+
+
+ +
+
public class CaptureSession
+
+ + + + +
+
Inheritance
+
+ +
CaptureSession
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ InstallationDir + +

+ +

The fully qualified path to the installation directory; leave null or empty for auto-detection.

+
+
+ +
+
public string? InstallationDir { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CollectFiles(string, Uri, ITaskHandler) + +

+ +

Creates a archive containing the InstallationDir.

+
+
+ +
+
public void CollectFiles(string archivePath, Uri archiveUrl, ITaskHandler handler)
+
+ +

Parameters

+
+
archivePath string
+

The path of the archive file to create.

+
+
archiveUrl Uri
+

The URL where the archive will be uploaded.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + +

Remarks

+ + +

Exceptions

+
+
InvalidOperationException
+

Diff(ITaskHandler) was not called or MainCandidate is not set.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

There was an error reading the installation files or writing the archive.

+
+
UnauthorizedAccessException
+

Access to the file system was not permitted.

+
+
NotSupportedException
+

The MIME type inferred from the archivePath doesn't belong to a known and supported archive type.

+
+
+ + + + + +

+ Diff(ITaskHandler) + +

+ +

Collects data from the locations indicated by the differences between the Start(FeedBuilder) state and the current system state.

+
+
+ +
+
public void Diff(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

No installation directory was detected.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

There was an error accessing the registry or file system.

+
+
UnauthorizedAccessException
+

Access to the registry or file system was not permitted.

+
+
+ + + + + +

+ Finish() + +

+ +

Finishes the capture process after Diff(ITaskHandler) has been called an MainCandidate has been set.

+
+
+ +
+
public void Finish()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

Diff(ITaskHandler) was not called or MainCandidate is not set.

+
+
IOException
+

There was an error accessing the registry or file system.

+
+
UnauthorizedAccessException
+

Access to the registry or file system was not permitted.

+
+
+ + + + + +

+ Load(string, FeedBuilder) + +

+ +

Loads a capture session from a snapshot file.

+
+
+ +
+
public static CaptureSession Load(string path, FeedBuilder feedBuilder)
+
+ +

Parameters

+
+
path string
+

The file to load from.

+
+
feedBuilder FeedBuilder
+

All collected data is stored into this builder. You can perform additional modifications before using Build() to get a feed.

+
+
+ +

Returns

+
+
CaptureSession
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing the binary data.

+
+
+ + + + + +

+ Save(string) + +

+ +

Saves the capture session to a snapshot file.

+
+
+ +
+
public void Save(string path)
+
+ +

Parameters

+
+
path string
+

The file to save in.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing the file.

+
+
UnauthorizedAccessException
+

Write access to the file is not permitted.

+
+
+ + + + + +

+ Start(FeedBuilder) + +

+ +

Captures the current system state as a snapshot of the system state before the target application was installed.

+
+
+ +
+
public static CaptureSession Start(FeedBuilder feedBuilder)
+
+ +

Parameters

+
+
feedBuilder FeedBuilder
+

All collected data is stored into this builder. You can perform additional modifications before using Build() to get a feed.

+
+
+ +

Returns

+
+
CaptureSession
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was an error accessing the registry or file system.

+
+
UnauthorizedAccessException
+

Access to the registry or the file system was not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.Capture.CommandMapper.html b/api/ZeroInstall.Publish.Capture.CommandMapper.html new file mode 100644 index 000000000..3bb71b035 --- /dev/null +++ b/api/ZeroInstall.Publish.Capture.CommandMapper.html @@ -0,0 +1,299 @@ + + + + + Class CommandMapper | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CommandMapper +

+ +
+
Namespace
ZeroInstall.Publish.Capture
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Maps command-lines to the best matching Command.

+
+
+ +
+
public class CommandMapper
+
+ + + + +
+
Inheritance
+
+ +
CommandMapper
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ CommandMapper(string, IEnumerable<Command>) + +

+ +

Creates a new command provider.

+
+
+ +
+
public CommandMapper(string installationDir, IEnumerable<Command> commands)
+
+ +

Parameters

+
+
installationDir string
+

The fully qualified path to the installation directory.

+
+
commands IEnumerable<Command>
+

A list of all known-commands available within the installation directory.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ InstallationDir + +

+ +

The fully qualified path to the installation directory.

+
+
+ +
+
public string InstallationDir { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ GetCommand(string, out string?) + +

+ +

Tries to find the best-match Command for a command-line.

+
+
+ +
+
public Command? GetCommand(string commandLine, out string? additionalArgs)
+
+ +

Parameters

+
+
commandLine string
+

The fully qualified command-line to try to match.

+
+
additionalArgs string
+

Any additional arguments from commandLine that are not covered by the returned Command.

+
+
+ +

Returns

+
+
Command
+

The best matching Command or null if no match was found.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.Capture.Snapshot.html b/api/ZeroInstall.Publish.Capture.Snapshot.html new file mode 100644 index 000000000..d141e8829 --- /dev/null +++ b/api/ZeroInstall.Publish.Capture.Snapshot.html @@ -0,0 +1,717 @@ + + + + + Class Snapshot | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Snapshot +

+ +
+
Namespace
ZeroInstall.Publish.Capture
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Represents the systems state at a point in time. This is used to determine changes.

+
+
+ +
+
[Serializable]
+public class Snapshot
+
+ + + + +
+
Inheritance
+
+ +
Snapshot
+
+
+ + +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ AutoPlayAssocsMachine + +

+ +

A list of associations of AutoPlay events with AutoPlay handlers.

+
+
+ +
+
public List<(string name, string handler)> AutoPlayAssocsMachine { get; }
+
+ + + + + +

Property Value

+
+
List<(string name, string client)>
+
+
+ + + + + + + + + + +

+ AutoPlayAssocsUser + +

+ +

A list of associations of AutoPlay events with AutoPlay handlers.

+
+
+ +
+
public List<(string name, string handler)> AutoPlayAssocsUser { get; }
+
+ + + + + +

Property Value

+
+
List<(string name, string client)>
+
+
+ + + + + + + + + + +

+ AutoPlayHandlersMachine + +

+ +

A list of applications registered as AutoPlay handlers.

+
+
+ +
+
public List<string> AutoPlayHandlersMachine { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ AutoPlayHandlersUser + +

+ +

A list of applications registered as AutoPlay handlers.

+
+
+ +
+
public List<string> AutoPlayHandlersUser { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ ClassIDs + +

+ +

A list of COM class IDs.

+
+
+ +
+
public List<string> ClassIDs { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ ContextMenuAll + +

+ +

A list of context menu entries for all filesystem objects (files and directories).

+
+
+ +
+
public List<string> ContextMenuAll { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ ContextMenuDirectories + +

+ +

A list of context menu entries for all directories.

+
+
+ +
+
public List<string> ContextMenuDirectories { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ ContextMenuExecutableFiles + +

+ +

A list of context menu entries for executable files.

+
+
+ +
+
public List<string> ContextMenuExecutableFiles { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ ContextMenuFiles + +

+ +

A list of context menu entries for all files.

+
+
+ +
+
public List<string> ContextMenuFiles { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ FileAssocs + +

+ +

A list of associations of file extensions with programmatic identifiers.

+
+
+ +
+
public List<(string extension, string progID)> FileAssocs { get; }
+
+ + + + + +

Property Value

+
+
List<(string name, string client)>
+
+
+ + + + + + + + + + +

+ ProgIDs + +

+ +

A list of programmatic identifiers.

+
+
+ +
+
public List<string> ProgIDs { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ ProgramsDirs + +

+ +

A list of program installation directories.

+
+
+ +
+
public List<string> ProgramsDirs { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ ProtocolAssocs + +

+ +

A list of protocol associations for well-known protocols (e.g. HTTP, FTP, ...).

+
+
+ +
+
public List<(string protocol, string progID)> ProtocolAssocs { get; }
+
+ + + + + +

Property Value

+
+
List<(string name, string client)>
+
+
+ + + + + + + + + + +

+ RegisteredApplications + +

+ +

A list of applications registered as candidates for default programs.

+
+
+ +
+
public List<string> RegisteredApplications { get; }
+
+ + + + + +

Property Value

+
+
List<string>
+
+
+ + + + + + + + + + +

+ ServiceAssocs + +

+ +

A list of associations of services with clients (e.g. web browsers, mail readers, ...).

+
+
+ +
+
public List<(string name, string client)> ServiceAssocs { get; }
+
+ + + + + +

Property Value

+
+
List<(string name, string client)>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Take() + +

+ +

Takes a snapshot of the current system state.

+
+
+ +
+
public static Snapshot Take()
+
+ + +

Returns

+
+
Snapshot
+

The newly created snapshot.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was an error accessing the registry or file system.

+
+
UnauthorizedAccessException
+

Read access to the registry or file system was not permitted.

+
+
PlatformNotSupportedException
+

This method is called while running on a platform for which capturing is not supported.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.Capture.SnapshotDiff.html b/api/ZeroInstall.Publish.Capture.SnapshotDiff.html new file mode 100644 index 000000000..64372707c --- /dev/null +++ b/api/ZeroInstall.Publish.Capture.SnapshotDiff.html @@ -0,0 +1,595 @@ + + + + + Class SnapshotDiff | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SnapshotDiff +

+ +
+
Namespace
ZeroInstall.Publish.Capture
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Represents the differences between two Snapshots. Extracts information about applications installed.

+
+
+ +
+
public class SnapshotDiff : Snapshot
+
+ + + + +
+
Inheritance
+
+ + +
SnapshotDiff
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ SnapshotDiff(Snapshot, Snapshot) + +

+ +

Determines which elements have been added to the system between two snapshots.

+
+
+ +
+
public SnapshotDiff(Snapshot before, Snapshot after)
+
+ +

Parameters

+
+
before Snapshot
+

The first snapshot taken.

+
+
after Snapshot
+

The second snapshot taken.

+
+
+ + + + + + + + +

Remarks

+

Assumes that all internal arrays are sorted alphabetically.

+
+ + + + +

Methods +

+ + + + +

+ CollectAutoPlays(CommandMapper, CapabilityList) + +

+ +

Collects data about AutoPlay handlers.

+
+
+ +
+
public void CollectAutoPlays(CommandMapper commandMapper, CapabilityList capabilities)
+
+ +

Parameters

+
+
commandMapper CommandMapper
+

Provides best-match command-line to Command mapping.

+
+
capabilities CapabilityList
+

The capability list to add the collected data to.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

There was an error accessing the registry.

+
+
UnauthorizedAccessException
+

Read access to the registry was not permitted.

+
+
+ + + + + +

+ CollectContextMenus(CommandMapper, CapabilityList) + +

+ +

Collects data about context menu entries.

+
+
+ +
+
public void CollectContextMenus(CommandMapper commandMapper, CapabilityList capabilities)
+
+ +

Parameters

+
+
commandMapper CommandMapper
+

Provides best-match command-line to Command mapping.

+
+
capabilities CapabilityList
+

The capability list to add the collected data to.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

There was an error accessing the registry.

+
+
UnauthorizedAccessException
+

Read access to the registry was not permitted.

+
+
+ + + + + +

+ CollectDefaultPrograms(CommandMapper, CapabilityList, ref string?) + +

+ +

Collects data about default programs.

+
+
+ +
+
public void CollectDefaultPrograms(CommandMapper commandMapper, CapabilityList capabilities, ref string? appName)
+
+ +

Parameters

+
+
commandMapper CommandMapper
+

Provides best-match command-line to Command mapping.

+
+
capabilities CapabilityList
+

The capability list to add the collected data to.

+
+
appName string
+

Is set to the name of the application as displayed to the user; unchanged if the name was not found.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

There was an error accessing the registry.

+
+
UnauthorizedAccessException
+

Read access to the registry was not permitted.

+
+
+ + + + + +

+ CollectFileTypes(CommandMapper, CapabilityList) + +

+ +

Collects data about file types and also URL protocol handlers.

+
+
+ +
+
public void CollectFileTypes(CommandMapper commandMapper, CapabilityList capabilities)
+
+ +

Parameters

+
+
commandMapper CommandMapper
+

Provides best-match command-line to Command mapping.

+
+
capabilities CapabilityList
+

The capability list to add the collected data to.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

There was an error accessing the registry.

+
+
UnauthorizedAccessException
+

Read access to the registry was not permitted.

+
+
+ + + + + +

+ CollectProtocolAssocs(CommandMapper, CapabilityList) + +

+ +

Collects data about well-known URL protocol handlers.

+
+
+ +
+
public void CollectProtocolAssocs(CommandMapper commandMapper, CapabilityList capabilities)
+
+ +

Parameters

+
+
commandMapper CommandMapper
+

Provides best-match command-line to Command mapping.

+
+
capabilities CapabilityList
+

The capability list to add the collected data to.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

There was an error accessing the registry.

+
+
UnauthorizedAccessException
+

Read access to the registry was not permitted.

+
+
+ + + + + +

+ GetAppRegistration(CommandMapper, CapabilityList, ref string?, ref string?) + +

+ +

Retrieves data about registered applications.

+
+
+ +
+
public AppRegistration? GetAppRegistration(CommandMapper commandMapper, CapabilityList capabilities, ref string? appName, ref string? appDescription)
+
+ +

Parameters

+
+
commandMapper CommandMapper
+

Provides best-match command-line to Command mapping.

+
+
capabilities CapabilityList
+

The capability list to add the collected data to.

+
+
appName string
+

Is set to the name of the application as displayed to the user; unchanged if the name was not found.

+
+
appDescription string
+

Is set to a user-friendly description of the application; unchanged if the name was not found.

+
+
+ +

Returns

+
+
AppRegistration
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was an error accessing the registry.

+
+
UnauthorizedAccessException
+

Read access to the registry was not permitted.

+
+
+ + + + + +

+ GetInstallationDir() + +

+ +

Locates the directory into which the new application was installed.

+
+
+ +
+
public string GetInstallationDir()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

No installation directory was detected.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.Capture.html b/api/ZeroInstall.Publish.Capture.html new file mode 100644 index 000000000..310df17c3 --- /dev/null +++ b/api/ZeroInstall.Publish.Capture.html @@ -0,0 +1,145 @@ + + + + + Namespace ZeroInstall.Publish.Capture | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Publish.Capture

+
+

Builds feeds by creating and comparing snapshots of the system before and after an application was installed.

+
+
+
+ +

+Classes +

+
+
CaptureSession
+

Manages the process of taking two Snapshots and comparing them to generate a Feed.

+
+
+
+
CommandMapper
+

Maps command-lines to the best matching Command.

+
+
+
+
Snapshot
+

Represents the systems state at a point in time. This is used to determine changes.

+
+
+
+
SnapshotDiff
+

Represents the differences between two Snapshots. Extracts information about applications installed.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.BashScript.html b/api/ZeroInstall.Publish.EntryPoints.BashScript.html new file mode 100644 index 000000000..b81325633 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.BashScript.html @@ -0,0 +1,246 @@ + + + + + Class BashScript | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class BashScript +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A script written in Perl.

+
+
+ +
+
public sealed class BashScript : InterpretedScript, IEquatable<Candidate>, IEquatable<InterpretedScript>
+
+ + + + +
+
Inheritance
+
+ + + +
BashScript
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ InterpreterInterface + +

+ +

The interface URI of the interpreter to run the script.

+
+
+ +
+
protected override FeedUri InterpreterInterface { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.Candidate.html b/api/ZeroInstall.Publish.EntryPoints.Candidate.html new file mode 100644 index 000000000..3e1821f78 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.Candidate.html @@ -0,0 +1,823 @@ + + + + + Class Candidate | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Candidate +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Collects information about a potential candidate for an entry point. +The subclass type determines the type of executable (native binary, interpreted script, etc.).

+
+
+ +
+
[Equatable]
+public abstract class Candidate : IEquatable<Candidate>
+
+ + + + +
+
Inheritance
+
+ +
Candidate
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + +
+ + + + + + +

Properties +

+ + + + +

+ Architecture + +

+ +

The application's target architecture.

+
+
+ +
+
public Architecture Architecture { get; set; }
+
+ + + + + +

Property Value

+
+
Architecture
+
+
+ + + + + + + + + + +

+ BaseDirectory + +

+ +

The base directory containing the entire application.

+
+
+ +
+
[Browsable(false)]
+[IgnoreEquality]
+protected DirectoryInfo? BaseDirectory { get; }
+
+ + + + + +

Property Value

+
+
DirectoryInfo
+
+
+ + + + + + + + + + +

+ Category + +

+ +

The main category of the application. May influence the placement in the start menu.

+
+
+ +
+
[TypeConverter(typeof(CategoryNameConverter))]
+public string? Category { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ CommandName + +

+ +

The Name used by CreateCommand().

+
+
+ +
+
protected string CommandName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The application's name.

+
+
+ +
+
public string? Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + +

Remarks

+

A suggestion for Name.

+
+ + + + + + +

+ NeedsTerminal + +

+ +

Indicates whether the application is a command-line application (true) or a GUI application (false).

+
+
+ +
+
public bool NeedsTerminal { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ RelativePath + +

+ +

The path of this entry point relative to BaseDirectory.

+
+
+ +
+
[Browsable(false)]
+public string? RelativePath { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Summary + +

+ +

Short one-line description; the first word should not be upper-case unless it is a proper noun (e.g. "cures all ills").

+
+
+ +
+
public string? Summary { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + +

Remarks

+

A suggestion for Summaries.

+
+ + + + + + +

+ Version + +

+ +

The application's current version.

+
+
+ +
+
public ImplementationVersion? Version { get; set; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CreateCommand() + +

+ +

Creates a Command to launch this entry point.

+
+
+ +
+
public abstract Command CreateCommand()
+
+ + +

Returns

+
+
Command
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Candidate?) + +

+ +
+
+ +
+
protected bool Equals(Candidate? other)
+
+ +

Parameters

+
+
other Candidate
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ IsExecutable(string) + +

+ +

Determines whether a file is executable.

+
+
+ +
+
protected bool IsExecutable(string path)
+
+ +

Parameters

+
+
path string
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns a string that represents the current object.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+

A string that represents the current object.

+
+
+ + + + + + + + + + + + + +

+ ToVersionRange(ImplementationVersion?) + +

+ +
+
+ +
+
protected static VersionRange? ToVersionRange(ImplementationVersion? version)
+
+ +

Parameters

+
+
version ImplementationVersion
+
+
+ +

Returns

+
+
VersionRange
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Candidate?, Candidate?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Candidate? left, Candidate? right)
+
+ +

Parameters

+
+
left Candidate
+

The left object

+
+
right Candidate
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Candidate?, Candidate?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Candidate? left, Candidate? right)
+
+ +

Parameters

+
+
left Candidate
+

The left object

+
+
right Candidate
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.DetectCandidates.html b/api/ZeroInstall.Publish.EntryPoints.DetectCandidates.html new file mode 100644 index 000000000..db6545b66 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.DetectCandidates.html @@ -0,0 +1,411 @@ + + + + + Class DetectCandidates | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DetectCandidates +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Detects entry point Candidates in a file system directory.

+
+
+ +
+
public class DetectCandidates : ReadDirectoryBase, ITask
+
+ + + + +
+
Inheritance
+
+ + + + +
DetectCandidates
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ DetectCandidates(string) + +

+ +

Detects entry point Candidates in a file system directory.

+
+
+ +
+
public DetectCandidates(string path)
+
+ +

Parameters

+
+
path string
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Candidates + +

+ +

The list of detected candidates.

+
+
+ +
+
public IReadOnlyList<Candidate> Candidates { get; }
+
+ + + + + +

Property Value

+
+
IReadOnlyList<Candidate>
+
+
+ + + + + + + + + + +

+ Name + +

+ +

A name describing the task in human-readable form.

+
+
+ +
+
public override string Name { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ HandleDirectory(DirectoryInfo) + +

+ +

Called once for every sub-directory below Source.

+
+
+ +
+
protected override void HandleDirectory(DirectoryInfo directory)
+
+ +

Parameters

+
+
directory DirectoryInfo
+

The directory to handle.

+
+
+ + + + + + + + + + + + + + +

+ HandleFile(FileInfo, FileInfo?) + +

+ +

Called once for every file below Source.

+
+
+ +
+
protected override void HandleFile(FileInfo file, FileInfo? hardlinkTarget = null)
+
+ +

Parameters

+
+
file FileInfo
+

The file to handle.

+
+
hardlinkTarget FileInfo
+

A previously handled file that is hardlinked to file. May be null.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.DotNetDll.html b/api/ZeroInstall.Publish.EntryPoints.DotNetDll.html new file mode 100644 index 000000000..1c5dea8cf --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.DotNetDll.html @@ -0,0 +1,412 @@ + + + + + Class DotNetDll | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DotNetDll +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +
+
+ +
+
[Equatable]
+public sealed class DotNetDll : DotNetExe, IEquatable<Candidate>, IIconContainer, IEquatable<DotNetExe>, IEquatable<DotNetDll>
+
+ + + + +
+
Inheritance
+
+ + + + + +
DotNetDll
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ExecutableExtension + +

+ +
+
+ +
+
protected override string ExecutableExtension { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(DotNetDll?, DotNetDll?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(DotNetDll? left, DotNetDll? right)
+
+ +

Parameters

+
+
left DotNetDll
+

The left object

+
+
right DotNetDll
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(DotNetDll?, DotNetDll?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(DotNetDll? left, DotNetDll? right)
+
+ +

Parameters

+
+
left DotNetDll
+

The left object

+
+
right DotNetDll
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.DotNetExe.html b/api/ZeroInstall.Publish.EntryPoints.DotNetExe.html new file mode 100644 index 000000000..cb06f72b6 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.DotNetExe.html @@ -0,0 +1,569 @@ + + + + + Class DotNetExe | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DotNetExe +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +
+
+ +
+
[Equatable]
+public class DotNetExe : WindowsExe, IEquatable<Candidate>, IIconContainer, IEquatable<DotNetExe>
+
+ + + + +
+
Inheritance
+
+ + + + +
DotNetExe
+
+
+ +
+
Implements
+
+ + + +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ NeedsAspNetCore + +

+ +

Indicates whether the app needs the ASP.NET Core Runtime.

+
+
+ +
+
public bool NeedsAspNetCore { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ RuntimeVersion + +

+ +

The version of the .NET Runtime required by the application.

+
+
+ +
+
[TypeConverter(typeof(StringConstructorConverter<ImplementationVersion>))]
+public ImplementationVersion RuntimeVersion { get; set; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CreateCommand() + +

+ +

Creates a Command to launch this entry point.

+
+
+ +
+
public override Command CreateCommand()
+
+ + +

Returns

+
+
Command
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(DotNetExe?) + +

+ +
+
+ +
+
protected bool Equals(DotNetExe? other)
+
+ +

Parameters

+
+
other DotNetExe
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Parse(PEHeader) + +

+ +
+
+ +
+
protected override bool Parse(PEHeader peHeader)
+
+ +

Parameters

+
+
peHeader PEHeader
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(DotNetExe?, DotNetExe?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(DotNetExe? left, DotNetExe? right)
+
+ +

Parameters

+
+
left DotNetExe
+

The left object

+
+
right DotNetExe
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(DotNetExe?, DotNetExe?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(DotNetExe? left, DotNetExe? right)
+
+ +

Parameters

+
+
left DotNetExe
+

The left object

+
+
right DotNetExe
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.DotNetFrameworkExe.html b/api/ZeroInstall.Publish.EntryPoints.DotNetFrameworkExe.html new file mode 100644 index 000000000..9d3371f37 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.DotNetFrameworkExe.html @@ -0,0 +1,536 @@ + + + + + Class DotNetFrameworkExe | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DotNetFrameworkExe +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A .NET/Mono executable.

+
+
+ +
+
[Equatable]
+public sealed class DotNetFrameworkExe : WindowsExe, IEquatable<Candidate>, IIconContainer, IEquatable<DotNetFrameworkExe>
+
+ + + + +
+
Inheritance
+
+ + + + +
DotNetFrameworkExe
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ExternalDependencies + +

+ +

Does this application have external dependencies that need to be injected by Zero Install? Only enable if you are sure!

+
+
+ +
+
public bool ExternalDependencies { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ MinimumRuntimeVersion + +

+ +

The minimum version of the .NET Runtime required by the application.

+
+
+ +
+
[TypeConverter(typeof(DotNetVersionConverter))]
+public ImplementationVersion? MinimumRuntimeVersion { get; set; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + + + +

+ RuntimeType + +

+ +

The types of .NET Runtime supported by the application.

+
+
+ +
+
public DotNetRuntimeType RuntimeType { get; set; }
+
+ + + + + +

Property Value

+
+
DotNetRuntimeType
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CreateCommand() + +

+ +

Creates a Command to launch this entry point.

+
+
+ +
+
public override Command CreateCommand()
+
+ + +

Returns

+
+
Command
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Parse(PEHeader) + +

+ +
+
+ +
+
protected override bool Parse(PEHeader peHeader)
+
+ +

Parameters

+
+
peHeader PEHeader
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(DotNetFrameworkExe?, DotNetFrameworkExe?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(DotNetFrameworkExe? left, DotNetFrameworkExe? right)
+
+ +

Parameters

+
+
left DotNetFrameworkExe
+

The left object

+
+
right DotNetFrameworkExe
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(DotNetFrameworkExe?, DotNetFrameworkExe?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(DotNetFrameworkExe? left, DotNetFrameworkExe? right)
+
+ +

Parameters

+
+
left DotNetFrameworkExe
+

The left object

+
+
right DotNetFrameworkExe
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.DotNetRuntimeType.html b/api/ZeroInstall.Publish.EntryPoints.DotNetRuntimeType.html new file mode 100644 index 000000000..9443af6af --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.DotNetRuntimeType.html @@ -0,0 +1,155 @@ + + + + + Enum DotNetRuntimeType | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum DotNetRuntimeType +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +
+
+ +
+
public enum DotNetRuntimeType
+
+ + + + + + + + + +

Fields +

+
+
DotNetFramework = 0
+
+
DotNetFrameworkClientProfile = 1
+
+
DotNetFrameworkOrMono = 3
+
+
Mono = 2
+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.IIconContainer.html b/api/ZeroInstall.Publish.EntryPoints.IIconContainer.html new file mode 100644 index 000000000..84f2dc611 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.IIconContainer.html @@ -0,0 +1,181 @@ + + + + + Interface IIconContainer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IIconContainer +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

An executable with embedded icons.

+
+
+ +
+
public interface IIconContainer
+
+ + + + + + + + + + + + + +

Methods +

+ + + + +

+ ExtractIcon() + +

+ +

Extracts the primary icon of the executable.

+
+
+ +
+
Icon ExtractIcon()
+
+ + +

Returns

+
+
Icon
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.InterpretedScript.html b/api/ZeroInstall.Publish.EntryPoints.InterpretedScript.html new file mode 100644 index 000000000..8cc3e9751 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.InterpretedScript.html @@ -0,0 +1,567 @@ + + + + + Class InterpretedScript | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class InterpretedScript +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A plain text script that is executed by a runtime interpreter.

+
+
+ +
+
[Equatable]
+public abstract class InterpretedScript : Candidate, IEquatable<Candidate>, IEquatable<InterpretedScript>
+
+ + + + +
+
Inheritance
+
+ + +
InterpretedScript
+
+
+ +
+
Implements
+
+ + +
+
+ +
+
Derived
+
+ + + + + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ InterpreterInterface + +

+ +

The interface URI of the interpreter to run the script.

+
+
+ +
+
protected abstract FeedUri InterpreterInterface { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ InterpreterVersions + +

+ +

The range of versions of the script interpreter supported by the application.

+
+
+ +
+
public VersionRange? InterpreterVersions { get; set; }
+
+ + + + + +

Property Value

+
+
VersionRange
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CreateCommand() + +

+ +

Creates a Command to launch this entry point.

+
+
+ +
+
public override Command CreateCommand()
+
+ + +

Returns

+
+
Command
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(InterpretedScript?) + +

+ +
+
+ +
+
protected bool Equals(InterpretedScript? other)
+
+ +

Parameters

+
+
other InterpretedScript
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ HasShebang(FileInfo, string) + +

+ +

Determines whether a file is executable and has a shebang line pointing to a specific interpreter.

+
+
+ +
+
protected bool HasShebang(FileInfo file, string interpreter)
+
+ +

Parameters

+
+
file FileInfo
+

The file to analyze.

+
+
interpreter string
+

The name of the interpreter to search for (e.g. 'python').

+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(InterpretedScript?, InterpretedScript?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(InterpretedScript? left, InterpretedScript? right)
+
+ +

Parameters

+
+
left InterpretedScript
+

The left object

+
+
right InterpretedScript
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(InterpretedScript?, InterpretedScript?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(InterpretedScript? left, InterpretedScript? right)
+
+ +

Parameters

+
+
left InterpretedScript
+

The left object

+
+
right InterpretedScript
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.Java.html b/api/ZeroInstall.Publish.EntryPoints.Java.html new file mode 100644 index 000000000..ecec936e0 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.Java.html @@ -0,0 +1,526 @@ + + + + + Class Java | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Java +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A compiled Java application.

+
+
+ +
+
[Equatable]
+public abstract class Java : Candidate, IEquatable<Candidate>, IEquatable<Java>
+
+ + + + +
+
Inheritance
+
+ + +
Java
+
+
+ +
+
Implements
+
+ + +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ExternalDependencies + +

+ +

Does this application have external dependencies that need to be injected by Zero Install? Only enable if you are sure!

+
+
+ +
+
public bool ExternalDependencies { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ GuiOnly + +

+ +

Does this application have a graphical interface an no terminal output? Only enable if you are sure!

+
+
+ +
+
public bool GuiOnly { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ MinimumRuntimeVersion + +

+ +

The minimum version of the Java Runtime Environment required by the application.

+
+
+ +
+
[TypeConverter(typeof(JavaVersionConverter))]
+public ImplementationVersion? MinimumRuntimeVersion { get; set; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Java?) + +

+ +
+
+ +
+
protected bool Equals(Java? other)
+
+ +

Parameters

+
+
other Java
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Java?, Java?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Java? left, Java? right)
+
+ +

Parameters

+
+
left Java
+

The left object

+
+
right Java
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Java?, Java?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Java? left, Java? right)
+
+ +

Parameters

+
+
left Java
+

The left object

+
+
right Java
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.JavaClass.html b/api/ZeroInstall.Publish.EntryPoints.JavaClass.html new file mode 100644 index 000000000..53127e173 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.JavaClass.html @@ -0,0 +1,249 @@ + + + + + Class JavaClass | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class JavaClass +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A compiled Java class file.

+
+
+ +
+
public sealed class JavaClass : Java, IEquatable<Candidate>, IEquatable<Java>
+
+ + + + +
+
Inheritance
+
+ + + +
JavaClass
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ CreateCommand() + +

+ +

Creates a Command to launch this entry point.

+
+
+ +
+
public override Command CreateCommand()
+
+ + +

Returns

+
+
Command
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.JavaJar.html b/api/ZeroInstall.Publish.EntryPoints.JavaJar.html new file mode 100644 index 000000000..9e2ee8596 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.JavaJar.html @@ -0,0 +1,249 @@ + + + + + Class JavaJar | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class JavaJar +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A Java JAR archive.

+
+
+ +
+
public sealed class JavaJar : Java, IEquatable<Candidate>, IEquatable<Java>
+
+ + + + +
+
Inheritance
+
+ + + +
JavaJar
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ CreateCommand() + +

+ +

Creates a Command to launch this entry point.

+
+
+ +
+
public override Command CreateCommand()
+
+ + +

Returns

+
+
Command
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.MacOSApp.html b/api/ZeroInstall.Publish.EntryPoints.MacOSApp.html new file mode 100644 index 000000000..76e479237 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.MacOSApp.html @@ -0,0 +1,207 @@ + + + + + Class MacOSApp | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class MacOSApp +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A binary inside a MacOS X application bundle.

+
+
+ +
+
public sealed class MacOSApp : PosixExecutable, IEquatable<Candidate>
+
+ + + + +
+
Inheritance
+
+ + + + +
MacOSApp
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.NativeExecutable.html b/api/ZeroInstall.Publish.EntryPoints.NativeExecutable.html new file mode 100644 index 000000000..311533063 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.NativeExecutable.html @@ -0,0 +1,264 @@ + + + + + Class NativeExecutable | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class NativeExecutable +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A file that can be executed directly by the operating system without an additional runtime environment.

+
+
+ +
+
public abstract class NativeExecutable : Candidate, IEquatable<Candidate>
+
+ + + + +
+
Inheritance
+
+ + +
NativeExecutable
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ CreateCommand() + +

+ +

Creates a Command to launch this entry point.

+
+
+ +
+
public override Command CreateCommand()
+
+ + +

Returns

+
+
Command
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDataDirectory.html b/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDataDirectory.html new file mode 100644 index 000000000..2a74ed361 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDataDirectory.html @@ -0,0 +1,230 @@ + + + + + Struct PEHeader.ImageDataDirectory | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct PEHeader.ImageDataDirectory +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +
+
+ +
+
public struct PEHeader.ImageDataDirectory
+
+ + + + + + + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Fields +

+ + + +

+ Size + +

+ +
+
+ +
+
public uint Size
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ VirtualAddress + +

+ +
+
+ +
+
public uint VirtualAddress
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDosHeader.html b/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDosHeader.html new file mode 100644 index 000000000..2cf00a7db --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDosHeader.html @@ -0,0 +1,1100 @@ + + + + + Struct PEHeader.ImageDosHeader | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct PEHeader.ImageDosHeader +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +
+
+ +
+
public struct PEHeader.ImageDosHeader
+
+ + + + + + + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Fields +

+ + + +

+ e_cblp + +

+ +
+
+ +
+
public ushort e_cblp
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_cp + +

+ +
+
+ +
+
public ushort e_cp
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_cparhdr + +

+ +
+
+ +
+
public ushort e_cparhdr
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_crlc + +

+ +
+
+ +
+
public ushort e_crlc
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_cs + +

+ +
+
+ +
+
public ushort e_cs
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_csum + +

+ +
+
+ +
+
public ushort e_csum
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_ip + +

+ +
+
+ +
+
public ushort e_ip
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_lfanew + +

+ +
+
+ +
+
public uint e_lfanew
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ e_lfarlc + +

+ +
+
+ +
+
public ushort e_lfarlc
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_magic + +

+ +
+
+ +
+
public ushort e_magic
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_maxalloc + +

+ +
+
+ +
+
public ushort e_maxalloc
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_minalloc + +

+ +
+
+ +
+
public ushort e_minalloc
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_oemid + +

+ +
+
+ +
+
public ushort e_oemid
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_oeminfo + +

+ +
+
+ +
+
public ushort e_oeminfo
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_ovno + +

+ +
+
+ +
+
public ushort e_ovno
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res2_0 + +

+ +
+
+ +
+
public ushort e_res2_0
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res2_1 + +

+ +
+
+ +
+
public ushort e_res2_1
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res2_2 + +

+ +
+
+ +
+
public ushort e_res2_2
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res2_3 + +

+ +
+
+ +
+
public ushort e_res2_3
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res2_4 + +

+ +
+
+ +
+
public ushort e_res2_4
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res2_5 + +

+ +
+
+ +
+
public ushort e_res2_5
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res2_6 + +

+ +
+
+ +
+
public ushort e_res2_6
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res2_7 + +

+ +
+
+ +
+
public ushort e_res2_7
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res2_8 + +

+ +
+
+ +
+
public ushort e_res2_8
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res2_9 + +

+ +
+
+ +
+
public ushort e_res2_9
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res_0 + +

+ +
+
+ +
+
public ushort e_res_0
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res_1 + +

+ +
+
+ +
+
public ushort e_res_1
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res_2 + +

+ +
+
+ +
+
public ushort e_res_2
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_res_3 + +

+ +
+
+ +
+
public ushort e_res_3
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_sp + +

+ +
+
+ +
+
public ushort e_sp
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ e_ss + +

+ +
+
+ +
+
public ushort e_ss
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageFileHeader.html b/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageFileHeader.html new file mode 100644 index 000000000..4aed18545 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageFileHeader.html @@ -0,0 +1,380 @@ + + + + + Struct PEHeader.ImageFileHeader | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct PEHeader.ImageFileHeader +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +
+
+ +
+
public struct PEHeader.ImageFileHeader
+
+ + + + + + + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Fields +

+ + + +

+ Characteristics + +

+ +
+
+ +
+
public ushort Characteristics
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ Machine + +

+ +
+
+ +
+
public PEMachineType Machine
+
+ + + + +

Field Value

+
+
PEMachineType
+
+
+ + + + + + + + + + +

+ NumberOfSections + +

+ +
+
+ +
+
public ushort NumberOfSections
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ NumberOfSymbols + +

+ +
+
+ +
+
public uint NumberOfSymbols
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ PointerToSymbolTable + +

+ +
+
+ +
+
public uint PointerToSymbolTable
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfOptionalHeader + +

+ +
+
+ +
+
public ushort SizeOfOptionalHeader
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ TimeDateStamp + +

+ +
+
+ +
+
public uint TimeDateStamp
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader32.html b/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader32.html new file mode 100644 index 000000000..5774ab3c1 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader32.html @@ -0,0 +1,1550 @@ + + + + + Struct PEHeader.ImageOptionalHeader32 | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct PEHeader.ImageOptionalHeader32 +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +
+
+ +
+
public struct PEHeader.ImageOptionalHeader32
+
+ + + + + + + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Fields +

+ + + +

+ AddressOfEntryPoint + +

+ +
+
+ +
+
public uint AddressOfEntryPoint
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ Architecture + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory Architecture
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ BaseOfCode + +

+ +
+
+ +
+
public uint BaseOfCode
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ BaseOfData + +

+ +
+
+ +
+
public uint BaseOfData
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ BaseRelocationTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory BaseRelocationTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ BoundImport + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory BoundImport
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ CLRRuntimeHeader + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory CLRRuntimeHeader
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ CertificateTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory CertificateTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ CheckSum + +

+ +
+
+ +
+
public uint CheckSum
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ Debug + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory Debug
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ DelayImportDescriptor + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory DelayImportDescriptor
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ DllCharacteristics + +

+ +
+
+ +
+
public ushort DllCharacteristics
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ ExceptionTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory ExceptionTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ ExportTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory ExportTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ FileAlignment + +

+ +
+
+ +
+
public uint FileAlignment
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ GlobalPtr + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory GlobalPtr
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ IAT + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory IAT
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ ImageBase + +

+ +
+
+ +
+
public uint ImageBase
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ ImportTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory ImportTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ LoadConfigTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory LoadConfigTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ LoaderFlags + +

+ +
+
+ +
+
public uint LoaderFlags
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ Magic + +

+ +
+
+ +
+
public ushort Magic
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MajorImageVersion + +

+ +
+
+ +
+
public ushort MajorImageVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MajorLinkerVersion + +

+ +
+
+ +
+
public byte MajorLinkerVersion
+
+ + + + +

Field Value

+
+
byte
+
+
+ + + + + + + + + + +

+ MajorOperatingSystemVersion + +

+ +
+
+ +
+
public ushort MajorOperatingSystemVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MajorSubsystemVersion + +

+ +
+
+ +
+
public ushort MajorSubsystemVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MinorImageVersion + +

+ +
+
+ +
+
public ushort MinorImageVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MinorLinkerVersion + +

+ +
+
+ +
+
public byte MinorLinkerVersion
+
+ + + + +

Field Value

+
+
byte
+
+
+ + + + + + + + + + +

+ MinorOperatingSystemVersion + +

+ +
+
+ +
+
public ushort MinorOperatingSystemVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MinorSubsystemVersion + +

+ +
+
+ +
+
public ushort MinorSubsystemVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ NumberOfRvaAndSizes + +

+ +
+
+ +
+
public uint NumberOfRvaAndSizes
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ Reserved + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory Reserved
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ ResourceTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory ResourceTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ SectionAlignment + +

+ +
+
+ +
+
public uint SectionAlignment
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfCode + +

+ +
+
+ +
+
public uint SizeOfCode
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfHeaders + +

+ +
+
+ +
+
public uint SizeOfHeaders
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfHeapCommit + +

+ +
+
+ +
+
public uint SizeOfHeapCommit
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfHeapReserve + +

+ +
+
+ +
+
public uint SizeOfHeapReserve
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfImage + +

+ +
+
+ +
+
public uint SizeOfImage
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfInitializedData + +

+ +
+
+ +
+
public uint SizeOfInitializedData
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfStackCommit + +

+ +
+
+ +
+
public uint SizeOfStackCommit
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfStackReserve + +

+ +
+
+ +
+
public uint SizeOfStackReserve
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfUninitializedData + +

+ +
+
+ +
+
public uint SizeOfUninitializedData
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ Subsystem + +

+ +
+
+ +
+
public PESubsystem Subsystem
+
+ + + + +

Field Value

+
+
PESubsystem
+
+
+ + + + + + + + + + +

+ TLSTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory TLSTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ Win32VersionValue + +

+ +
+
+ +
+
public uint Win32VersionValue
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader64.html b/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader64.html new file mode 100644 index 000000000..b6a142f85 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader64.html @@ -0,0 +1,1520 @@ + + + + + Struct PEHeader.ImageOptionalHeader64 | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct PEHeader.ImageOptionalHeader64 +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +
+
+ +
+
public struct PEHeader.ImageOptionalHeader64
+
+ + + + + + + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Fields +

+ + + +

+ AddressOfEntryPoint + +

+ +
+
+ +
+
public uint AddressOfEntryPoint
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ Architecture + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory Architecture
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ BaseOfCode + +

+ +
+
+ +
+
public uint BaseOfCode
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ BaseRelocationTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory BaseRelocationTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ BoundImport + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory BoundImport
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ CLRRuntimeHeader + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory CLRRuntimeHeader
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ CertificateTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory CertificateTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ CheckSum + +

+ +
+
+ +
+
public uint CheckSum
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ Debug + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory Debug
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ DelayImportDescriptor + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory DelayImportDescriptor
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ DllCharacteristics + +

+ +
+
+ +
+
public ushort DllCharacteristics
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ ExceptionTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory ExceptionTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ ExportTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory ExportTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ FileAlignment + +

+ +
+
+ +
+
public uint FileAlignment
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ GlobalPtr + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory GlobalPtr
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ IAT + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory IAT
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ ImageBase + +

+ +
+
+ +
+
public ulong ImageBase
+
+ + + + +

Field Value

+
+
ulong
+
+
+ + + + + + + + + + +

+ ImportTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory ImportTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ LoadConfigTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory LoadConfigTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ LoaderFlags + +

+ +
+
+ +
+
public uint LoaderFlags
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ Magic + +

+ +
+
+ +
+
public ushort Magic
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MajorImageVersion + +

+ +
+
+ +
+
public ushort MajorImageVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MajorLinkerVersion + +

+ +
+
+ +
+
public byte MajorLinkerVersion
+
+ + + + +

Field Value

+
+
byte
+
+
+ + + + + + + + + + +

+ MajorOperatingSystemVersion + +

+ +
+
+ +
+
public ushort MajorOperatingSystemVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MajorSubsystemVersion + +

+ +
+
+ +
+
public ushort MajorSubsystemVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MinorImageVersion + +

+ +
+
+ +
+
public ushort MinorImageVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MinorLinkerVersion + +

+ +
+
+ +
+
public byte MinorLinkerVersion
+
+ + + + +

Field Value

+
+
byte
+
+
+ + + + + + + + + + +

+ MinorOperatingSystemVersion + +

+ +
+
+ +
+
public ushort MinorOperatingSystemVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ MinorSubsystemVersion + +

+ +
+
+ +
+
public ushort MinorSubsystemVersion
+
+ + + + +

Field Value

+
+
ushort
+
+
+ + + + + + + + + + +

+ NumberOfRvaAndSizes + +

+ +
+
+ +
+
public uint NumberOfRvaAndSizes
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ Reserved + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory Reserved
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ ResourceTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory ResourceTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ SectionAlignment + +

+ +
+
+ +
+
public uint SectionAlignment
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfCode + +

+ +
+
+ +
+
public uint SizeOfCode
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfHeaders + +

+ +
+
+ +
+
public uint SizeOfHeaders
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfHeapCommit + +

+ +
+
+ +
+
public ulong SizeOfHeapCommit
+
+ + + + +

Field Value

+
+
ulong
+
+
+ + + + + + + + + + +

+ SizeOfHeapReserve + +

+ +
+
+ +
+
public ulong SizeOfHeapReserve
+
+ + + + +

Field Value

+
+
ulong
+
+
+ + + + + + + + + + +

+ SizeOfImage + +

+ +
+
+ +
+
public uint SizeOfImage
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfInitializedData + +

+ +
+
+ +
+
public uint SizeOfInitializedData
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ SizeOfStackCommit + +

+ +
+
+ +
+
public ulong SizeOfStackCommit
+
+ + + + +

Field Value

+
+
ulong
+
+
+ + + + + + + + + + +

+ SizeOfStackReserve + +

+ +
+
+ +
+
public ulong SizeOfStackReserve
+
+ + + + +

Field Value

+
+
ulong
+
+
+ + + + + + + + + + +

+ SizeOfUninitializedData + +

+ +
+
+ +
+
public uint SizeOfUninitializedData
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +

+ Subsystem + +

+ +
+
+ +
+
public PESubsystem Subsystem
+
+ + + + +

Field Value

+
+
PESubsystem
+
+
+ + + + + + + + + + +

+ TLSTable + +

+ +
+
+ +
+
public PEHeader.ImageDataDirectory TLSTable
+
+ + + + +

Field Value

+
+
PEHeader.ImageDataDirectory
+
+
+ + + + + + + + + + +

+ Win32VersionValue + +

+ +
+
+ +
+
public uint Win32VersionValue
+
+ + + + +

Field Value

+
+
uint
+
+
+ + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PEHeader.html b/api/ZeroInstall.Publish.EntryPoints.PEHeader.html new file mode 100644 index 000000000..6f6c92ae8 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PEHeader.html @@ -0,0 +1,404 @@ + + + + + Class PEHeader | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PEHeader +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Extracts meta data from PE (Portable Executable) file headers.

+
+
+ +
+
public class PEHeader
+
+ + + + +
+
Inheritance
+
+ +
PEHeader
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ PEHeader(string) + +

+ +

Reads the PE header of a file.

+
+
+ +
+
public PEHeader(string path)
+
+ +

Parameters

+
+
path string
+

The file to read.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ DosHeader + +

+ +
+
+ +
+
public PEHeader.ImageDosHeader DosHeader { get; }
+
+ + + + + +

Property Value

+
+
PEHeader.ImageDosHeader
+
+
+ + + + + + + + + + +

+ FileHeader + +

+ +
+
+ +
+
public PEHeader.ImageFileHeader FileHeader { get; }
+
+ + + + + +

Property Value

+
+
PEHeader.ImageFileHeader
+
+
+ + + + + + + + + + +

+ Is32BitHeader + +

+ +
+
+ +
+
public bool Is32BitHeader { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ OptionalHeader32 + +

+ +
+
+ +
+
public PEHeader.ImageOptionalHeader32 OptionalHeader32 { get; }
+
+ + + + + +

Property Value

+
+
PEHeader.ImageOptionalHeader32
+
+
+ + + + + + + + + + +

+ OptionalHeader64 + +

+ +
+
+ +
+
public PEHeader.ImageOptionalHeader64 OptionalHeader64 { get; }
+
+ + + + + +

Property Value

+
+
PEHeader.ImageOptionalHeader64
+
+
+ + + + + + + + + + +

+ Subsystem + +

+ +
+
+ +
+
public PESubsystem Subsystem { get; }
+
+ + + + + +

Property Value

+
+
PESubsystem
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PEMachineType.html b/api/ZeroInstall.Publish.EntryPoints.PEMachineType.html new file mode 100644 index 000000000..241ad2ef2 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PEMachineType.html @@ -0,0 +1,156 @@ + + + + + Enum PEMachineType | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum PEMachineType +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

The machine type specified by a PE file (i.e., the CPU architecture the binary runs on).

+
+
+ +
+
public enum PEMachineType : ushort
+
+ + + + + + + + + +

Fields +

+
+
I386 = 332
+
+
Itanium = 512
+
+
Native = 0
+
+
X64 = 34404
+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PESubsystem.html b/api/ZeroInstall.Publish.EntryPoints.PESubsystem.html new file mode 100644 index 000000000..0ba1f89de --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PESubsystem.html @@ -0,0 +1,158 @@ + + + + + Enum PESubsystem | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum PESubsystem +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

The subsystem specified by a PE file (i.e., whether the binary is a console or GUI application).

+
+
+ +
+
public enum PESubsystem : ushort
+
+ + + + + + + + + +

Fields +

+
+
Native = 1
+
+
OS2Cui = 5
+
+
PosixCui = 7
+
+
WindowsCui = 3
+
+
WindowsGui = 2
+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PerlScript.html b/api/ZeroInstall.Publish.EntryPoints.PerlScript.html new file mode 100644 index 000000000..75578ec53 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PerlScript.html @@ -0,0 +1,246 @@ + + + + + Class PerlScript | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PerlScript +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A script written in Perl.

+
+
+ +
+
public sealed class PerlScript : InterpretedScript, IEquatable<Candidate>, IEquatable<InterpretedScript>
+
+ + + + +
+
Inheritance
+
+ + + +
PerlScript
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ InterpreterInterface + +

+ +

The interface URI of the interpreter to run the script.

+
+
+ +
+
protected override FeedUri InterpreterInterface { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PhpScript.html b/api/ZeroInstall.Publish.EntryPoints.PhpScript.html new file mode 100644 index 000000000..353f86309 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PhpScript.html @@ -0,0 +1,246 @@ + + + + + Class PhpScript | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PhpScript +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A script written in PHP.

+
+
+ +
+
public sealed class PhpScript : InterpretedScript, IEquatable<Candidate>, IEquatable<InterpretedScript>
+
+ + + + +
+
Inheritance
+
+ + + +
PhpScript
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ InterpreterInterface + +

+ +

The interface URI of the interpreter to run the script.

+
+
+ +
+
protected override FeedUri InterpreterInterface { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PosixBinary.html b/api/ZeroInstall.Publish.EntryPoints.PosixBinary.html new file mode 100644 index 000000000..2584db9c5 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PosixBinary.html @@ -0,0 +1,207 @@ + + + + + Class PosixBinary | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PosixBinary +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

An ELF (Executable and Linkable Format) binary for a POSIX-style operation system.

+
+
+ +
+
public sealed class PosixBinary : PosixExecutable, IEquatable<Candidate>
+
+ + + + +
+
Inheritance
+
+ + + + +
PosixBinary
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PosixExecutable.html b/api/ZeroInstall.Publish.EntryPoints.PosixExecutable.html new file mode 100644 index 000000000..e56fa3852 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PosixExecutable.html @@ -0,0 +1,232 @@ + + + + + Class PosixExecutable | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PosixExecutable +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Any file with the POSIX executable bit (xbit) set.

+
+
+ +
+
public abstract class PosixExecutable : NativeExecutable, IEquatable<Candidate>
+
+ + + + +
+
Inheritance
+
+ + + +
PosixExecutable
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PosixScript.html b/api/ZeroInstall.Publish.EntryPoints.PosixScript.html new file mode 100644 index 000000000..1f2ee9144 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PosixScript.html @@ -0,0 +1,207 @@ + + + + + Class PosixScript | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PosixScript +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A shebang (#!) script for execution on a POSIX-style operating system.

+
+
+ +
+
public sealed class PosixScript : PosixExecutable, IEquatable<Candidate>
+
+ + + + +
+
Inheritance
+
+ + + + +
PosixScript
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PowerShellScript.html b/api/ZeroInstall.Publish.EntryPoints.PowerShellScript.html new file mode 100644 index 000000000..97f64dc13 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PowerShellScript.html @@ -0,0 +1,466 @@ + + + + + Class PowerShellScript | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PowerShellScript +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A script written in PowerShell.

+
+
+ +
+
[Equatable]
+public sealed class PowerShellScript : InterpretedScript, IEquatable<Candidate>, IEquatable<InterpretedScript>, IEquatable<PowerShellScript>
+
+ + + + +
+
Inheritance
+
+ + + +
PowerShellScript
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ InterpreterInterface + +

+ +

The interface URI of the interpreter to run the script.

+
+
+ +
+
protected override FeedUri InterpreterInterface { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ PowerShellType + +

+ +

The types of PowerShell supported by the script.

+
+
+ +
+
public PowerShellType PowerShellType { get; set; }
+
+ + + + + +

Property Value

+
+
PowerShellType
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CreateCommand() + +

+ +

Creates a Command to launch this entry point.

+
+
+ +
+
public override Command CreateCommand()
+
+ + +

Returns

+
+
Command
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(PowerShellScript?, PowerShellScript?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(PowerShellScript? left, PowerShellScript? right)
+
+ +

Parameters

+
+
left PowerShellScript
+

The left object

+
+
right PowerShellScript
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(PowerShellScript?, PowerShellScript?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(PowerShellScript? left, PowerShellScript? right)
+
+ +

Parameters

+
+
left PowerShellScript
+

The left object

+
+
right PowerShellScript
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PowerShellType.html b/api/ZeroInstall.Publish.EntryPoints.PowerShellType.html new file mode 100644 index 000000000..a9d7512f9 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PowerShellType.html @@ -0,0 +1,153 @@ + + + + + Enum PowerShellType | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum PowerShellType +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +
+
+ +
+
public enum PowerShellType
+
+ + + + + + + + + +

Fields +

+
+
Any = 0
+
+
CoreOnly = 2
+
+
WindowsOnly = 1
+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.PythonScript.html b/api/ZeroInstall.Publish.EntryPoints.PythonScript.html new file mode 100644 index 000000000..485abc36f --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.PythonScript.html @@ -0,0 +1,311 @@ + + + + + Class PythonScript | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PythonScript +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A script written in Python.

+
+
+ +
+
public sealed class PythonScript : InterpretedScript, IEquatable<Candidate>, IEquatable<InterpretedScript>
+
+ + + + +
+
Inheritance
+
+ + + +
PythonScript
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ GuiOnly + +

+ +

Does this application have a graphical interface an no terminal output? Only enable if you are sure!

+
+
+ +
+
public bool GuiOnly { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ InterpreterInterface + +

+ +

The interface URI of the interpreter to run the script.

+
+
+ +
+
protected override FeedUri InterpreterInterface { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CreateCommand() + +

+ +

Creates a Command to launch this entry point.

+
+
+ +
+
public override Command CreateCommand()
+
+ + +

Returns

+
+
Command
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.RubyScript.html b/api/ZeroInstall.Publish.EntryPoints.RubyScript.html new file mode 100644 index 000000000..a62eaad92 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.RubyScript.html @@ -0,0 +1,246 @@ + + + + + Class RubyScript | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RubyScript +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A script written in Ruby.

+
+
+ +
+
public sealed class RubyScript : InterpretedScript, IEquatable<Candidate>, IEquatable<InterpretedScript>
+
+ + + + +
+
Inheritance
+
+ + + +
RubyScript
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ InterpreterInterface + +

+ +

The interface URI of the interpreter to run the script.

+
+
+ +
+
protected override FeedUri InterpreterInterface { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.WindowsBatch.html b/api/ZeroInstall.Publish.EntryPoints.WindowsBatch.html new file mode 100644 index 000000000..63ddc5042 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.WindowsBatch.html @@ -0,0 +1,206 @@ + + + + + Class WindowsBatch | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class WindowsBatch +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A Windows batch file/script.

+
+
+ +
+
public sealed class WindowsBatch : NativeExecutable, IEquatable<Candidate>
+
+ + + + +
+
Inheritance
+
+ + + +
WindowsBatch
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.WindowsExe.html b/api/ZeroInstall.Publish.EntryPoints.WindowsExe.html new file mode 100644 index 000000000..62d864b8c --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.WindowsExe.html @@ -0,0 +1,375 @@ + + + + + Class WindowsExe | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class WindowsExe +

+ +
+
Namespace
ZeroInstall.Publish.EntryPoints
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A native PE (Portable Executable) for Windows.

+
+
+ +
+
public class WindowsExe : NativeExecutable, IEquatable<Candidate>, IIconContainer
+
+ + + + +
+
Inheritance
+
+ + + +
WindowsExe
+
+
+ +
+
Implements
+
+ + +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ ExecutableExtension + +

+ +
+
+ +
+
protected virtual string ExecutableExtension { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ExtractIcon() + +

+ +

Extracts the primary icon of the executable.

+
+
+ +
+
public Icon ExtractIcon()
+
+ + +

Returns

+
+
Icon
+
+
+ + + + + + + + + + + + + +

+ GetCpu(PEMachineType) + +

+ +
+
+ +
+
protected static Cpu GetCpu(PEMachineType machine)
+
+ +

Parameters

+
+
machine PEMachineType
+
+
+ +

Returns

+
+
Cpu
+
+
+ + + + + + + + + + + + + +

+ Parse(PEHeader) + +

+ +
+
+ +
+
protected virtual bool Parse(PEHeader peHeader)
+
+ +

Parameters

+
+
peHeader PEHeader
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.EntryPoints.html b/api/ZeroInstall.Publish.EntryPoints.html new file mode 100644 index 000000000..ffbfe2225 --- /dev/null +++ b/api/ZeroInstall.Publish.EntryPoints.html @@ -0,0 +1,292 @@ + + + + + Namespace ZeroInstall.Publish.EntryPoints | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Publish.EntryPoints

+
+

Automatic detection of application entry points.

+

Helps publishers set up the appropriate Commands and Runners.

+
+
+
+ +

+Classes +

+
+
BashScript
+

A script written in Perl.

+
+
+
+
Candidate
+

Collects information about a potential candidate for an entry point. +The subclass type determines the type of executable (native binary, interpreted script, etc.).

+
+
+
+
DetectCandidates
+

Detects entry point Candidates in a file system directory.

+
+
+
+
DotNetDll
+
+
+
+
DotNetExe
+
+
+
+
DotNetFrameworkExe
+

A .NET/Mono executable.

+
+
+
+
InterpretedScript
+

A plain text script that is executed by a runtime interpreter.

+
+
+
+
Java
+

A compiled Java application.

+
+
+
+
JavaClass
+

A compiled Java class file.

+
+
+
+
JavaJar
+

A Java JAR archive.

+
+
+
+
MacOSApp
+

A binary inside a MacOS X application bundle.

+
+
+
+
NativeExecutable
+

A file that can be executed directly by the operating system without an additional runtime environment.

+
+
+
+
PEHeader
+

Extracts meta data from PE (Portable Executable) file headers.

+
+
+
+
PerlScript
+

A script written in Perl.

+
+
+
+
PhpScript
+

A script written in PHP.

+
+
+
+
PosixBinary
+

An ELF (Executable and Linkable Format) binary for a POSIX-style operation system.

+
+
+
+
PosixExecutable
+

Any file with the POSIX executable bit (xbit) set.

+
+
+
+
PosixScript
+

A shebang (#!) script for execution on a POSIX-style operating system.

+
+
+
+
PowerShellScript
+

A script written in PowerShell.

+
+
+
+
PythonScript
+

A script written in Python.

+
+
+
+
RubyScript
+

A script written in Ruby.

+
+
+
+
WindowsBatch
+

A Windows batch file/script.

+
+
+
+
WindowsExe
+

A native PE (Portable Executable) for Windows.

+
+
+

+Structs +

+
+
PEHeader.ImageDataDirectory
+
+
+
+
PEHeader.ImageDosHeader
+
+
+
+
PEHeader.ImageFileHeader
+
+
+
+
PEHeader.ImageOptionalHeader32
+
+
+
+
PEHeader.ImageOptionalHeader64
+
+
+

+Interfaces +

+
+
IIconContainer
+

An executable with embedded icons.

+
+
+

+Enums +

+
+
DotNetRuntimeType
+
+
+
+
PEMachineType
+

The machine type specified by a PE file (i.e., the CPU architecture the binary runs on).

+
+
+
+
PESubsystem
+

The subsystem specified by a PE file (i.e., whether the binary is a console or GUI application).

+
+
+
+
PowerShellType
+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.FeedBuilder.html b/api/ZeroInstall.Publish.FeedBuilder.html new file mode 100644 index 000000000..4574f904e --- /dev/null +++ b/api/ZeroInstall.Publish.FeedBuilder.html @@ -0,0 +1,807 @@ + + + + + Class FeedBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedBuilder +

+ +
+
Namespace
ZeroInstall.Publish
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Builds simple Feeds containing a single Implementation.

+
+
+ +
+
[MustDisposeResource]
+public class FeedBuilder : IDisposable
+
+ + + + +
+
Inheritance
+
+ +
FeedBuilder
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Candidates + +

+ +

Lists auto-detected candidates for EntryPoints.

+
+
+ +
+
public IEnumerable<Candidate> Candidates { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<Candidate>
+
+
+ + + + + + + + + + +

+ CapabilityList + +

+ +

Set to configure CapabilityLists.

+
+
+ +
+
public CapabilityList? CapabilityList { get; set; }
+
+ + + + + +

Property Value

+
+
CapabilityList
+
+
+ + + + + + + + + + +

+ Commands + +

+ +

Lists the Command derived from Candidates and MainCandidate.

+
+
+ +
+
public List<Command> Commands { get; }
+
+ + + + + +

Property Value

+
+
List<Command>
+
+
+ + + + + + + + + + +

+ EntryPoints + +

+ +

Lists the EntryPoints accompanying Commands.

+
+
+ +
+
public List<EntryPoint> EntryPoints { get; }
+
+ + + + + +

Property Value

+
+
List<EntryPoint>
+
+
+ + + + + + + + + + +

+ ID + +

+ +

The value used for ID.

+
+
+ +
+
public string? ID { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Icons + +

+ +

Set to configure Icons.

+
+
+ +
+
public ICollection<Icon> Icons { get; }
+
+ + + + + +

Property Value

+
+
ICollection<Icon>
+
+
+ + + + + + + + + + +

+ ImplementationDirectory + +

+ +

Set the directory to search for Candidates and to generate the ManifestDigest from. +Is usually a subdirectory of or equal to TemporaryDirectory.

+
+
+ +
+
public string? ImplementationDirectory { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ MainCandidate + +

+ +

Set the main entry point. Provides meta-data and startup instructions for the application. +Should be one of the auto-detected Candidates.

+
+
+ +
+
public Candidate? MainCandidate { get; set; }
+
+ + + + + +

Property Value

+
+
Candidate
+
+
+ + + + + + + + + + +

+ ManifestDigest + +

+ +

The value used for ManifestDigest.

+
+
+ +
+
public ManifestDigest ManifestDigest { get; }
+
+ + + + + +

Property Value

+
+
ManifestDigest
+
+
+ + + + + + + + + + +

+ RetrievalMethod + +

+ +

Set to configure RetrievalMethods.

+
+
+ +
+
public RetrievalMethod? RetrievalMethod { get; set; }
+
+ + + + + +

Property Value

+
+
RetrievalMethod
+
+
+ + + + + + + + + + +

+ SecretKey + +

+ +

Set to configure SecretKey.

+
+
+ +
+
public OpenPgpSecretKey? SecretKey { get; set; }
+
+ + + + + +

Property Value

+
+
OpenPgpSecretKey
+
+
+ + + + + + + + + + +

+ TemporaryDirectory + +

+ +

A temporary directory to prepare files for ImplementationDirectory. Not used by the FeedBuilder itself.

+
+
+ +
+
public TemporaryDirectory? TemporaryDirectory { get; set; }
+
+ + + + + +

Property Value

+
+
TemporaryDirectory
+
+
+ + + + +

Remarks

+

Setting a new value will automatically Dispose() the previous one.

+
+ + + + + + +

+ Uri + +

+ +

Set to configure Uri.

+
+
+ +
+
public FeedUri? Uri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Build() + +

+ +

Generates a feed as described by the properties.

+
+
+ +
+
public SignedFeed Build()
+
+ + +

Returns

+
+
SignedFeed
+
+
+ + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

Required values have not been generated or set yet.

+
+
+ + + + + +

+ DetectCandidates(ITaskHandler) + +

+ + +
+ +
+
public void DetectCandidates(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

ImplementationDirectory is null or empty.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

There was a problem generating the manifest or detecting the executables.

+
+
UnauthorizedAccessException
+

Write access to temporary files was not permitted.

+
+
+ + + + + +

+ Dispose() + +

+ +

Deletes the TemporaryDirectory.

+
+
+ +
+
public void Dispose()
+
+ + + + + + + + + + + + + + + +

+ GenerateCommands() + +

+ +

Generates Commands and EntryPoints bases on Candidates and MainCandidate.

+
+
+ +
+
public void GenerateCommands()
+
+ + + + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

MainCandidate is null.

+
+
+ + + + + +

+ GenerateDigest(ITaskHandler) + +

+ +

Generates the ID and ManifestDigest.

+
+
+ +
+
public void GenerateDigest(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidOperationException
+

ImplementationDirectory is null or empty.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

There was a problem generating the manifest.

+
+
UnauthorizedAccessException
+

Write access to temporary files was not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.FeedEditing.html b/api/ZeroInstall.Publish.FeedEditing.html new file mode 100644 index 000000000..a2bab6c22 --- /dev/null +++ b/api/ZeroInstall.Publish.FeedEditing.html @@ -0,0 +1,527 @@ + + + + + Class FeedEditing | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedEditing +

+ +
+
Namespace
ZeroInstall.Publish
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Represents a Feed being edited using IUndoCommands.

+
+
+ +
+
public class FeedEditing : CommandManager<Feed>, ICommandManager<Feed>, ICommandExecutor
+
+ + + + +
+
Inheritance
+
+ + +
FeedEditing
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ FeedEditing() + +

+ +

Starts with an empty feed.

+
+
+ +
+
public FeedEditing()
+
+ + + + + + + + + + + + + + + +

+ FeedEditing(SignedFeed) + +

+ +

Starts with an existing feed.

+
+
+ +
+
public FeedEditing(SignedFeed signedFeed)
+
+ +

Parameters

+
+
signedFeed SignedFeed
+

The feed to be edited.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Passphrase + +

+ +

The passphrase to use to unlock SecretKey (if specified).

+
+
+ +
+
public string? Passphrase { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SignedFeed + +

+ +

The (optionally signed) feed being edited.

+
+
+ +
+
public SignedFeed SignedFeed { get; }
+
+ + + + + +

Property Value

+
+
SignedFeed
+
+
+ + + + + + + + + + +

+ UnsavedChanges + +

+ +

Indicates whether there are changes to the feed that have not yet been saved to a file.

+
+
+ +
+
public bool UnsavedChanges { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ IsValid(out string) + +

+ +

Determines whether the feed is valid and ready for use by 0install.

+
+
+ +
+
public bool IsValid(out string problem)
+
+ +

Parameters

+
+
problem string
+

Returns human-readable description of the problem if the method result is false.

+
+
+ +

Returns

+
+
bool
+

true if the feed is valid; false otherwise.

+
+
+ + + + + + + + + + + + + +

+ Load(string) + +

+ +

Loads a feed from an XML file (feed).

+
+
+ +
+
public static FeedEditing Load(string path)
+
+ +

Parameters

+
+
path string
+

The file to load from.

+
+
+ +

Returns

+
+
FeedEditing
+

A FeedEditing containing the loaded feed.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ Save(string) + +

+ +

Saves feed to an XML file, adds the default stylesheet and signs it with SecretKey (if specified).

+
+
+ +
+
public override void Save(string path)
+
+ +

Parameters

+
+
path string
+

The file to save to.

+
+
+ + + + + + + + +

Remarks

+

Writing and signing the feed file are performed as an atomic operation (i.e. if signing fails an existing file remains unchanged).

+
+ +

Exceptions

+
+
IOException
+

A problem occurred while writing the file.

+
+
UnauthorizedAccessException
+

Write access to the file is not permitted.

+
+
KeyNotFoundException
+

The specified SecretKey could not be found on the system.

+
+
WrongPassphraseException
+

Passphrase was incorrect.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.FeedUtils.html b/api/ZeroInstall.Publish.FeedUtils.html new file mode 100644 index 000000000..740c0657f --- /dev/null +++ b/api/ZeroInstall.Publish.FeedUtils.html @@ -0,0 +1,342 @@ + + + + + Class FeedUtils | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedUtils +

+ +
+
Namespace
ZeroInstall.Publish
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Helper methods for manipulating Feeds.

+
+
+ +
+
public static class FeedUtils
+
+ + + + +
+
Inheritance
+
+ +
FeedUtils
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ DeployStylesheet(string, string) + +

+ +

Writes an XSL stylesheet with its accompanying CSS file unless there is already an XSL in place.

+
+
+ +
+
public static void DeployStylesheet(string path, string name)
+
+ +

Parameters

+
+
path string
+

The directory to write the stylesheet files to.

+
+
name string
+

The name of the stylesheet to deploy. Must be "feed" or "catalog".

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

Failed to write the stylesheet files.

+
+
UnauthorizedAccessException
+

Write access to the directory is not permitted.

+
+
+ + + + + +

+ GetKey(string, IOpenPgp) + +

+ +

Determines the key used to sign a feed or catalog file. Only uses the first signature if more than one is present.

+
+
+ +
+
public static OpenPgpSecretKey? GetKey(string path, IOpenPgp openPgp)
+
+ +

Parameters

+
+
path string
+

The feed or catalog file to check for signatures.

+
+
openPgp IOpenPgp
+

The OpenPGP-compatible system used to validate the signatures.

+
+
+ +

Returns

+
+
OpenPgpSecretKey
+

The key used to sign the file; null if the file was not signed.

+
+
+ + + + + + + + +

Exceptions

+
+
FileNotFoundException
+

The file file could not be found.

+
+
IOException
+

The file could not be read.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
+ + + + + +

+ SignFeed(Stream, OpenPgpSecretKey, string?, IOpenPgp) + +

+ +

Adds a Base64 signature to a feed or catalog stream.

+
+
+ +
+
public static void SignFeed(Stream stream, OpenPgpSecretKey secretKey, string? passphrase, IOpenPgp openPgp)
+
+ +

Parameters

+
+
stream Stream
+

The feed or catalog to sign.

+
+
secretKey OpenPgpSecretKey
+

The secret key to use for signing the file.

+
+
passphrase string
+

The passphrase to use to unlock the key.

+
+
openPgp IOpenPgp
+

The OpenPGP-compatible system used to create signatures.

+
+
+ + + + + + + + +

Remarks

+

The file is not parsed before signing; invalid XML files are signed as well. +The existing file must end with a line break. +Old signatures are not removed.

+
+ +

Exceptions

+
+
IOException
+

The file could not be read or written.

+
+
UnauthorizedAccessException
+

Read or write access to the file is not permitted.

+
+
KeyNotFoundException
+

The specified secretKey could not be found on the system.

+
+
WrongPassphraseException
+

passphrase was incorrect.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.ImplementationExtensions.html b/api/ZeroInstall.Publish.ImplementationExtensions.html new file mode 100644 index 000000000..6ed85a391 --- /dev/null +++ b/api/ZeroInstall.Publish.ImplementationExtensions.html @@ -0,0 +1,232 @@ + + + + + Class ImplementationExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationExtensions +

+ +
+
Namespace
ZeroInstall.Publish
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Helpers for setting missing properties on Implementations.

+
+
+ +
+
public static class ImplementationExtensions
+
+ + + + +
+
Inheritance
+
+ +
ImplementationExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ SetMissing(Implementation, ICommandExecutor, ITaskHandler) + +

+ +

Sets missing properties on the implementation by downloading and inferring.

+
+
+ +
+
public static void SetMissing(this Implementation implementation, ICommandExecutor executor, ITaskHandler handler)
+
+ +

Parameters

+
+
implementation Implementation
+

The implementation.

+
+
executor ICommandExecutor
+

Used to modify properties in an undoable fashion.

+
+
handler ITaskHandler
+

A callback object used when the user is to be informed about progress.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
DigestMismatchException
+

An existing digest does not match the newly calculated one.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.RetrievalMethodExtensions.html b/api/ZeroInstall.Publish.RetrievalMethodExtensions.html new file mode 100644 index 000000000..be3958ef6 --- /dev/null +++ b/api/ZeroInstall.Publish.RetrievalMethodExtensions.html @@ -0,0 +1,338 @@ + + + + + Class RetrievalMethodExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RetrievalMethodExtensions +

+ +
+
Namespace
ZeroInstall.Publish
+
Assembly
ZeroInstall.Publish.dll
+
+ +

Helpers for setting missing properties on RetrievalMethods.

+
+
+ +
+
public static class RetrievalMethodExtensions
+
+ + + + +
+
Inheritance
+
+ +
RetrievalMethodExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ CalculateDigest(RetrievalMethod, ICommandExecutor, ITaskHandler, ManifestFormat?) + +

+ +

Calculates a ManifestDigest for a retrieval method. Sets missing properties in the process.

+
+
+ +
+
public static ManifestDigest CalculateDigest(this RetrievalMethod retrievalMethod, ICommandExecutor executor, ITaskHandler handler, ManifestFormat? format = null)
+
+ +

Parameters

+
+
retrievalMethod RetrievalMethod
+

The retrieval method.

+
+
executor ICommandExecutor
+

Used to modify properties in an undoable fashion.

+
+
handler ITaskHandler
+

A callback object used when the user is to be informed about progress.

+
+
format ManifestFormat
+

The manifest format. Leave null for default.

+
+
+ +

Returns

+
+
ManifestDigest
+

The generated digest.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
+ + + + + +

+ SetMissing(DownloadRetrievalMethod, ICommandExecutor, string?) + +

+ +

Sets missing properties on the retrieval method if they can be inferred.

+
+
+ +
+
public static void SetMissing(this DownloadRetrievalMethod retrievalMethod, ICommandExecutor executor, string? localPath = null)
+
+ +

Parameters

+
+
retrievalMethod DownloadRetrievalMethod
+

The retrieval method.

+
+
executor ICommandExecutor
+

Used to modify properties in an undoable fashion.

+
+
localPath string
+

An optional local file path where the retrievalMethod has already been downloaded.

+
+
+ + + + + + + + + + + + + + +

+ ToTempDir(DownloadRetrievalMethod, ITaskHandler, string?) + +

+ +

Creates a temporary directory from a retrieval method. Sets missing properties in the process.

+
+
+ +
+
[MustDisposeResource]
+public static TemporaryDirectory ToTempDir(this DownloadRetrievalMethod retrievalMethod, ITaskHandler handler, string? localPath = null)
+
+ +

Parameters

+
+
retrievalMethod DownloadRetrievalMethod
+

The retrieval method.

+
+
handler ITaskHandler
+

A callback object used when the user is to be informed about progress.

+
+
localPath string
+

An optional local file path where the retrievalMethod has already been downloaded. Leave null to download automatically.

+
+
+ +

Returns

+
+
TemporaryDirectory
+

A temporary directory built using the retrieval method.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
IOException
+

There is a problem writing a temporary file.

+
+
UnauthorizedAccessException
+

Write access to a temporary file is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.SignedCatalog.html b/api/ZeroInstall.Publish.SignedCatalog.html new file mode 100644 index 000000000..6d6e040e2 --- /dev/null +++ b/api/ZeroInstall.Publish.SignedCatalog.html @@ -0,0 +1,398 @@ + + + + + Class SignedCatalog | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SignedCatalog +

+ +
+
Namespace
ZeroInstall.Publish
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A wrapper around a Catalog adding and XSL stylesheet and a digital signature.

+
+
+ +
+
[Serializable]
+public class SignedCatalog
+
+ + + + +
+
Inheritance
+
+ +
SignedCatalog
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ SignedCatalog(Catalog, OpenPgpSecretKey?, IOpenPgp?) + +

+ +

Creates a new signed catalog.

+
+
+ +
+
public SignedCatalog(Catalog catalog, OpenPgpSecretKey? secretKey, IOpenPgp? openPgp = null)
+
+ +

Parameters

+
+
catalog Catalog
+

The wrapped Catalog.

+
+
secretKey OpenPgpSecretKey
+

The secret key used to sign the Catalog; null for no signature.

+
+
openPgp IOpenPgp
+

The OpenPGP-compatible system used to create the signatures; null for default.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Catalog + +

+ +

The wrapped Catalog.

+
+
+ +
+
public Catalog Catalog { get; }
+
+ + + + + +

Property Value

+
+
Catalog
+
+
+ + + + + + + + + + +

+ SecretKey + +

+ +

The secret key used to sign the Catalog; null for no signature.

+
+
+ +
+
public OpenPgpSecretKey? SecretKey { get; set; }
+
+ + + + + +

Property Value

+
+
OpenPgpSecretKey
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Load(string) + +

+ +

Loads a Catalog from an XML file and identifies the signature (if any).

+
+
+ +
+
public static SignedCatalog Load(string path)
+
+ +

Parameters

+
+
path string
+

The file to load from.

+
+
+ +

Returns

+
+
SignedCatalog
+

The loaded SignedCatalog.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ Save(string, string?) + +

+ +

Saves Catalog to an XML file, adds the default stylesheet and sign it it with SecretKey (if specified).

+
+
+ +
+
public void Save(string path, string? passphrase = null)
+
+ +

Parameters

+
+
path string
+

The file to save in.

+
+
passphrase string
+

The passphrase to use to unlock the secret key; can be null if SecretKey is null.

+
+
+ + + + + + + + +

Remarks

+

Writing and signing the catalog file are performed as an atomic operation (i.e. if signing fails an existing file remains unchanged).

+
+ +

Exceptions

+
+
IOException
+

A problem occurred while writing the file.

+
+
UnauthorizedAccessException
+

Write access to the file is not permitted.

+
+
KeyNotFoundException
+

The specified SecretKey could not be found on the system.

+
+
WrongPassphraseException
+

passphrase was incorrect.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.SignedFeed.html b/api/ZeroInstall.Publish.SignedFeed.html new file mode 100644 index 000000000..ed9fad6a5 --- /dev/null +++ b/api/ZeroInstall.Publish.SignedFeed.html @@ -0,0 +1,398 @@ + + + + + Class SignedFeed | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SignedFeed +

+ +
+
Namespace
ZeroInstall.Publish
+
Assembly
ZeroInstall.Publish.dll
+
+ +

A wrapper around a Feed adding and XSL stylesheet and a digital signature.

+
+
+ +
+
[Serializable]
+public class SignedFeed
+
+ + + + +
+
Inheritance
+
+ +
SignedFeed
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ SignedFeed(Feed, OpenPgpSecretKey?, IOpenPgp?) + +

+ +

Creates a new signed feed.

+
+
+ +
+
public SignedFeed(Feed feed, OpenPgpSecretKey? secretKey = null, IOpenPgp? openPgp = null)
+
+ +

Parameters

+
+
feed Feed
+

The wrapped Feed.

+
+
secretKey OpenPgpSecretKey
+

The secret key used to sign the Feed; null for no signature.

+
+
openPgp IOpenPgp
+

The OpenPGP-compatible system used to create the signatures; null for default.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Feed + +

+ +

The wrapped Feed.

+
+
+ +
+
public Feed Feed { get; }
+
+ + + + + +

Property Value

+
+
Feed
+
+
+ + + + + + + + + + +

+ SecretKey + +

+ +

The secret key used to sign the Feed; null for no signature.

+
+
+ +
+
public OpenPgpSecretKey? SecretKey { get; set; }
+
+ + + + + +

Property Value

+
+
OpenPgpSecretKey
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Load(string) + +

+ +

Loads a Feed from an XML file and identifies the signature (if any).

+
+
+ +
+
public static SignedFeed Load(string path)
+
+ +

Parameters

+
+
path string
+

The file to load from.

+
+
+ +

Returns

+
+
SignedFeed
+

The loaded SignedFeed.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ Save(string, string?) + +

+ +

Saves Feed to an XML file, adds the default stylesheet and sign it it with SecretKey (if specified).

+
+
+ +
+
public void Save(string path, string? passphrase = null)
+
+ +

Parameters

+
+
path string
+

The file to save in.

+
+
passphrase string
+

The passphrase to use to unlock the secret key; can be null if SecretKey is null.

+
+
+ + + + + + + + +

Remarks

+

Writing and signing the feed file are performed as an atomic operation (i.e. if signing fails an existing file remains unchanged).

+
+ +

Exceptions

+
+
IOException
+

A problem occurred while writing the file.

+
+
UnauthorizedAccessException
+

Write access to the file is not permitted.

+
+
KeyNotFoundException
+

The specified SecretKey could not be found on the system.

+
+
WrongPassphraseException
+

passphrase was incorrect.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Publish.html b/api/ZeroInstall.Publish.html new file mode 100644 index 000000000..6d1edfb49 --- /dev/null +++ b/api/ZeroInstall.Publish.html @@ -0,0 +1,182 @@ + + + + + Namespace ZeroInstall.Publish | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Publish

+
+

Utilities for creating and modifying feed files.

+

NuGet package: ZeroInstall.Publish

+
+
+
+ +

+Namespaces +

+
+
ZeroInstall.Publish.Capture
+
+

Builds feeds by creating and comparing snapshots of the system before and after an application was installed.

+
+
+
+
ZeroInstall.Publish.EntryPoints
+
+

Automatic detection of application entry points.

+

Helps publishers set up the appropriate Commands and Runners.

+
+
+

+Classes +

+
+
BuilderExtensions
+

Helpers for adding RetrievalMethods to IBuilders and setting missing properties.

+
+
+
+
FeedBuilder
+

Builds simple Feeds containing a single Implementation.

+
+
+
+
FeedEditing
+

Represents a Feed being edited using IUndoCommands.

+
+
+
+
FeedUtils
+

Helper methods for manipulating Feeds.

+
+
+
+
ImplementationExtensions
+

Helpers for setting missing properties on Implementations.

+
+
+
+
RetrievalMethodExtensions
+

Helpers for setting missing properties on RetrievalMethods.

+
+
+
+
SignedCatalog
+

A wrapper around a Catalog adding and XSL stylesheet and a digital signature.

+
+
+
+
SignedFeed
+

A wrapper around a Feed adding and XSL stylesheet and a digital signature.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Executors.EnvironmentBuilder.html b/api/ZeroInstall.Services.Executors.EnvironmentBuilder.html new file mode 100644 index 000000000..88e9a71e2 --- /dev/null +++ b/api/ZeroInstall.Services.Executors.EnvironmentBuilder.html @@ -0,0 +1,498 @@ + + + + + Class EnvironmentBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class EnvironmentBuilder +

+ +
+
Namespace
ZeroInstall.Services.Executors
+
Assembly
ZeroInstall.Services.dll
+
+ +

Fluent-style builder for a process execution environment for a Selections document.

+
+
+ +
+
public class EnvironmentBuilder : IEnvironmentBuilder
+
+ + + + +
+
Inheritance
+
+ +
EnvironmentBuilder
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ EnvironmentBuilder(IImplementationStore) + +

+ +

Fluent-style builder for a process execution environment for a Selections document.

+
+
+ +
+
public EnvironmentBuilder(IImplementationStore implementationStore)
+
+ +

Parameters

+
+
implementationStore IImplementationStore
+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ AddArguments(params string[]) + +

+ +

Appends user specified arguments to the command-line.

+
+
+ +
+
public IEnvironmentBuilder AddArguments(params string[] arguments)
+
+ +

Parameters

+
+
arguments string[]
+
+
+ +

Returns

+
+
IEnvironmentBuilder
+

The execution environment. Reference to self for fluent API use.

+
+
+ + + + + + + + + + + + + +

+ AddWrapper(string?) + +

+ +

Instead of executing the selected program directly, pass it as an argument to this program. Useful for debuggers. May contain command-line arguments. Whitespaces must be escaped!

+
+
+ +
+
public IEnvironmentBuilder AddWrapper(string? wrapper)
+
+ +

Parameters

+
+
wrapper string
+
+
+ +

Returns

+
+
IEnvironmentBuilder
+

The execution environment. Reference to self for fluent API use.

+
+
+ + + + + + + + + + + + + +

+ Inject(Selections, string?) + +

+ +

Sets the Selections to be injected. +Must be called before any methods of the IEnvironmentBuilder interface are used. May not be called more than once.

+
+
+ +
+
public IEnvironmentBuilder Inject(Selections selections, string? overrideMain = null)
+
+ +

Parameters

+
+
selections Selections
+

The set of Implementations be injected into the execution environment.

+
+
overrideMain string
+

An alternative executable to to run from the main Implementation instead of Main. May not contain command-line arguments! Whitespaces do not need to be escaped.

+
+
+ +

Returns

+
+
IEnvironmentBuilder
+

The execution environment. Reference to self for fluent API use.

+
+
+ + + + + + + + +

Exceptions

+
+
ImplementationNotFoundException
+

One of the Implementations is not cached yet.

+
+
ExecutorException
+

The executor was unable to process the Selections.

+
+
IOException
+

A problem occurred while writing a file.

+
+
UnauthorizedAccessException
+

Write access to a file is not permitted.

+
+
+ + + + + +

+ SetEnvironmentVariable(string, string?) + +

+ +

Sets an environment variable in the execution environment.

+
+
+ +
+
public IEnvironmentBuilder SetEnvironmentVariable(string name, string? value)
+
+ +

Parameters

+
+
name string
+

The name of the environment variable.

+
+
value string
+

The value to set the environment variable to.

+
+
+ +

Returns

+
+
IEnvironmentBuilder
+

The execution environment. Reference to self for fluent API use.

+
+
+ + + + + + + + + + + + + +

+ Start() + +

+ +

Starts the program.

+
+
+ +
+
public Process Start()
+
+ + +

Returns

+
+
Process
+

The newly created Process.

+
+
+ + + + + + + + +

Exceptions

+
+
ImplementationNotFoundException
+

One of the Implementations is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections or the main executable could not be launched.

+
+
FileNotFoundException
+

Failed to find the main executable.

+
+
IOException
+

Failed to start the program.

+
+
UnauthorizedAccessException
+

Write access to a file is not permitted.

+
+
+ + + + + +

+ ToStartInfo() + +

+ +

Builds a ProcessStartInfo for starting the program.

+
+
+ +
+
public ProcessStartInfo ToStartInfo()
+
+ + +

Returns

+
+
ProcessStartInfo
+

The ProcessStartInfo that can be used to start the new Process.

+
+
+ + + + + + + + +

Exceptions

+
+
ImplementationNotFoundException
+

One of the Implementations is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
IOException
+

A problem occurred while writing a file.

+
+
UnauthorizedAccessException
+

Write access to a file is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Executors.Executor.html b/api/ZeroInstall.Services.Executors.Executor.html new file mode 100644 index 000000000..f0a9b2af6 --- /dev/null +++ b/api/ZeroInstall.Services.Executors.Executor.html @@ -0,0 +1,343 @@ + + + + + Class Executor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Executor +

+ +
+
Namespace
ZeroInstall.Services.Executors
+
Assembly
ZeroInstall.Services.dll
+
+ +

Executes a Selections document as a program using dependency injection.

+
+
+ +
+
public class Executor : IExecutor
+
+ + + + +
+
Inheritance
+
+ +
Executor
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ Executor(IImplementationStore) + +

+ +

Executes a Selections document as a program using dependency injection.

+
+
+ +
+
public Executor(IImplementationStore implementationStore)
+
+ +

Parameters

+
+
implementationStore IImplementationStore
+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Inject(Selections, string?) + +

+ +

Starts building an execution environment for a Selections document.

+
+
+ +
+
public IEnvironmentBuilder Inject(Selections selections, string? overrideMain = null)
+
+ +

Parameters

+
+
selections Selections
+

The set of Implementations be injected into the execution environment.

+
+
overrideMain string
+

An alternative executable to to run from the main Implementation instead of Main. May not contain command-line arguments! Whitespaces do not need to be escaped.

+
+
+ +

Returns

+
+
IEnvironmentBuilder
+

A fluent-style builder for a process execution environment.

+
+
+ + + + + + + + +

Exceptions

+
+
ImplementationNotFoundException
+

One of the Implementations is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
IOException
+

A problem occurred while writing a file.

+
+
UnauthorizedAccessException
+

Write access to a file is not permitted.

+
+
+ + + + + +

+ Start(Selections) + +

+ +

Starts a program as described by a Selections document.

+
+
+ +
+
public Process? Start(Selections selections)
+
+ +

Parameters

+
+
selections Selections
+

The set of Implementations be injected into the execution environment.

+
+
+ +

Returns

+
+
Process
+

The newly created Process; null if no external process was started.

+
+
+ + + + + + + + +

Exceptions

+
+
ImplementationNotFoundException
+

One of the Implementations is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections or the main executable could not be launched.

+
+
FileNotFoundException
+

Failed to find the main executable.

+
+
IOException
+

Failed to start the program.

+
+
UnauthorizedAccessException
+

Write access to a file is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Executors.ExecutorException.html b/api/ZeroInstall.Services.Executors.ExecutorException.html new file mode 100644 index 000000000..7a77d0858 --- /dev/null +++ b/api/ZeroInstall.Services.Executors.ExecutorException.html @@ -0,0 +1,305 @@ + + + + + Class ExecutorException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ExecutorException +

+ +
+
Namespace
ZeroInstall.Services.Executors
+
Assembly
ZeroInstall.Services.dll
+
+ +

Indicates that the IExecutor was unable to launch the desired application.

+
+
+ +
+
public sealed class ExecutorException : Exception, ISerializable
+
+ + + + +
+
Inheritance
+
+ + +
ExecutorException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ExecutorException() + +

+ +

Creates a new missing main exception.

+
+
+ +
+
public ExecutorException()
+
+ + + + + + + + + + + + + + + +

+ ExecutorException(string) + +

+ +

Creates a new missing main exception.

+
+
+ +
+
public ExecutorException(string message)
+
+ +

Parameters

+
+
message string
+
+
+ + + + + + + + + + + + + + +

+ ExecutorException(string, Exception) + +

+ +

Creates a new missing main exception.

+
+
+ +
+
public ExecutorException(string message, Exception innerException)
+
+ +

Parameters

+
+
message string
+
+
innerException Exception
+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Executors.IEnvironmentBuilder.html b/api/ZeroInstall.Services.Executors.IEnvironmentBuilder.html new file mode 100644 index 000000000..56c8ab3bc --- /dev/null +++ b/api/ZeroInstall.Services.Executors.IEnvironmentBuilder.html @@ -0,0 +1,366 @@ + + + + + Interface IEnvironmentBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IEnvironmentBuilder +

+ +
+
Namespace
ZeroInstall.Services.Executors
+
Assembly
ZeroInstall.Services.dll
+
+ +

Fluent-style builder for a process execution environment.

+
+
+ +
+
public interface IEnvironmentBuilder
+
+ + + + + + + + + + + + + +

Methods +

+ + + + +

+ AddArguments(params string[]) + +

+ +

Appends user specified arguments to the command-line.

+
+
+ +
+
IEnvironmentBuilder AddArguments(params string[] arguments)
+
+ +

Parameters

+
+
arguments string[]
+
+
+ +

Returns

+
+
IEnvironmentBuilder
+

The execution environment. Reference to self for fluent API use.

+
+
+ + + + + + + + + + + + + +

+ AddWrapper(string?) + +

+ +

Instead of executing the selected program directly, pass it as an argument to this program. Useful for debuggers. May contain command-line arguments. Whitespaces must be escaped!

+
+
+ +
+
IEnvironmentBuilder AddWrapper(string? wrapper)
+
+ +

Parameters

+
+
wrapper string
+
+
+ +

Returns

+
+
IEnvironmentBuilder
+

The execution environment. Reference to self for fluent API use.

+
+
+ + + + + + + + + + + + + +

+ SetEnvironmentVariable(string, string) + +

+ +

Sets an environment variable in the execution environment.

+
+
+ +
+
IEnvironmentBuilder SetEnvironmentVariable(string name, string value)
+
+ +

Parameters

+
+
name string
+

The name of the environment variable.

+
+
value string
+

The value to set the environment variable to.

+
+
+ +

Returns

+
+
IEnvironmentBuilder
+

The execution environment. Reference to self for fluent API use.

+
+
+ + + + + + + + + + + + + +

+ Start() + +

+ +

Starts the program.

+
+
+ +
+
Process? Start()
+
+ + +

Returns

+
+
Process
+

The newly created Process.

+
+
+ + + + + + + + +

Exceptions

+
+
ImplementationNotFoundException
+

One of the Implementations is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections or the main executable could not be launched.

+
+
FileNotFoundException
+

Failed to find the main executable.

+
+
IOException
+

Failed to start the program.

+
+
UnauthorizedAccessException
+

Write access to a file is not permitted.

+
+
+ + + + + +

+ ToStartInfo() + +

+ +

Builds a ProcessStartInfo for starting the program.

+
+
+ +
+
ProcessStartInfo ToStartInfo()
+
+ + +

Returns

+
+
ProcessStartInfo
+

The ProcessStartInfo that can be used to start the new Process.

+
+
+ + + + + + + + +

Exceptions

+
+
ImplementationNotFoundException
+

One of the Implementations is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
IOException
+

A problem occurred while writing a file.

+
+
UnauthorizedAccessException
+

Write access to a file is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Executors.IExecutor.html b/api/ZeroInstall.Services.Executors.IExecutor.html new file mode 100644 index 000000000..b0bed434a --- /dev/null +++ b/api/ZeroInstall.Services.Executors.IExecutor.html @@ -0,0 +1,266 @@ + + + + + Interface IExecutor | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IExecutor +

+ +
+
Namespace
ZeroInstall.Services.Executors
+
Assembly
ZeroInstall.Services.dll
+
+ +

Executes a Selections document as a program using dependency injection.

+
+
+ +
+
public interface IExecutor
+
+ + + + + + + + + + + +

Remarks

+

Implementations of this interface are immutable and thread-safe.

+
+ + +

Methods +

+ + + + +

+ Inject(Selections, string?) + +

+ +

Starts building an execution environment for a Selections document.

+
+
+ +
+
IEnvironmentBuilder Inject(Selections selections, string? overrideMain = null)
+
+ +

Parameters

+
+
selections Selections
+

The set of Implementations be injected into the execution environment.

+
+
overrideMain string
+

An alternative executable to to run from the main Implementation instead of Main. May not contain command-line arguments! Whitespaces do not need to be escaped.

+
+
+ +

Returns

+
+
IEnvironmentBuilder
+

A fluent-style builder for a process execution environment.

+
+
+ + + + + + + + +

Exceptions

+
+
ImplementationNotFoundException
+

One of the Implementations is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections.

+
+
IOException
+

A problem occurred while writing a file.

+
+
UnauthorizedAccessException
+

Write access to a file is not permitted.

+
+
+ + + + + +

+ Start(Selections) + +

+ +

Starts a program as described by a Selections document.

+
+
+ +
+
Process? Start(Selections selections)
+
+ +

Parameters

+
+
selections Selections
+

The set of Implementations be injected into the execution environment.

+
+
+ +

Returns

+
+
Process
+

The newly created Process; null if no external process was started.

+
+
+ + + + + + + + +

Exceptions

+
+
ImplementationNotFoundException
+

One of the Implementations is not cached yet.

+
+
ExecutorException
+

The IExecutor was unable to process the Selections or the main executable could not be launched.

+
+
FileNotFoundException
+

Failed to find the main executable.

+
+
IOException
+

Failed to start the program.

+
+
UnauthorizedAccessException
+

Write access to a file is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Executors.html b/api/ZeroInstall.Services.Executors.html new file mode 100644 index 000000000..703c2982b --- /dev/null +++ b/api/ZeroInstall.Services.Executors.html @@ -0,0 +1,153 @@ + + + + + Namespace ZeroInstall.Services.Executors | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Services.Executors

+
+

Launches implementations and injects the selected dependencies.

+
+
+
+ +

+Classes +

+
+
EnvironmentBuilder
+

Fluent-style builder for a process execution environment for a Selections document.

+
+
+
+
Executor
+

Executes a Selections document as a program using dependency injection.

+
+
+
+
ExecutorException
+

Indicates that the IExecutor was unable to launch the desired application.

+
+
+

+Interfaces +

+
+
IEnvironmentBuilder
+

Fluent-style builder for a process execution environment.

+
+
+
+
IExecutor
+

Executes a Selections document as a program using dependency injection.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Feeds.CatalogManager.html b/api/ZeroInstall.Services.Feeds.CatalogManager.html new file mode 100644 index 000000000..b627724b7 --- /dev/null +++ b/api/ZeroInstall.Services.Feeds.CatalogManager.html @@ -0,0 +1,672 @@ + + + + + Class CatalogManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CatalogManager +

+ +
+
Namespace
ZeroInstall.Services.Feeds
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides access to remote and local Catalogs. Handles downloading, signature verification and caching.

+
+
+ +
+
public class CatalogManager : ICatalogManager
+
+ + + + +
+
Inheritance
+
+ +
CatalogManager
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ + +
+ + + + + +

Constructors +

+ + + + +

+ CatalogManager(Config, ITrustManager, ITaskHandler) + +

+ +

Provides access to remote and local Catalogs. Handles downloading, signature verification and caching.

+
+
+ +
+
public CatalogManager(Config config, ITrustManager trustManager, ITaskHandler handler)
+
+ +

Parameters

+
+
config Config
+
+
trustManager ITrustManager
+
+
handler ITaskHandler
+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ DefaultSource + +

+ +

The default Catalog source used if no other is specified.

+
+
+ +
+
public static readonly FeedUri DefaultSource
+
+ + + + +

Field Value

+
+
FeedUri
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ AddSource(FeedUri) + +

+ +

Adds a new source to download Catalog files from.

+
+
+ +
+
public bool AddSource(FeedUri uri)
+
+ +

Parameters

+
+
uri FeedUri
+

The URI of the source to add.

+
+
+ +

Returns

+
+
bool
+

true if the source was add; false if the source was already in the list.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
UriFormatException
+

An invalid catalog source is specified in the configuration file.

+
+
+ + + + + +

+ DownloadCatalog(FeedUri) + +

+ +

Downloads and normalizes a remote catalog file. Mainly for internal use.

+
+
+ +
+
public Catalog DownloadCatalog(FeedUri source)
+
+ +

Parameters

+
+
source FeedUri
+

The URL to download the catalog file from.

+
+
+ +

Returns

+
+
Catalog
+

The parsed Catalog.

+
+
+ + + + + + + + +

Exceptions

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
SignatureException
+

The signature data of a remote catalog file could not be verified.

+
+
NotSupportedException
+

The catalog requires a newer version of Zero Install.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ GetCached() + +

+ +

Loads the last result of GetOnline().

+
+
+ +
+
public Catalog? GetCached()
+
+ + +

Returns

+
+
Catalog
+

A Catalog; null if there is no cached data.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the cache file.

+
+
UnauthorizedAccessException
+

Access to the cache file was not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ GetOnline() + +

+ +

Downloads and merges all Catalogs specified by the configuration files.

+
+
+ +
+
public Catalog GetOnline()
+
+ + +

Returns

+
+
Catalog
+

A Catalog.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading a local catalog file.

+
+
UnauthorizedAccessException
+

Access to a local catalog file was not permitted.

+
+
WebException
+

A problem occurred while fetching a remote catalog file.

+
+
NotSupportedException
+

The catalog requires a newer version of Zero Install.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data of a remote catalog file could not be verified.

+
+
UriFormatException
+

An invalid catalog source is specified in the configuration file.

+
+
+ + + + + +

+ GetSources() + +

+ +

Returns a list of catalog sources as defined by configuration files.

+
+
+ +
+
public FeedUri[] GetSources()
+
+ + +

Returns

+
+
FeedUri[]
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
UriFormatException
+

An invalid catalog source is specified in the configuration file.

+
+
+ + + + + +

+ GetSources(bool) + +

+ +

Returns a list of catalog sources as defined by configuration files.

+
+
+ +
+
public static FeedUri[] GetSources(bool preferMachineWide)
+
+ +

Parameters

+
+
preferMachineWide bool
+

At most one configuration file is processed. If true machine-wide config is preferred; if false per-user config is preferred.

+
+
+ +

Returns

+
+
FeedUri[]
+
+
+ + + + + + + +

Remarks

+

Only the top-most configuration file is processed. I.e., a user config overrides a system config.

+
+ +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
UriFormatException
+

An invalid catalog source is specified in the configuration file.

+
+
+ + + + + +

+ RemoveSource(FeedUri) + +

+ +

Removes an existing source of Catalog files.

+
+
+ +
+
public bool RemoveSource(FeedUri uri)
+
+ +

Parameters

+
+
uri FeedUri
+

The URI of the source to remove.

+
+
+ +

Returns

+
+
bool
+

true if the source was removed; false if the source was not in the current list.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
UriFormatException
+

An invalid catalog source is specified in the configuration file.

+
+
+ + + + + +

+ SetSources(IEnumerable<FeedUri>, bool) + +

+ +

Sets the list of catalog sources in a configuration file.

+
+
+ +
+
public static void SetSources(IEnumerable<FeedUri> uris, bool machineWide = false)
+
+ +

Parameters

+
+
uris IEnumerable<FeedUri>
+

The list of catalog sources to use from now on.

+
+
machineWide bool
+

true to save in a machine-wide location; false to save in the user profile.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem writing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Feeds.CatalogManagerExtensions.html b/api/ZeroInstall.Services.Feeds.CatalogManagerExtensions.html new file mode 100644 index 000000000..a863f8a11 --- /dev/null +++ b/api/ZeroInstall.Services.Feeds.CatalogManagerExtensions.html @@ -0,0 +1,257 @@ + + + + + Class CatalogManagerExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CatalogManagerExtensions +

+ +
+
Namespace
ZeroInstall.Services.Feeds
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides extension methods for ICatalogManager.

+
+
+ +
+
public static class CatalogManagerExtensions
+
+ + + + +
+
Inheritance
+
+ +
CatalogManagerExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ GetCachedSafe(ICatalogManager) + +

+ +

Loads the last result of GetOnline().

+
+
+ +
+
public static Catalog GetCachedSafe(this ICatalogManager manager)
+
+ +

Parameters

+
+
manager ICatalogManager
+
+
+ +

Returns

+
+
Catalog
+

A Catalog; an empty Catalog if there was a problem.

+
+
+ + + + + + + + + + + + + +

+ GetOnlineSafe(ICatalogManager) + +

+ +

Downloads and merges all Catalogs specified by the configuration files.

+
+
+ +
+
public static Catalog GetOnlineSafe(this ICatalogManager manager)
+
+ +

Parameters

+
+
manager ICatalogManager
+
+
+ +

Returns

+
+
Catalog
+

A Catalog; an empty Catalog if there was a problem.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Feeds.FeedManager.html b/api/ZeroInstall.Services.Feeds.FeedManager.html new file mode 100644 index 000000000..e2abfd316 --- /dev/null +++ b/api/ZeroInstall.Services.Feeds.FeedManager.html @@ -0,0 +1,612 @@ + + + + + Class FeedManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedManager +

+ +
+
Namespace
ZeroInstall.Services.Feeds
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides access to remote and local Feeds. Handles downloading and signature verification.

+
+
+ +
+
public class FeedManager : IFeedManager
+
+ + + + +
+
Inheritance
+
+ +
FeedManager
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ + +
+ + + +

Remarks

+

This class performs in-memory caching of Feeds and FeedPreferences.

+
+ + +

Constructors +

+ + + + +

+ FeedManager(Config, IFeedCache, ITrustManager, ITaskHandler) + +

+ +

Creates a new feed manager.

+
+
+ +
+
public FeedManager(Config config, IFeedCache feedCache, ITrustManager trustManager, ITaskHandler handler)
+
+ +

Parameters

+
+
config Config
+

User settings controlling network behaviour, solving, etc.

+
+
feedCache IFeedCache
+

The disk-based cache to store downloaded Feeds.

+
+
trustManager ITrustManager
+

Methods for verifying signatures and user trust.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ this[FeedUri] + +

+ +

Returns a specific Feed. Automatically handles downloading, calling Normalize(FeedUri?) and caching. Updates the Stale indicator.

+
+
+ +
+
public Feed this[FeedUri feedUri] { get; }
+
+ +

Parameters

+
+
feedUri FeedUri
+

The URI of the feed.

+
+
+ + + + +

Property Value

+
+
Feed
+

The normalized Feed. Do not modify! The same instance may be returned to future callers.

+
+
+ + + + +

Remarks

+

Feeds are always served from the IFeedCache if possible, unless Refresh is set to true.

+
+ +

Exceptions

+
+
UriFormatException
+

Uri is missing or does not match feedUri.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A problem occurred while fetching the feed file.

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Access to the cache is not permitted.

+
+
SignatureException
+

The signature data of a remote feed file could not be verified.

+
+
InvalidDataException
+

A required property on the feed is not set or invalid.

+
+
+ + + + + +

+ Refresh + +

+ +

Set to true to re-download Feeds even if they are already in the IFeedCache.

+
+
+ +
+
public bool Refresh { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + +

Remarks

+

Setting this to true implicitly also flushes the in-memory cache.

+
+ + + + + + +

+ ShouldRefresh + +

+ +

Indicates whether Stale is true and EffectiveNetworkUse is Full.

+
+
+ +
+
public bool ShouldRefresh { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Stale + +

+ +

Is set to true if any Feed returned by this[FeedUri] is getting stale and should be updated by setting Refresh to true.

+
+
+ +
+
public bool Stale { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + +

Remarks

+

Freshness controls the time span after which a feed is considered stale.

+
+ + + + +

Methods +

+ + + + +

+ Clear() + +

+ +

Clears any in-memory caches.

+
+
+ +
+
public void Clear()
+
+ + + + + + + + + + + + + + + +

+ GetPreferences(FeedUri) + +

+ +

Returns FeedPreferences for a specific feed.

+
+
+ +
+
public FeedPreferences GetPreferences(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The URI of the feed.

+
+
+ +

Returns

+
+
FeedPreferences
+
+
+ + + + + + + + + + + + + +

+ ImportFeed(Stream, OpenPgpKeyCallback?) + +

+ +

Imports a remote Feed into the IFeedCache after verifying its signature.

+
+
+ +
+
public void ImportFeed(Stream stream, OpenPgpKeyCallback? keyCallback = null)
+
+ +

Parameters

+
+
stream Stream
+

The content of the feed file.

+
+
keyCallback OpenPgpKeyCallback
+

Callback for reading a specific OpenPGP public key file.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Access to the feed file or the cache is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data of the feed file could not be handled or no signatures were trusted.

+
+
+ + + + + +

+ IsStale(FeedUri) + +

+ +

Determines whether there is a stale cached copy of a particular feed.

+
+
+ +
+
public bool IsStale(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The URI of the feed.

+
+
+ +

Returns

+
+
bool
+

true if there is a stale copy in the cache or no copy at all; false if there is a fresh copy in the cache.

+
+
+ + + + + + + + + + + + + +

+ RateLimit(FeedUri) + +

+ +

Ensures that operations regarding a specific feed do not happen to often in a row.

+
+
+ +
+
public bool RateLimit(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The URI of the feed.

+
+
+ +

Returns

+
+
bool
+

true if the operation should be skipped due to rate limiting; false if the operation may proceed.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Feeds.FeedManagerExtensions.html b/api/ZeroInstall.Services.Feeds.FeedManagerExtensions.html new file mode 100644 index 000000000..7779f2295 --- /dev/null +++ b/api/ZeroInstall.Services.Feeds.FeedManagerExtensions.html @@ -0,0 +1,301 @@ + + + + + Class FeedManagerExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedManagerExtensions +

+ +
+
Namespace
ZeroInstall.Services.Feeds
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides extension methods for IFeedManager.

+
+
+ +
+
public static class FeedManagerExtensions
+
+ + + + +
+
Inheritance
+
+ +
FeedManagerExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ GetFresh(IFeedManager, FeedUri) + +

+ +

Returns a specific Feed. Automatically updates cached feeds when indicated by ShouldRefresh.

+
+
+ +
+
public static Feed GetFresh(this IFeedManager feedManager, FeedUri feedUri)
+
+ +

Parameters

+
+
feedManager IFeedManager
+

The IFeedManager implementation.

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed.

+
+
+ +

Returns

+
+
Feed
+

The normalized Feed. Do not modify! The same instance may be returned to future callers.

+
+
+ + + + + + + +

Remarks

+

Feeds are always served from the IFeedCache if possible, unless Refresh is set to true.

+
+ +

Exceptions

+
+
UriFormatException
+

Uri is missing or does not match feedUri.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
WebException
+

A problem occurred while fetching the feed file.

+
+
UnauthorizedAccessException
+

Access to the cache is not permitted.

+
+
SignatureException
+

The signature data of a remote feed file could not be verified.

+
+
InvalidDataException
+

A required property on the feed is not set or invalid.

+
+
+ + + + + +

+ ImportFeed(IFeedManager, string) + +

+ +

Imports a local copy of a remote Feed into the IFeedCache after verifying its signature.

+
+
+ +
+
public static void ImportFeed(this IFeedManager feedManager, string path)
+
+ +

Parameters

+
+
feedManager IFeedManager
+

The IFeedManager implementation.

+
+
path string
+

The path of a local copy of the feed.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Access to the feed file or the cache is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data of the feed file could not be handled or no signatures were trusted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Feeds.ICatalogManager.html b/api/ZeroInstall.Services.Feeds.ICatalogManager.html new file mode 100644 index 000000000..b153b6f7c --- /dev/null +++ b/api/ZeroInstall.Services.Feeds.ICatalogManager.html @@ -0,0 +1,461 @@ + + + + + Interface ICatalogManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface ICatalogManager +

+ +
+
Namespace
ZeroInstall.Services.Feeds
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides access to remote and local Catalogs. Handles downloading, signature verification and caching.

+
+
+ +
+
public interface ICatalogManager
+
+ + + + + + + + +
+
Extension Methods
+
+ + +
+ + + + + +

Methods +

+ + + + +

+ AddSource(FeedUri) + +

+ +

Adds a new source to download Catalog files from.

+
+
+ +
+
bool AddSource(FeedUri uri)
+
+ +

Parameters

+
+
uri FeedUri
+

The URI of the source to add.

+
+
+ +

Returns

+
+
bool
+

true if the source was add; false if the source was already in the list.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
UriFormatException
+

An invalid catalog source is specified in the configuration file.

+
+
+ + + + + +

+ DownloadCatalog(FeedUri) + +

+ +

Downloads and normalizes a remote catalog file. Mainly for internal use.

+
+
+ +
+
Catalog DownloadCatalog(FeedUri source)
+
+ +

Parameters

+
+
source FeedUri
+

The URL to download the catalog file from.

+
+
+ +

Returns

+
+
Catalog
+

The parsed Catalog.

+
+
+ + + + + + + + +

Exceptions

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
SignatureException
+

The signature data of a remote catalog file could not be verified.

+
+
NotSupportedException
+

The catalog requires a newer version of Zero Install.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ GetCached() + +

+ +

Loads the last result of GetOnline().

+
+
+ +
+
Catalog? GetCached()
+
+ + +

Returns

+
+
Catalog
+

A Catalog; null if there is no cached data.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the cache file.

+
+
UnauthorizedAccessException
+

Access to the cache file was not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ GetOnline() + +

+ +

Downloads and merges all Catalogs specified by the configuration files.

+
+
+ +
+
Catalog GetOnline()
+
+ + +

Returns

+
+
Catalog
+

A Catalog.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading a local catalog file.

+
+
UnauthorizedAccessException
+

Access to a local catalog file was not permitted.

+
+
WebException
+

A problem occurred while fetching a remote catalog file.

+
+
NotSupportedException
+

The catalog requires a newer version of Zero Install.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data of a remote catalog file could not be verified.

+
+
UriFormatException
+

An invalid catalog source is specified in the configuration file.

+
+
+ + + + + +

+ GetSources() + +

+ +

Returns a list of catalog sources as defined by configuration files.

+
+
+ +
+
FeedUri[] GetSources()
+
+ + +

Returns

+
+
FeedUri[]
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
UriFormatException
+

An invalid catalog source is specified in the configuration file.

+
+
+ + + + + +

+ RemoveSource(FeedUri) + +

+ +

Removes an existing source of Catalog files.

+
+
+ +
+
bool RemoveSource(FeedUri uri)
+
+ +

Parameters

+
+
uri FeedUri
+

The URI of the source to remove.

+
+
+ +

Returns

+
+
bool
+

true if the source was removed; false if the source was not in the current list.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
UriFormatException
+

An invalid catalog source is specified in the configuration file.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Feeds.IFeedManager.html b/api/ZeroInstall.Services.Feeds.IFeedManager.html new file mode 100644 index 000000000..87c033ba5 --- /dev/null +++ b/api/ZeroInstall.Services.Feeds.IFeedManager.html @@ -0,0 +1,522 @@ + + + + + Interface IFeedManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IFeedManager +

+ +
+
Namespace
ZeroInstall.Services.Feeds
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides access to remote and local Feeds. Handles downloading and signature verification.

+
+
+ +
+
public interface IFeedManager
+
+ + + + + + + + +
+
Extension Methods
+
+ + +
+ + + + + +

Properties +

+ + + + +

+ this[FeedUri] + +

+ +

Returns a specific Feed. Automatically handles downloading, calling Normalize(FeedUri?) and caching. Updates the Stale indicator.

+
+
+ +
+
Feed this[FeedUri feedUri] { get; }
+
+ +

Parameters

+
+
feedUri FeedUri
+

The URI of the feed.

+
+
+ + + + +

Property Value

+
+
Feed
+

The normalized Feed. Do not modify! The same instance may be returned to future callers.

+
+
+ + + + +

Remarks

+

Feeds are always served from the IFeedCache if possible, unless Refresh is set to true.

+
+ +

Exceptions

+
+
UriFormatException
+

Uri is missing or does not match feedUri.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A problem occurred while fetching the feed file.

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Access to the cache is not permitted.

+
+
SignatureException
+

The signature data of a remote feed file could not be verified.

+
+
InvalidDataException
+

A required property on the feed is not set or invalid.

+
+
+ + + + + +

+ Refresh + +

+ +

Set to true to re-download Feeds even if they are already in the IFeedCache.

+
+
+ +
+
bool Refresh { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ ShouldRefresh + +

+ +

Indicates whether Stale is true and EffectiveNetworkUse is Full.

+
+
+ +
+
bool ShouldRefresh { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Stale + +

+ +

Is set to true if any Feed returned by this[FeedUri] is getting stale and should be updated by setting Refresh to true.

+
+
+ +
+
bool Stale { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + +

Remarks

+

Freshness controls the time span after which a feed is considered stale.

+
+ + + + +

Methods +

+ + + + +

+ Clear() + +

+ +

Clears any in-memory caches.

+
+
+ +
+
void Clear()
+
+ + + + + + + + + + + + + + + +

+ GetPreferences(FeedUri) + +

+ +

Returns FeedPreferences for a specific feed.

+
+
+ +
+
FeedPreferences GetPreferences(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The URI of the feed.

+
+
+ +

Returns

+
+
FeedPreferences
+
+
+ + + + + + + + + + + + + +

+ ImportFeed(Stream, OpenPgpKeyCallback?) + +

+ +

Imports a remote Feed into the IFeedCache after verifying its signature.

+
+
+ +
+
void ImportFeed(Stream stream, OpenPgpKeyCallback? keyCallback = null)
+
+ +

Parameters

+
+
stream Stream
+

The content of the feed file.

+
+
keyCallback OpenPgpKeyCallback
+

Callback for reading a specific OpenPGP public key file.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Access to the feed file or the cache is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
SignatureException
+

The signature data of the feed file could not be handled or no signatures were trusted.

+
+
+ + + + + +

+ IsStale(FeedUri) + +

+ +

Determines whether there is a stale cached copy of a particular feed.

+
+
+ +
+
bool IsStale(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The URI of the feed.

+
+
+ +

Returns

+
+
bool
+

true if there is a stale copy in the cache or no copy at all; false if there is a fresh copy in the cache.

+
+
+ + + + + + + + + + + + + +

+ RateLimit(FeedUri) + +

+ +

Ensures that operations regarding a specific feed do not happen to often in a row.

+
+
+ +
+
bool RateLimit(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The URI of the feed.

+
+
+ +

Returns

+
+
bool
+

true if the operation should be skipped due to rate limiting; false if the operation may proceed.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Feeds.ITrustManager.html b/api/ZeroInstall.Services.Feeds.ITrustManager.html new file mode 100644 index 000000000..981973aca --- /dev/null +++ b/api/ZeroInstall.Services.Feeds.ITrustManager.html @@ -0,0 +1,218 @@ + + + + + Interface ITrustManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface ITrustManager +

+ +
+
Namespace
ZeroInstall.Services.Feeds
+
Assembly
ZeroInstall.Services.dll
+
+ +

Methods for verifying signatures and user trust.

+
+
+ +
+
public interface ITrustManager
+
+ + + + + + + + + + + +

Remarks

+

Implementations of this interface are immutable and thread-safe.

+
+ + +

Methods +

+ + + + +

+ CheckTrust(byte[], FeedUri, OpenPgpKeyCallback?) + +

+ +

Checks whether a remote feed or catalog file has a a valid and trusted signature. Downloads missing GPG keys for verification and interactively asks the user to approve new keys.

+
+
+ +
+
ValidSignature CheckTrust(byte[] data, FeedUri uri, OpenPgpKeyCallback? keyCallback = null)
+
+ +

Parameters

+
+
data byte[]
+

The data of the file.

+
+
uri FeedUri
+

The URI the data originally came from.

+
+
keyCallback OpenPgpKeyCallback
+

Callback for reading a specific OpenPGP public key file.

+
+
+ +

Returns

+
+
ValidSignature
+

The first valid and trusted signature found on the feed.

+
+
+ + + + + + + + +

Exceptions

+
+
UriFormatException
+

uri is a local file.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A key file could not be downloaded from the internet.

+
+
SignatureException
+

No trusted signature was found.

+
+
IOException
+

A problem occurred while writing trust configuration.

+
+
UnauthorizedAccessException
+

Write access to the trust configuration is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Feeds.OpenPgpKeyCallback.html b/api/ZeroInstall.Services.Feeds.OpenPgpKeyCallback.html new file mode 100644 index 000000000..2f58e9267 --- /dev/null +++ b/api/ZeroInstall.Services.Feeds.OpenPgpKeyCallback.html @@ -0,0 +1,157 @@ + + + + + Delegate OpenPgpKeyCallback | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Delegate OpenPgpKeyCallback +

+ +
+
Namespace
ZeroInstall.Services.Feeds
+
Assembly
ZeroInstall.Services.dll
+
+ +

Callback for reading a specific OpenPGP public key file.

+
+
+ +
+
public delegate ArraySegment<byte>? OpenPgpKeyCallback(string id)
+
+ +

Parameters

+
+
id string
+

The key ID as a canonical string..

+
+
+ +

Returns

+
+
ArraySegment<byte>?
+

The public key in binary or ASCII Armored format.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Feeds.ReplayAttackException.html b/api/ZeroInstall.Services.Feeds.ReplayAttackException.html new file mode 100644 index 000000000..4453ea068 --- /dev/null +++ b/api/ZeroInstall.Services.Feeds.ReplayAttackException.html @@ -0,0 +1,353 @@ + + + + + Class ReplayAttackException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ReplayAttackException +

+ +
+
Namespace
ZeroInstall.Services.Feeds
+
Assembly
ZeroInstall.Services.dll
+
+ +

Indicates a feed file that downloaded by the IFeedManager is older than a version already located in the IFeedCache.

+
+
+ +
+
public sealed class ReplayAttackException : IOException, ISerializable
+
+ + + + +
+
Inheritance
+
+ + + + +
ReplayAttackException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ReplayAttackException(Uri, DateTime, DateTime) + +

+ +

Creates a new replay attack exception.

+
+
+ +
+
public ReplayAttackException(Uri feedUrl, DateTime oldTime, DateTime newTime)
+
+ +

Parameters

+
+
feedUrl Uri
+

The URL of the feed file to be added to the cache.

+
+
oldTime DateTime
+

The last changed time stamp of the existing file in the cache.

+
+
newTime DateTime
+

The last changed time stamp of the new file to be added.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ FeedUrl + +

+ +

The URL of the feed file to be added to the cache.

+
+
+ +
+
public Uri FeedUrl { get; }
+
+ + + + + +

Property Value

+
+
Uri
+
+
+ + + + + + + + + + +

+ NewTime + +

+ +

The last changed time stamp of the new file to be added.

+
+
+ +
+
public DateTime NewTime { get; }
+
+ + + + + +

Property Value

+
+
DateTime
+
+
+ + + + + + + + + + +

+ OldTime + +

+ +

The last changed time stamp of the existing file in the cache.

+
+
+ +
+
public DateTime OldTime { get; }
+
+ + + + + +

Property Value

+
+
DateTime
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Feeds.TrustManager.html b/api/ZeroInstall.Services.Feeds.TrustManager.html new file mode 100644 index 000000000..5139e9cd5 --- /dev/null +++ b/api/ZeroInstall.Services.Feeds.TrustManager.html @@ -0,0 +1,303 @@ + + + + + Class TrustManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TrustManager +

+ +
+
Namespace
ZeroInstall.Services.Feeds
+
Assembly
ZeroInstall.Services.dll
+
+ +

Methods for verifying signatures and user trust.

+
+
+ +
+
public class TrustManager : ITrustManager
+
+ + + + +
+
Inheritance
+
+ +
TrustManager
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ TrustManager(TrustDB, Config, IOpenPgp, IFeedCache, ITaskHandler) + +

+ +

Methods for verifying signatures and user trust.

+
+
+ +
+
public TrustManager(TrustDB trustDB, Config config, IOpenPgp openPgp, IFeedCache feedCache, ITaskHandler handler)
+
+ +

Parameters

+
+
trustDB TrustDB
+
+
config Config
+
+
openPgp IOpenPgp
+
+
feedCache IFeedCache
+
+
handler ITaskHandler
+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ CheckTrust(byte[], FeedUri, OpenPgpKeyCallback?) + +

+ +

Checks whether a remote feed or catalog file has a a valid and trusted signature. Downloads missing GPG keys for verification and interactively asks the user to approve new keys.

+
+
+ +
+
public ValidSignature CheckTrust(byte[] data, FeedUri uri, OpenPgpKeyCallback? keyCallback = null)
+
+ +

Parameters

+
+
data byte[]
+

The data of the file.

+
+
uri FeedUri
+

The URI the data originally came from.

+
+
keyCallback OpenPgpKeyCallback
+

Callback for reading a specific OpenPGP public key file.

+
+
+ +

Returns

+
+
ValidSignature
+

The first valid and trusted signature found on the feed.

+
+
+ + + + + + + + +

Exceptions

+
+
UriFormatException
+

uri is a local file.

+
+
OperationCanceledException
+

The user canceled the task.

+
+
WebException
+

A key file could not be downloaded from the internet.

+
+
SignatureException
+

No trusted signature was found.

+
+
IOException
+

A problem occurred while writing trust configuration.

+
+
UnauthorizedAccessException
+

Write access to the trust configuration is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Feeds.html b/api/ZeroInstall.Services.Feeds.html new file mode 100644 index 000000000..671a85fd0 --- /dev/null +++ b/api/ZeroInstall.Services.Feeds.html @@ -0,0 +1,181 @@ + + + + + Namespace ZeroInstall.Services.Feeds | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Services.Feeds

+
+

Downloading and verifying feeds.

+
+
+
+ +

+Classes +

+
+
CatalogManager
+

Provides access to remote and local Catalogs. Handles downloading, signature verification and caching.

+
+
+
+
CatalogManagerExtensions
+

Provides extension methods for ICatalogManager.

+
+
+
+
FeedManager
+

Provides access to remote and local Feeds. Handles downloading and signature verification.

+
+
+
+
FeedManagerExtensions
+

Provides extension methods for IFeedManager.

+
+
+
+
ReplayAttackException
+

Indicates a feed file that downloaded by the IFeedManager is older than a version already located in the IFeedCache.

+
+
+
+
TrustManager
+

Methods for verifying signatures and user trust.

+
+
+

+Interfaces +

+
+
ICatalogManager
+

Provides access to remote and local Catalogs. Handles downloading, signature verification and caching.

+
+
+
+
IFeedManager
+

Provides access to remote and local Feeds. Handles downloading and signature verification.

+
+
+
+
ITrustManager
+

Methods for verifying signatures and user trust.

+
+
+

+Delegates +

+
+
OpenPgpKeyCallback
+

Callback for reading a specific OpenPGP public key file.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Fetchers.Fetcher.html b/api/ZeroInstall.Services.Fetchers.Fetcher.html new file mode 100644 index 000000000..5a4f0ddf3 --- /dev/null +++ b/api/ZeroInstall.Services.Fetchers.Fetcher.html @@ -0,0 +1,665 @@ + + + + + Class Fetcher | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Fetcher +

+ +
+
Namespace
ZeroInstall.Services.Fetchers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Downloads Implementations, extracts them and adds them to an IImplementationStore.

+
+
+ +
+
public class Fetcher : IFetcher
+
+ + + + +
+
Inheritance
+
+ +
Fetcher
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ Fetcher(Config, IImplementationStore, ITaskHandler) + +

+ +

Downloads Implementations, extracts them and adds them to an IImplementationStore.

+
+
+ +
+
public Fetcher(Config config, IImplementationStore store, ITaskHandler handler)
+
+ +

Parameters

+
+
config Config
+

User settings controlling network behaviour, solving, etc.

+
+
store IImplementationStore
+

The location to store the downloaded and unpacked Implementations in.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about progress.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Properties +

+ + + + +

+ Discovery + +

+ +

Discovers implementations in implementation stores on other machines in the local network instead of fetching them from their original source.

+
+
+ +
+
public IImplementationDiscovery? Discovery { get; set; }
+
+ + + + + +

Property Value

+
+
IImplementationDiscovery
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Apply(IBuilder, IRecipeStep, string) + +

+ +

Applies a retrieval method step.

+
+
+ +
+
protected virtual void Apply(IBuilder builder, IRecipeStep step, string tag)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder used to build the implementation.

+
+
step IRecipeStep
+

Instructions for downloading the file.

+
+
tag string
+

A Tag used to group progress bars.

+
+
+ + + + + + + + + + + + + + +

+ CheckArchiveTypes(IEnumerable<Archive>) + +

+ +

Infers missing MimeTypes and ensures suitable IArchiveExtractors are available.

+
+
+ +
+
protected void CheckArchiveTypes(IEnumerable<Archive> archives)
+
+ +

Parameters

+
+
archives IEnumerable<Archive>
+
+
+ + + + + + + + + +

Exceptions

+
+
NotSupportedException
+

No extractor registered for the specified or inferred MimeType.

+
+
+ + + + + +

+ Download(IBuilder, DownloadRetrievalMethod, string) + +

+ +

Applies a download step.

+
+
+ +
+
protected virtual void Download(IBuilder builder, DownloadRetrievalMethod download, string tag)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder used to build the implementation.

+
+
download DownloadRetrievalMethod
+

Instructions for downloading the file.

+
+
tag string
+

A Tag used to group progress bars.

+
+
+ + + + + + + + + + + + + + +

+ Fetch(Implementation) + +

+ +

Downloads an Implementation to the IImplementationStore.

+
+
+ +
+
public void Fetch(Implementation implementation)
+
+ +

Parameters

+
+
implementation Implementation
+

The implementation to download.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

A download or IO task was canceled from another thread.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted.

+
+
UnauthorizedAccessException
+

Write access to IImplementationStore is not permitted.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
+ + + + + +

+ Fetch(Implementation, string) + +

+ +

Downloads an Implementation to the IImplementationStore.

+
+
+ +
+
protected virtual void Fetch(Implementation implementation, string tag)
+
+ +

Parameters

+
+
implementation Implementation
+

The implementation to download.

+
+
tag string
+

A Tag used to group progress bars.

+
+
+ + + + + + + + + + + + + + +

+ GetPath(ImplementationBase) + +

+ +

Determines the local path of an implementation.

+
+
+ +
+
protected string? GetPath(ImplementationBase implementation)
+
+ +

Parameters

+
+
implementation ImplementationBase
+
+
+ +

Returns

+
+
string
+

A fully qualified path to the directory containing the implementation; null if the requested implementation could not be found in the store or is a package implementation.

+
+
+ + + + + + + + + + + + + +

+ Retrieve(IReadOnlyCollection<IRecipeStep>, ManifestDigest, string) + +

+ +

Executes the steps of a retrieval method to build an implementation.

+
+
+ +
+
protected virtual void Retrieve(IReadOnlyCollection<IRecipeStep> steps, ManifestDigest manifestDigest, string tag)
+
+ +

Parameters

+
+
steps IReadOnlyCollection<IRecipeStep>
+

The retrieval method steps.

+
+
manifestDigest ManifestDigest
+

The expected manifest digest of the implementation.

+
+
tag string
+

A Tag used to group progress bars.

+
+
+ + + + + + + + + + + + + + +

+ Retrieve(RetrievalMethod, ManifestDigest, string) + +

+ +

Executes a retrieval method to build an implementation.

+
+
+ +
+
protected virtual void Retrieve(RetrievalMethod retrievalMethod, ManifestDigest manifestDigest, string tag)
+
+ +

Parameters

+
+
retrievalMethod RetrievalMethod
+

The retrieval method.

+
+
manifestDigest ManifestDigest
+

The expected manifest digest of the implementation.

+
+
tag string
+

A Tag used to group progress bars.

+
+
+ + + + + + + + + + + + + + +

+ Retrieve(ExternalRetrievalMethod) + +

+ +

Executes an external retrieval method.

+
+
+ +
+
protected virtual void Retrieve(ExternalRetrievalMethod retrievalMethod)
+
+ +

Parameters

+
+
retrievalMethod ExternalRetrievalMethod
+
+
+ + + + + + + + + + + + + + +

+ TryRetrieve(IEnumerable<RetrievalMethod>, ManifestDigest, string) + +

+ +

Tries one or more RetrievalMethods until one succeeds.

+
+
+ +
+
protected virtual void TryRetrieve(IEnumerable<RetrievalMethod> retrievalMethods, ManifestDigest manifestDigest, string tag)
+
+ +

Parameters

+
+
retrievalMethods IEnumerable<RetrievalMethod>
+

The available retrieval method.

+
+
manifestDigest ManifestDigest
+

The expected manifest digest of the implementation.

+
+
tag string
+

A Tag used to group progress bars.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Fetchers.IFetcher.html b/api/ZeroInstall.Services.Fetchers.IFetcher.html new file mode 100644 index 000000000..657189d41 --- /dev/null +++ b/api/ZeroInstall.Services.Fetchers.IFetcher.html @@ -0,0 +1,242 @@ + + + + + Interface IFetcher | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IFetcher +

+ +
+
Namespace
ZeroInstall.Services.Fetchers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Downloads Implementations, extracts them and adds them to an IImplementationStore.

+
+
+ +
+
public interface IFetcher
+
+ + + + + + + + + + + +

Remarks

+

Implementations of this interface are immutable and thread-safe.

+
+ + +

Properties +

+ + + + +

+ Discovery + +

+ +

Discovers implementations in implementation stores on other machines in the local network instead of fetching them from their original source.

+
+
+ +
+
IImplementationDiscovery? Discovery { get; set; }
+
+ + + + + +

Property Value

+
+
IImplementationDiscovery
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Fetch(Implementation) + +

+ +

Downloads an Implementation to the IImplementationStore.

+
+
+ +
+
void Fetch(Implementation implementation)
+
+ +

Parameters

+
+
implementation Implementation
+

The implementation to download.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

A download or IO task was canceled from another thread.

+
+
WebException
+

A file could not be downloaded from the internet.

+
+
NotSupportedException
+

A file format, protocol, etc. is unknown or not supported.

+
+
IOException
+

A downloaded file could not be written to the disk or extracted.

+
+
UnauthorizedAccessException
+

Write access to IImplementationStore is not permitted.

+
+
DigestMismatchException
+

An Implementation's Archives don't match the associated ManifestDigest.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Fetchers.IImplementationDiscovery.html b/api/ZeroInstall.Services.Fetchers.IImplementationDiscovery.html new file mode 100644 index 000000000..dbd34ec4a --- /dev/null +++ b/api/ZeroInstall.Services.Fetchers.IImplementationDiscovery.html @@ -0,0 +1,205 @@ + + + + + Interface IImplementationDiscovery | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IImplementationDiscovery +

+ +
+
Namespace
ZeroInstall.Services.Fetchers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Discovers implementations in implementation stores on other machines in the local network.

+
+
+ +
+
public interface IImplementationDiscovery
+
+ + + + + + + + +
+
Extension Methods
+
+ +
+ + + + + +

Methods +

+ + + + +

+ GetImplementation(ManifestDigest, CancellationToken) + +

+ +

Finds a specific implementation in an implementation store on another machine. +Blocks until the implementation is found or the operation is cancelled.

+
+
+ +
+
Uri GetImplementation(ManifestDigest manifestDigest, CancellationToken cancellationToken)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest the implementation to find.

+
+
cancellationToken CancellationToken
+

Used to stop looking for the implementation.

+
+
+ +

Returns

+
+
Uri
+

An archive URI from which the implementation can be downloaded.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The cancellationToken was cancelled.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Fetchers.ImplementationDiscovery.html b/api/ZeroInstall.Services.Fetchers.ImplementationDiscovery.html new file mode 100644 index 000000000..c1aeb4120 --- /dev/null +++ b/api/ZeroInstall.Services.Fetchers.ImplementationDiscovery.html @@ -0,0 +1,302 @@ + + + + + Class ImplementationDiscovery | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationDiscovery +

+ +
+
Namespace
ZeroInstall.Services.Fetchers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Discovers implementations in implementation stores on other machines in the local network.

+
+
+ +
+
public class ImplementationDiscovery : IImplementationDiscovery, IDisposable
+
+ + + + +
+
Inheritance
+
+ +
ImplementationDiscovery
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Constructors +

+ + + + +

+ ImplementationDiscovery() + +

+ +

Starts discovering implementation stores on other machines in the local network.

+
+
+ +
+
public ImplementationDiscovery()
+
+ + + + + + + + + + + + + +

Methods +

+ + + + +

+ Dispose() + +

+ +

Stops discovering implementation stores.

+
+
+ +
+
public void Dispose()
+
+ + + + + + + + + + + + + + + +

+ GetImplementation(ManifestDigest, CancellationToken) + +

+ +

Finds a specific implementation in an implementation store on another machine. +Blocks until the implementation is found or the operation is cancelled.

+
+
+ +
+
public Uri GetImplementation(ManifestDigest manifestDigest, CancellationToken cancellationToken)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest the implementation to find.

+
+
cancellationToken CancellationToken
+

Used to stop looking for the implementation.

+
+
+ +

Returns

+
+
Uri
+

An archive URI from which the implementation can be downloaded.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The cancellationToken was cancelled.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Fetchers.ImplementationDiscoveryExtensions.html b/api/ZeroInstall.Services.Fetchers.ImplementationDiscoveryExtensions.html new file mode 100644 index 000000000..ad26fd67a --- /dev/null +++ b/api/ZeroInstall.Services.Fetchers.ImplementationDiscoveryExtensions.html @@ -0,0 +1,235 @@ + + + + + Class ImplementationDiscoveryExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationDiscoveryExtensions +

+ +
+
Namespace
ZeroInstall.Services.Fetchers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides extension methods for IImplementationDiscovery.

+
+
+ +
+
public static class ImplementationDiscoveryExtensions
+
+ + + + +
+
Inheritance
+
+ +
ImplementationDiscoveryExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ TryGetImplementation(IImplementationDiscovery, ManifestDigest, TimeSpan, CancellationToken) + +

+ +

Tries to find a specific implementation in an implementation store on another machine within the specified timeout.

+
+
+ +
+
public static Uri? TryGetImplementation(this IImplementationDiscovery discovery, ManifestDigest manifestDigest, TimeSpan timeout, CancellationToken cancellationToken = default)
+
+ +

Parameters

+
+
discovery IImplementationDiscovery
+

The implementation discovery service.

+
+
manifestDigest ManifestDigest
+

The digest the implementation to find.

+
+
timeout TimeSpan
+

The amount of time to look for the implementation.

+
+
cancellationToken CancellationToken
+

Used to stop looking for the implementation.

+
+
+ +

Returns

+
+
Uri
+

An archive URI from which the implementation can be downloaded; null if the implementation was not found within the specified timeout.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The cancellationToken was cancelled.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Fetchers.RetrievalMethodRanker.html b/api/ZeroInstall.Services.Fetchers.RetrievalMethodRanker.html new file mode 100644 index 000000000..8fcecb93f --- /dev/null +++ b/api/ZeroInstall.Services.Fetchers.RetrievalMethodRanker.html @@ -0,0 +1,262 @@ + + + + + Class RetrievalMethodRanker | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RetrievalMethodRanker +

+ +
+
Namespace
ZeroInstall.Services.Fetchers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Compares RetrievalMethods and sorts them from most to least preferred by IFetchers.

+
+
+ +
+
public sealed class RetrievalMethodRanker : IComparer<RetrievalMethod>
+
+ + + + +
+
Inheritance
+
+ +
RetrievalMethodRanker
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Fields +

+ + + +

+ Instance + +

+ +

Singleton pattern.

+
+
+ +
+
public static readonly RetrievalMethodRanker Instance
+
+ + + + +

Field Value

+
+
RetrievalMethodRanker
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ Compare(RetrievalMethod?, RetrievalMethod?) + +

+ +

Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.

+
+
+ +
+
public int Compare(RetrievalMethod? x, RetrievalMethod? y)
+
+ +

Parameters

+
+
x RetrievalMethod
+

The first object to compare.

+
+
y RetrievalMethod
+

The second object to compare.

+
+
+ +

Returns

+
+
int
+

A signed integer that indicates the relative values of x and y, as shown in the following table.

+
Value Meaning
Less than zerox is less than y.
Zerox equals y.
Greater than zerox is greater than y.
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Fetchers.html b/api/ZeroInstall.Services.Fetchers.html new file mode 100644 index 000000000..9c7a92edc --- /dev/null +++ b/api/ZeroInstall.Services.Fetchers.html @@ -0,0 +1,158 @@ + + + + + Namespace ZeroInstall.Services.Fetchers | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Services.Fetchers

+
+

Downloads and extracts implementations.

+
+
+
+ +

+Classes +

+
+
Fetcher
+

Downloads Implementations, extracts them and adds them to an IImplementationStore.

+
+
+
+
ImplementationDiscovery
+

Discovers implementations in implementation stores on other machines in the local network.

+
+
+
+
ImplementationDiscoveryExtensions
+

Provides extension methods for IImplementationDiscovery.

+
+
+
+
RetrievalMethodRanker
+

Compares RetrievalMethods and sorts them from most to least preferred by IFetchers.

+
+
+

+Interfaces +

+
+
IFetcher
+

Downloads Implementations, extracts them and adds them to an IImplementationStore.

+
+
+
+
IImplementationDiscovery
+

Discovers implementations in implementation stores on other machines in the local network.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.ISelectionsManager.html b/api/ZeroInstall.Services.ISelectionsManager.html new file mode 100644 index 000000000..a72d496db --- /dev/null +++ b/api/ZeroInstall.Services.ISelectionsManager.html @@ -0,0 +1,331 @@ + + + + + Interface ISelectionsManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface ISelectionsManager +

+ +
+
Namespace
ZeroInstall.Services
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides methods for filtering Selections.

+
+
+ +
+
public interface ISelectionsManager
+
+ + + + + + + + +
+
Extension Methods
+
+ +
+ + + +

Remarks

+

Implementations of this interface are immutable and thread-safe.

+
+ + +

Methods +

+ + + + +

+ GetDiff(Selections, Selections) + +

+ +

Generates a list of differences between two selections.

+
+
+ +
+
IEnumerable<SelectionsDiffNode> GetDiff(Selections oldSelections, Selections newSelections)
+
+ +

Parameters

+
+
oldSelections Selections
+

The old selections to base the comparison on.

+
+
newSelections Selections
+

The new selections to compare against.

+
+
+ +

Returns

+
+
IEnumerable<SelectionsDiffNode>
+
+
+ + + + + + + + + + + + + +

+ GetImplementations(IEnumerable<ImplementationSelection>) + +

+ +

Retrieves the original Implementations these selections were based on.

+
+
+ +
+
IEnumerable<Implementation> GetImplementations(IEnumerable<ImplementationSelection> selections)
+
+ +

Parameters

+
+
selections IEnumerable<ImplementationSelection>
+

The ImplementationSelections to map back to Implementations.

+
+
+ +

Returns

+
+
IEnumerable<Implementation>
+
+
+ + + + + + + + + + + + + +

+ GetTree(Selections) + +

+ +

Generates a tree representation of the dependencies within the selections.

+
+
+ +
+
NamedCollection<SelectionsTreeNode> GetTree(Selections selections)
+
+ +

Parameters

+
+
selections Selections
+
+
+ +

Returns

+
+
NamedCollection<SelectionsTreeNode>
+
+
+ + + + + + + + + + + + + +

+ GetUncached(IEnumerable<ImplementationSelection>) + +

+ +

Returns a list of any downloadable ImplementationSelections that are missing from an IImplementationStore.

+
+
+ +
+
IEnumerable<ImplementationSelection> GetUncached(IEnumerable<ImplementationSelection> selections)
+
+ +

Parameters

+
+
selections IEnumerable<ImplementationSelection>
+

The selections to search for ImplementationSelections that are missing.

+
+
+ +

Returns

+
+
IEnumerable<ImplementationSelection>
+
+
+ + + + + + + +

Remarks

+

Feed files may be downloaded, no implementations are downloaded.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

A Feed or Implementation is missing.

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Read access to the cache is not permitted.

+
+
InvalidDataException
+

The feed file could not be parsed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Native.CompositePackageManager.html b/api/ZeroInstall.Services.Native.CompositePackageManager.html new file mode 100644 index 000000000..3b26dd860 --- /dev/null +++ b/api/ZeroInstall.Services.Native.CompositePackageManager.html @@ -0,0 +1,310 @@ + + + + + Class CompositePackageManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CompositePackageManager +

+ +
+
Namespace
ZeroInstall.Services.Native
+
Assembly
ZeroInstall.Services.dll
+
+ +

Combines multiple IPackageManagers as a composite.

+
+
+ +
+
public class CompositePackageManager : IPackageManager
+
+ + + + +
+
Inheritance
+
+ +
CompositePackageManager
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ CompositePackageManager(IEnumerable<IPackageManager>) + +

+ +

Combines multiple IPackageManagers as a composite.

+
+
+ +
+
public CompositePackageManager(IEnumerable<IPackageManager> packageManagers)
+
+ +

Parameters

+
+
packageManagers IEnumerable<IPackageManager>
+

A priority-sorted list of IPackageManagers. Queried first-to-last.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Lookup(ImplementationSelection) + +

+ +

Looks up the specific ExternalImplementation an ImplementationSelection was based on.

+
+
+ +
+
public ExternalImplementation? Lookup(ImplementationSelection selection)
+
+ +

Parameters

+
+
selection ImplementationSelection
+

The implementation selection to look up.

+
+
+ +

Returns

+
+
ExternalImplementation
+

The ExternalImplementation; null if selection does not refer to a package known to this package manager.

+
+
+ + + + + + + + + + + + + +

+ Query(PackageImplementation, params string[]) + +

+ +

Queries the package manager for all ExternalImplementations that match a specific PackageImplementation definition.

+
+
+ +
+
public IEnumerable<ExternalImplementation> Query(PackageImplementation package, params string[] distributions)
+
+ +

Parameters

+
+
package PackageImplementation
+

The definition of the package to look for.

+
+
distributions string[]
+

Specifies the distributions to check for matching packages. Leave empty to check in all available distributions.

+
+
+ +

Returns

+
+
IEnumerable<ExternalImplementation>
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Native.ExternalImplementation.html b/api/ZeroInstall.Services.Native.ExternalImplementation.html new file mode 100644 index 000000000..123831215 --- /dev/null +++ b/api/ZeroInstall.Services.Native.ExternalImplementation.html @@ -0,0 +1,761 @@ + + + + + Class ExternalImplementation | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ExternalImplementation +

+ +
+
Namespace
ZeroInstall.Services.Native
+
Assembly
ZeroInstall.Services.dll
+
+ +

An implementation provided by an external package manager.

+
+
+ +
+
[Equatable]
+public sealed class ExternalImplementation : Implementation, IEquatable<XmlUnknown>, IEquatable<FeedElement>, IEquatable<TargetBase>, IBindingContainer, IDependencyContainer, ICloneable<Element>, IEquatable<Element>, IEquatable<ImplementationBase>, IEquatable<Implementation>, IEquatable<ExternalImplementation>
+
+ + + + +
+
Inheritance
+
+ + + + + + + +
ExternalImplementation
+
+
+ +
+
Implements
+
+ + + + + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
Extension Methods
+
+ + +
+ + + + + +

Constructors +

+ + + + +

+ ExternalImplementation(string, string, ImplementationVersion, Cpu) + +

+ +

Creates a new external implementation.

+
+
+ +
+
public ExternalImplementation(string distribution, string package, ImplementationVersion version, Cpu cpu = Cpu.All)
+
+ +

Parameters

+
+
distribution string
+

The name of the distribution (e.g. Debian, RPM) where this implementation comes from.

+
+
package string
+

The name of the package in the distribution.

+
+
version ImplementationVersion
+

The version number of the implementation.

+
+
cpu Cpu
+

For platform-specific binaries, the CPU architecture for which the implementation was compiled.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ PackagePrefix + +

+ +

This is prepended to ID for all ExternalImplementation.

+
+
+ +
+
public const string PackagePrefix = "package:"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + +

Remarks

+

Also used to mark regular Implementations that act as proxies for ExternalImplementations.

+
+ + + + +

Properties +

+ + + + +

+ Distribution + +

+ +

The name of the distribution (e.g. Debian, RPM) where this implementation comes from.

+
+
+ +
+
public string Distribution { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ IsInstalled + +

+ +

Indicates whether this implementation is currently installed.

+
+
+ +
+
public bool IsInstalled { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Package + +

+ +

The name of the package in the Distribution.

+
+
+ +
+
public string Package { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ QuickTestFile + +

+ +

A file which, if present, indicates that this implementation IsInstalled.

+
+
+ +
+
public string? QuickTestFile { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + +

Remarks

+

This makes it possible to avoid Lookup(ImplementationSelection) calls for better performance.

+
+ + +
+
See Also
+
+ +
+
+ + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ FromID(string) + +

+ +

Creates a new external implementation from an ID.

+
+
+ +
+
public static ExternalImplementation FromID(string id)
+
+ +

Parameters

+
+
id string
+

The ID to parse.

+
+
+ +

Returns

+
+
ExternalImplementation
+
+
+ + + + + + + + +

Exceptions

+
+
FormatException
+

id is not a standard ExternalImplementation ID.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the implementation in the form "Comma-separated list of set values". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ExternalImplementation?, ExternalImplementation?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ExternalImplementation? left, ExternalImplementation? right)
+
+ +

Parameters

+
+
left ExternalImplementation
+

The left object

+
+
right ExternalImplementation
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ExternalImplementation?, ExternalImplementation?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ExternalImplementation? left, ExternalImplementation? right)
+
+ +

Parameters

+
+
left ExternalImplementation
+

The left object

+
+
right ExternalImplementation
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Native.ExternalRetrievalMethod.html b/api/ZeroInstall.Services.Native.ExternalRetrievalMethod.html new file mode 100644 index 000000000..1c0b8ffdd --- /dev/null +++ b/api/ZeroInstall.Services.Native.ExternalRetrievalMethod.html @@ -0,0 +1,570 @@ + + + + + Class ExternalRetrievalMethod | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ExternalRetrievalMethod +

+ +
+
Namespace
ZeroInstall.Services.Native
+
Assembly
ZeroInstall.Services.dll
+
+ +

Retrieves an implementation by installing it via an external package manager rather than Zero Install itself.

+
+
+ +
+
[Equatable]
+public sealed class ExternalRetrievalMethod : RetrievalMethod, IEquatable<XmlUnknown>, IEquatable<FeedElement>, ICloneable<RetrievalMethod>, IEquatable<ExternalRetrievalMethod>
+
+ + + + +
+
Inheritance
+
+ + + + +
ExternalRetrievalMethod
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Properties +

+ + + + +

+ ConfirmationQuestion + +

+ +

A question the user shall be asked for confirmation before calling Install. null if no confirmation is required.

+
+
+ +
+
public string? ConfirmationQuestion { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Distro + +

+ +

The name of the distribution this package came from.

+
+
+ +
+
public string? Distro { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Install + +

+ +

A function to call to install this package.

+
+
+ +
+
public Action? Install { get; set; }
+
+ + + + + +

Property Value

+
+
Action
+
+
+ + + + + + + + + + +

+ PackageID + +

+ +

The package name, in a form recognised by the external package manager.

+
+
+ +
+
public string? PackageID { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Size + +

+ +

The download size in bytes.

+
+
+ +
+
public long Size { get; set; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this ExternalRetrievalMethod instance.

+
+
+ +
+
public override RetrievalMethod Clone()
+
+ + +

Returns

+
+
RetrievalMethod
+

The new copy of the ExternalRetrievalMethod.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(ExternalRetrievalMethod?, ExternalRetrievalMethod?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(ExternalRetrievalMethod? left, ExternalRetrievalMethod? right)
+
+ +

Parameters

+
+
left ExternalRetrievalMethod
+

The left object

+
+
right ExternalRetrievalMethod
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(ExternalRetrievalMethod?, ExternalRetrievalMethod?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(ExternalRetrievalMethod? left, ExternalRetrievalMethod? right)
+
+ +

Parameters

+
+
left ExternalRetrievalMethod
+

The left object

+
+
right ExternalRetrievalMethod
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + +

See Also

+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Native.IPackageManager.html b/api/ZeroInstall.Services.Native.IPackageManager.html new file mode 100644 index 000000000..f250f6b7e --- /dev/null +++ b/api/ZeroInstall.Services.Native.IPackageManager.html @@ -0,0 +1,238 @@ + + + + + Interface IPackageManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IPackageManager +

+ +
+
Namespace
ZeroInstall.Services.Native
+
Assembly
ZeroInstall.Services.dll
+
+ +

Handles packages provided by the operating system's native package managers rather than Zero Install itself.

+
+
+ +
+
public interface IPackageManager
+
+ + + + + + + + + + + +

Remarks

+

Implementations of this interface are immutable and thread-safe.

+
+ + +

Methods +

+ + + + +

+ Lookup(ImplementationSelection) + +

+ +

Looks up the specific ExternalImplementation an ImplementationSelection was based on.

+
+
+ +
+
ExternalImplementation? Lookup(ImplementationSelection selection)
+
+ +

Parameters

+
+
selection ImplementationSelection
+

The implementation selection to look up.

+
+
+ +

Returns

+
+
ExternalImplementation
+

The ExternalImplementation; null if selection does not refer to a package known to this package manager.

+
+
+ + + + + + + + + + + + + +

+ Query(PackageImplementation, params string[]) + +

+ +

Queries the package manager for all ExternalImplementations that match a specific PackageImplementation definition.

+
+
+ +
+
IEnumerable<ExternalImplementation> Query(PackageImplementation package, params string[] distributions)
+
+ +

Parameters

+
+
package PackageImplementation
+

The definition of the package to look for.

+
+
distributions string[]
+

Specifies the distributions to check for matching packages. Leave empty to check in all available distributions.

+
+
+ +

Returns

+
+
IEnumerable<ExternalImplementation>
+
+
+ + + + + + + + + + + +

See Also

+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Native.PackageManagerBase.html b/api/ZeroInstall.Services.Native.PackageManagerBase.html new file mode 100644 index 000000000..a17108c32 --- /dev/null +++ b/api/ZeroInstall.Services.Native.PackageManagerBase.html @@ -0,0 +1,350 @@ + + + + + Class PackageManagerBase | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PackageManagerBase +

+ +
+
Namespace
ZeroInstall.Services.Native
+
Assembly
ZeroInstall.Services.dll
+
+ +

Base class for IPackageManager implementations using template methods.

+
+
+ +
+
public abstract class PackageManagerBase : IPackageManager
+
+ + + + +
+
Inheritance
+
+ +
PackageManagerBase
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Properties +

+ + + + +

+ DistributionName + +

+ +

The name of the Distributions this package manager provides packages for.

+
+
+ +
+
protected abstract string DistributionName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ GetImplementations(string) + +

+ +

Retrieves a set of specific native implementations for a package name.

+
+
+ +
+
protected abstract IEnumerable<ExternalImplementation> GetImplementations(string packageName)
+
+ +

Parameters

+
+
packageName string
+

The name of the package to look for.

+
+
+ +

Returns

+
+
IEnumerable<ExternalImplementation>
+
+
+ + + + + + + + + + + + + +

+ Lookup(ImplementationSelection) + +

+ +

Looks up the specific ExternalImplementation an ImplementationSelection was based on.

+
+
+ +
+
public ExternalImplementation? Lookup(ImplementationSelection selection)
+
+ +

Parameters

+
+
selection ImplementationSelection
+

The implementation selection to look up.

+
+
+ +

Returns

+
+
ExternalImplementation
+

The ExternalImplementation; null if selection does not refer to a package known to this package manager.

+
+
+ + + + + + + + + + + + + +

+ Query(PackageImplementation, params string[]) + +

+ +

Queries the package manager for all ExternalImplementations that match a specific PackageImplementation definition.

+
+
+ +
+
public IEnumerable<ExternalImplementation> Query(PackageImplementation package, params string[] distributions)
+
+ +

Parameters

+
+
package PackageImplementation
+

The definition of the package to look for.

+
+
distributions string[]
+

Specifies the distributions to check for matching packages. Leave empty to check in all available distributions.

+
+
+ +

Returns

+
+
IEnumerable<ExternalImplementation>
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Native.PackageManagers.html b/api/ZeroInstall.Services.Native.PackageManagers.html new file mode 100644 index 000000000..0a47941f1 --- /dev/null +++ b/api/ZeroInstall.Services.Native.PackageManagers.html @@ -0,0 +1,213 @@ + + + + + Class PackageManagers | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PackageManagers +

+ +
+
Namespace
ZeroInstall.Services.Native
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides IPackageManager instances.

+
+
+ +
+
public static class PackageManagers
+
+ + + + +
+
Inheritance
+
+ +
PackageManagers
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Default() + +

+ +

Creates the default IPackageManager for the current platform.

+
+
+ +
+
public static IPackageManager Default()
+
+ + +

Returns

+
+
IPackageManager
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Native.WindowsPackageManager.html b/api/ZeroInstall.Services.Native.WindowsPackageManager.html new file mode 100644 index 000000000..ce5a7702c --- /dev/null +++ b/api/ZeroInstall.Services.Native.WindowsPackageManager.html @@ -0,0 +1,301 @@ + + + + + Class WindowsPackageManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class WindowsPackageManager +

+ +
+
Namespace
ZeroInstall.Services.Native
+
Assembly
ZeroInstall.Services.dll
+
+ +

Detects common Windows software packages (such as Java and .NET) that are installed natively.

+
+
+ +
+
public class WindowsPackageManager : PackageManagerBase, IPackageManager
+
+ + + + +
+
Inheritance
+
+ + +
WindowsPackageManager
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ WindowsPackageManager() + +

+ +
+
+ +
+
public WindowsPackageManager()
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ DistributionName + +

+ +

The name of the Distributions this package manager provides packages for.

+
+
+ +
+
protected override string DistributionName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ GetImplementations(string) + +

+ +

Retrieves a set of specific native implementations for a package name.

+
+
+ +
+
protected override IEnumerable<ExternalImplementation> GetImplementations(string packageName)
+
+ +

Parameters

+
+
packageName string
+

The name of the package to look for.

+
+
+ +

Returns

+
+
IEnumerable<ExternalImplementation>
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Native.html b/api/ZeroInstall.Services.Native.html new file mode 100644 index 000000000..c4bf6362f --- /dev/null +++ b/api/ZeroInstall.Services.Native.html @@ -0,0 +1,163 @@ + + + + + Namespace ZeroInstall.Services.Native | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Services.Native

+
+

Operating system specific services such as native package managers.

+
+
+
+ +

+Classes +

+
+
CompositePackageManager
+

Combines multiple IPackageManagers as a composite.

+
+
+
+
ExternalImplementation
+

An implementation provided by an external package manager.

+
+
+
+
ExternalRetrievalMethod
+

Retrieves an implementation by installing it via an external package manager rather than Zero Install itself.

+
+
+
+
PackageManagerBase
+

Base class for IPackageManager implementations using template methods.

+
+
+
+
PackageManagers
+

Provides IPackageManager instances.

+
+
+
+
WindowsPackageManager
+

Detects common Windows software packages (such as Java and .NET) that are installed natively.

+
+
+

+Interfaces +

+
+
IPackageManager
+

Handles packages provided by the operating system's native package managers rather than Zero Install itself.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.SelectionsManager.html b/api/ZeroInstall.Services.SelectionsManager.html new file mode 100644 index 000000000..f92825a84 --- /dev/null +++ b/api/ZeroInstall.Services.SelectionsManager.html @@ -0,0 +1,412 @@ + + + + + Class SelectionsManager | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SelectionsManager +

+ +
+
Namespace
ZeroInstall.Services
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides methods for filtering Selections.

+
+
+ +
+
public class SelectionsManager : ISelectionsManager
+
+ + + + +
+
Inheritance
+
+ +
SelectionsManager
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ SelectionsManager(IFeedManager, IImplementationStore, IPackageManager) + +

+ +

Provides methods for filtering Selections.

+
+
+ +
+
public SelectionsManager(IFeedManager feedManager, IImplementationStore implementationStore, IPackageManager packageManager)
+
+ +

Parameters

+
+
feedManager IFeedManager
+
+
implementationStore IImplementationStore
+
+
packageManager IPackageManager
+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ GetDiff(Selections, Selections) + +

+ +

Generates a list of differences between two selections.

+
+
+ +
+
public IEnumerable<SelectionsDiffNode> GetDiff(Selections oldSelections, Selections newSelections)
+
+ +

Parameters

+
+
oldSelections Selections
+

The old selections to base the comparison on.

+
+
newSelections Selections
+

The new selections to compare against.

+
+
+ +

Returns

+
+
IEnumerable<SelectionsDiffNode>
+
+
+ + + + + + + + + + + + + +

+ GetImplementations(IEnumerable<ImplementationSelection>) + +

+ +

Retrieves the original Implementations these selections were based on.

+
+
+ +
+
public IEnumerable<Implementation> GetImplementations(IEnumerable<ImplementationSelection> selections)
+
+ +

Parameters

+
+
selections IEnumerable<ImplementationSelection>
+

The ImplementationSelections to map back to Implementations.

+
+
+ +

Returns

+
+
IEnumerable<Implementation>
+
+
+ + + + + + + + + + + + + +

+ GetTree(Selections) + +

+ +

Generates a tree representation of the dependencies within the selections.

+
+
+ +
+
public NamedCollection<SelectionsTreeNode> GetTree(Selections selections)
+
+ +

Parameters

+
+
selections Selections
+
+
+ +

Returns

+
+
NamedCollection<SelectionsTreeNode>
+
+
+ + + + + + + + + + + + + +

+ GetUncached(IEnumerable<ImplementationSelection>) + +

+ +

Returns a list of any downloadable ImplementationSelections that are missing from an IImplementationStore.

+
+
+ +
+
public IEnumerable<ImplementationSelection> GetUncached(IEnumerable<ImplementationSelection> selections)
+
+ +

Parameters

+
+
selections IEnumerable<ImplementationSelection>
+

The selections to search for ImplementationSelections that are missing.

+
+
+ +

Returns

+
+
IEnumerable<ImplementationSelection>
+
+
+ + + + + + + +

Remarks

+

Feed files may be downloaded, no implementations are downloaded.

+
+ +

Exceptions

+
+
KeyNotFoundException
+

A Feed or Implementation is missing.

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Read access to the cache is not permitted.

+
+
InvalidDataException
+

The feed file could not be parsed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.SelectionsManagerExtensions.html b/api/ZeroInstall.Services.SelectionsManagerExtensions.html new file mode 100644 index 000000000..fa6b779f1 --- /dev/null +++ b/api/ZeroInstall.Services.SelectionsManagerExtensions.html @@ -0,0 +1,222 @@ + + + + + Class SelectionsManagerExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SelectionsManagerExtensions +

+ +
+
Namespace
ZeroInstall.Services
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides extension methods for ISelectionsManager.

+
+
+ +
+
public static class SelectionsManagerExtensions
+
+ + + + +
+
Inheritance
+
+ +
SelectionsManagerExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ GetUncachedImplementations(ISelectionsManager, Selections) + +

+ + +
+ +
+
public static List<Implementation> GetUncachedImplementations(this ISelectionsManager selectionsManager, Selections selections)
+
+ +

Parameters

+
+
selectionsManager ISelectionsManager
+

The ISelectionsManager.

+
+
selections Selections
+

The selections to search for ImplementationSelections that are missing.

+
+
+ +

Returns

+
+
List<Implementation>
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.ServiceCollectionExtensions.html b/api/ZeroInstall.Services.ServiceCollectionExtensions.html new file mode 100644 index 000000000..8111834a2 --- /dev/null +++ b/api/ZeroInstall.Services.ServiceCollectionExtensions.html @@ -0,0 +1,276 @@ + + + + + Class ServiceCollectionExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ServiceCollectionExtensions +

+ +
+
Namespace
ZeroInstall.Services
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides extension methods for IServiceCollection.

+
+
+ +
+
public static class ServiceCollectionExtensions
+
+ + + + +
+
Inheritance
+
+ +
ServiceCollectionExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ AddZeroInstall(IServiceCollection, IConfiguration?) + +

+ +

Registers a set of scoped services for using Zero Install functionality. +Automatically uses ILogger<TCategoryName> and ICredentialProvider if registered in services.

+
+
+ +
+
public static IServiceCollection AddZeroInstall(this IServiceCollection services, IConfiguration? configuration = null)
+
+ +

Parameters

+
+
services IServiceCollection
+

The service collection to add the services to.

+
+
configuration IConfiguration
+

An optional configuration source for building Config instead of the default config files.

+
+
+ +

Returns

+
+
IServiceCollection
+
+
+ + + + + + + + + +
+
See Also
+
+ +
+
+ + + + +

+ AddZeroInstall<TTaskHandler>(IServiceCollection, IConfiguration?) + +

+ +

Registers a set of scoped services for using Zero Install functionality.

+
+
+ +
+
public static IServiceCollection AddZeroInstall<TTaskHandler>(this IServiceCollection services, IConfiguration? configuration = null) where TTaskHandler : class, ITaskHandler
+
+ +

Parameters

+
+
services IServiceCollection
+

The service collection to add the services to.

+
+
configuration IConfiguration
+

An optional configuration source for building Config instead of the default config files.

+
+
+ +

Returns

+
+
IServiceCollection
+
+
+ +

Type Parameters

+
+
TTaskHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.ServiceProvider.html b/api/ZeroInstall.Services.ServiceProvider.html new file mode 100644 index 000000000..ebb522e70 --- /dev/null +++ b/api/ZeroInstall.Services.ServiceProvider.html @@ -0,0 +1,737 @@ + + + + + Class ServiceProvider | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ServiceProvider +

+ +
+
Namespace
ZeroInstall.Services
+
Assembly
ZeroInstall.Services.dll
+
+ +

Instantiates requested services transparently on first use. Handles dependency injection internally. +Use exactly one instance of the service provider per user request to ensure consistent state during execution.

+
+
+ +
+
public class ServiceProvider
+
+ + + + +
+
Inheritance
+
+ +
ServiceProvider
+
+
+ + +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + +
+ + + + +

Remarks

+

This class is thread-safe.

+
+ + +

Constructors +

+ + + + +

+ ServiceProvider(ITaskHandler) + +

+ +

Creates a new service provider.

+
+
+ +
+
public ServiceProvider(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file or one of the implementation stores.

+
+
UnauthorizedAccessException
+

Access to a configuration file or one of the implementation stores was not permitted.

+
+
+ + + +

Properties +

+ + + + +

+ CatalogManager + +

+ +

Provides access to remote and local Catalogs. Handles downloading, signature verification and caching.

+
+
+ +
+
public virtual ICatalogManager CatalogManager { get; }
+
+ + + + + +

Property Value

+
+
ICatalogManager
+
+
+ + + + + + + + + + +

+ Config + +

+ +

User settings controlling network behaviour, solving, etc.

+
+
+ +
+
public virtual Config Config { get; }
+
+ + + + + +

Property Value

+
+
Config
+
+
+ + + + + + + + + + +

+ Executor + +

+ +

Executes a Selections document as a program using dependency injection.

+
+
+ +
+
public virtual IExecutor Executor { get; }
+
+ + + + + +

Property Value

+
+
IExecutor
+
+
+ + + + + + + + + + +

+ FeedCache + +

+ +

Provides access to a cache of Feeds that were downloaded via HTTP(S).

+
+
+ +
+
public virtual IFeedCache FeedCache { get; }
+
+ + + + + +

Property Value

+
+
IFeedCache
+
+
+ + + + + + + + + + +

+ FeedManager + +

+ +

Allows configuration of the source used to request Feeds.

+
+
+ +
+
public virtual IFeedManager FeedManager { get; }
+
+ + + + + +

Property Value

+
+
IFeedManager
+
+
+ + + + + + + + + + +

+ Fetcher + +

+ +

Used to download missing Implementations.

+
+
+ +
+
public virtual IFetcher Fetcher { get; }
+
+ + + + + +

Property Value

+
+
IFetcher
+
+
+ + + + + + + + + + +

+ Handler + +

+ +

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ +
+
public ITaskHandler Handler { get; }
+
+ + + + + +

Property Value

+
+
ITaskHandler
+
+
+ + + + + + + + + + +

+ ImplementationStore + +

+ +

Describes an object that allows the storage and retrieval of Implementation directories.

+
+
+ +
+
public IImplementationStore ImplementationStore { get; set; }
+
+ + + + + +

Property Value

+
+
IImplementationStore
+
+
+ + + + + + + + + + +

+ OpenPgp + +

+ +

Provides access to an encryption/signature system compatible with the OpenPGP standard.

+
+
+ +
+
public virtual IOpenPgp OpenPgp { get; set; }
+
+ + + + + +

Property Value

+
+
IOpenPgp
+
+
+ + + + + + + + + + +

+ PackageManager + +

+ +

An external package manager that can install PackageImplementations.

+
+
+ +
+
public virtual IPackageManager PackageManager { get; }
+
+ + + + + +

Property Value

+
+
IPackageManager
+
+
+ + + + + + + + + + +

+ SelectionCandidateProvider + +

+ +

Generates SelectionCandidates for the Solver to choose among.

+
+
+ +
+
public virtual ISelectionCandidateProvider SelectionCandidateProvider { get; }
+
+ + + + + +

Property Value

+
+
ISelectionCandidateProvider
+
+
+ + + + + + + + + + +

+ SelectionsManager + +

+ +

Provides methods for filtering Selections.

+
+
+ +
+
public virtual ISelectionsManager SelectionsManager { get; }
+
+ + + + + +

Property Value

+
+
ISelectionsManager
+
+
+ + + + + + + + + + +

+ Solver + +

+ +

Chooses a set of Implementations to satisfy the requirements of a program and its user.

+
+
+ +
+
public virtual ISolver Solver { get; }
+
+ + + + + +

Property Value

+
+
ISolver
+
+
+ + + + + + + + + + +

+ TrustManager + +

+ +

Methods for verifying signatures and user trust.

+
+
+ +
+
public virtual ITrustManager TrustManager { get; }
+
+ + + + + +

Property Value

+
+
ITrustManager
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ TrySolveOffline(Requirements) + +

+ +

Tries to provide Selections that satisfy a set of Requirements without downloading any files.

+
+
+ +
+
public Selections? TrySolveOffline(Requirements requirements)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements to satisfy.

+
+
+ +

Returns

+
+
Selections
+

The selected ImplementationSelections or null if no solution was found.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ArgumentException
+

requirements is incomplete.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.BacktrackingSolver.html b/api/ZeroInstall.Services.Solvers.BacktrackingSolver.html new file mode 100644 index 000000000..6b0fb1a16 --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.BacktrackingSolver.html @@ -0,0 +1,302 @@ + + + + + Class BacktrackingSolver | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class BacktrackingSolver +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Uses limited backtracking to solve Requirements. Does not find all possible solutions!

+
+
+ +
+
public class BacktrackingSolver : ISolver
+
+ + + + +
+
Inheritance
+
+ +
BacktrackingSolver
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ BacktrackingSolver(ISelectionCandidateProvider) + +

+ +

Uses limited backtracking to solve Requirements. Does not find all possible solutions!

+
+
+ +
+
public BacktrackingSolver(ISelectionCandidateProvider candidateProvider)
+
+ +

Parameters

+
+
candidateProvider ISelectionCandidateProvider
+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Solve(Requirements) + +

+ +

Provides Selections that satisfy a set of Requirements.

+
+
+ +
+
public Selections Solve(Requirements requirements)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements to satisfy.

+
+
+ +

Returns

+
+
Selections
+

The selected ImplementationSelections.

+
+
+ + + + + + + +

Remarks

+

Feed files may be downloaded, signature validation is performed, implementations are not downloaded.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ArgumentException
+

requirements is incomplete.

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
WebException
+

A problem occurred while fetching the feed file.

+
+
UnauthorizedAccessException
+

Access to the cache is not permitted.

+
+
SignatureException
+

The signature data of a remote feed file could not be verified.

+
+
SolverException
+

The solver was unable to provide Selections that fulfill the requirements.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.ExternalSolver.html b/api/ZeroInstall.Services.Solvers.ExternalSolver.html new file mode 100644 index 000000000..724bed794 --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.ExternalSolver.html @@ -0,0 +1,316 @@ + + + + + Class ExternalSolver | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ExternalSolver +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Uses an external process to solve Requirements. +The executable for external process is itself provided by another ISolver.

+
+
+ +
+
public class ExternalSolver : ISolver
+
+ + + + +
+
Inheritance
+
+ +
ExternalSolver
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ ExternalSolver(ISolver, ISelectionsManager, IFetcher, IExecutor, IFeedManager, ITaskHandler, Requirements) + +

+ +

Uses an external process to solve Requirements. +The executable for external process is itself provided by another ISolver.

+
+
+ +
+
public ExternalSolver(ISolver backingSolver, ISelectionsManager selectionsManager, IFetcher fetcher, IExecutor executor, IFeedManager feedManager, ITaskHandler handler, Requirements solverRequirements)
+
+ +

Parameters

+
+
backingSolver ISolver
+
+
selectionsManager ISelectionsManager
+
+
fetcher IFetcher
+
+
executor IExecutor
+
+
feedManager IFeedManager
+
+
handler ITaskHandler
+
+
solverRequirements Requirements
+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Solve(Requirements) + +

+ +

Provides Selections that satisfy a set of Requirements.

+
+
+ +
+
public Selections Solve(Requirements requirements)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements to satisfy.

+
+
+ +

Returns

+
+
Selections
+

The selected ImplementationSelections.

+
+
+ + + + + + + +

Remarks

+

Feed files may be downloaded, signature validation is performed, implementations are not downloaded.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ArgumentException
+

requirements is incomplete.

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
WebException
+

A problem occurred while fetching the feed file.

+
+
UnauthorizedAccessException
+

Access to the cache is not permitted.

+
+
SignatureException
+

The signature data of a remote feed file could not be verified.

+
+
SolverException
+

The solver was unable to provide Selections that fulfill the requirements.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.FallbackSolver.html b/api/ZeroInstall.Services.Solvers.FallbackSolver.html new file mode 100644 index 000000000..53351e240 --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.FallbackSolver.html @@ -0,0 +1,303 @@ + + + + + Class FallbackSolver | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FallbackSolver +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Wraps two solvers always passing requests to the primary one initially and falling back to secondary one should the primary one fail.

+
+
+ +
+
public sealed class FallbackSolver : ISolver
+
+ + + + +
+
Inheritance
+
+ +
FallbackSolver
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ FallbackSolver(ISolver, ISolver) + +

+ +

Wraps two solvers always passing requests to the primary one initially and falling back to secondary one should the primary one fail.

+
+
+ +
+
public FallbackSolver(ISolver primarySolver, ISolver secondarySolver)
+
+ +

Parameters

+
+
primarySolver ISolver
+

The solver to run initially.

+
+
secondarySolver ISolver
+

he solver to fall back to should primarySolver fail.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Solve(Requirements) + +

+ +

Provides Selections that satisfy a set of Requirements.

+
+
+ +
+
public Selections Solve(Requirements requirements)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements to satisfy.

+
+
+ +

Returns

+
+
Selections
+

The selected ImplementationSelections.

+
+
+ + + + + + + +

Remarks

+

Feed files may be downloaded, signature validation is performed, implementations are not downloaded.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ArgumentException
+

requirements is incomplete.

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
WebException
+

A problem occurred while fetching the feed file.

+
+
UnauthorizedAccessException
+

Access to the cache is not permitted.

+
+
SignatureException
+

The signature data of a remote feed file could not be verified.

+
+
SolverException
+

The solver was unable to provide Selections that fulfill the requirements.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.ISelectionCandidateProvider.html b/api/ZeroInstall.Services.Solvers.ISelectionCandidateProvider.html new file mode 100644 index 000000000..23c726424 --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.ISelectionCandidateProvider.html @@ -0,0 +1,295 @@ + + + + + Interface ISelectionCandidateProvider | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface ISelectionCandidateProvider +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Generates SelectionCandidates for ISolvers to choose among.

+
+
+ +
+
public interface ISelectionCandidateProvider
+
+ + + + + + + + + + + +

Remarks

+

Implementations of this interface may perform in-memory caching and are thread-safe.

+
+ + +

Properties +

+ + + + +

+ FailedFeeds + +

+ +

A list of feeds that could not be downloaded along with the exceptions describing the problems.

+
+
+ +
+
IReadOnlyDictionary<FeedUri, Exception> FailedFeeds { get; }
+
+ + + + + +

Property Value

+
+
IReadOnlyDictionary<FeedUri, Exception>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clear() + +

+ +

Clears any in-memory caches.

+
+
+ +
+
void Clear()
+
+ + + + + + + + + + + + + + + +

+ GetSortedCandidates(Requirements) + +

+ +

Gets all SelectionCandidates for a specific set of Requirements sorted from best to worst.

+
+
+ +
+
IReadOnlyList<SelectionCandidate> GetSortedCandidates(Requirements requirements)
+
+ +

Parameters

+
+
requirements Requirements
+
+
+ +

Returns

+
+
IReadOnlyList<SelectionCandidate>
+
+
+ + + + + + + + + + + + + +

+ LookupOriginalImplementation(ImplementationSelection) + +

+ +

Retrieves the original Implementation an ImplementationSelection was based ofF.

+
+
+ +
+
Implementation LookupOriginalImplementation(ImplementationSelection implementationSelection)
+
+ +

Parameters

+
+
implementationSelection ImplementationSelection
+
+
+ +

Returns

+
+
Implementation
+
+
+ + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

The implementationSelection was not provided by GetSortedCandidates(Requirements).

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.ISolver.html b/api/ZeroInstall.Services.Solvers.ISolver.html new file mode 100644 index 000000000..8f8ec220a --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.ISolver.html @@ -0,0 +1,225 @@ + + + + + Interface ISolver | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface ISolver +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Chooses a set of Implementations to satisfy the requirements of a program and its user.

+
+
+ +
+
public interface ISolver
+
+ + + + + + + + +
+
Extension Methods
+
+ +
+ + + +

Remarks

+

Implementations of this interface are immutable and thread-safe.

+
+ + +

Methods +

+ + + + +

+ Solve(Requirements) + +

+ +

Provides Selections that satisfy a set of Requirements.

+
+
+ +
+
Selections Solve(Requirements requirements)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements to satisfy.

+
+
+ +

Returns

+
+
Selections
+

The selected ImplementationSelections.

+
+
+ + + + + + + +

Remarks

+

Feed files may be downloaded, signature validation is performed, implementations are not downloaded.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ArgumentException
+

requirements is incomplete.

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
WebException
+

A problem occurred while fetching the feed file.

+
+
UnauthorizedAccessException
+

Access to the cache is not permitted.

+
+
SignatureException
+

The signature data of a remote feed file could not be verified.

+
+
SolverException
+

The solver was unable to provide Selections that fulfill the requirements.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.SelectionCandidateComparer.html b/api/ZeroInstall.Services.Solvers.SelectionCandidateComparer.html new file mode 100644 index 000000000..6dcd172e6 --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.SelectionCandidateComparer.html @@ -0,0 +1,273 @@ + + + + + Class SelectionCandidateComparer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SelectionCandidateComparer +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ + +
+ +
+
public sealed class SelectionCandidateComparer : IComparer<SelectionCandidate>
+
+ + + + +
+
Inheritance
+
+ +
SelectionCandidateComparer
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ SelectionCandidateComparer(Stability, NetworkLevel, LanguageSet, Predicate<Implementation>) + +

+ + +
+ +
+
public SelectionCandidateComparer(Stability stabilityPolicy, NetworkLevel networkUse, LanguageSet languages, Predicate<Implementation> isCached)
+
+ +

Parameters

+
+
stabilityPolicy Stability
+

Implementations at this stability level or higher are preferred. Lower levels are used only if there is no other choice.

+
+
networkUse NetworkLevel
+

Controls how liberally network access is attempted.

+
+
languages LanguageSet
+

The preferred languages for the implementation.

+
+
isCached Predicate<Implementation>
+

sed to determine which implementations are already cached in the IImplementationStore.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ Compare(SelectionCandidate?, SelectionCandidate?) + +

+ +

Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.

+
+
+ +
+
public int Compare(SelectionCandidate? x, SelectionCandidate? y)
+
+ +

Parameters

+
+
x SelectionCandidate
+

The first object to compare.

+
+
y SelectionCandidate
+

The second object to compare.

+
+
+ +

Returns

+
+
int
+

A signed integer that indicates the relative values of x and y, as shown in the following table.

+
Value Meaning
Less than zerox is less than y.
Zerox equals y.
Greater than zerox is greater than y.
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.SelectionCandidateProvider.html b/api/ZeroInstall.Services.Solvers.SelectionCandidateProvider.html new file mode 100644 index 000000000..c9a4a536c --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.SelectionCandidateProvider.html @@ -0,0 +1,379 @@ + + + + + Class SelectionCandidateProvider | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SelectionCandidateProvider +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Generates SelectionCandidates for ISolvers to choose among.

+
+
+ +
+
public class SelectionCandidateProvider : ISelectionCandidateProvider
+
+ + + + +
+
Inheritance
+
+ +
SelectionCandidateProvider
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ + + + +

Remarks

+

This class performs in-memory caching of InterfacePreferencess and implementations and is thread-safe.

+
+ + +

Constructors +

+ + + + +

+ SelectionCandidateProvider(Config, IFeedManager, IImplementationStore, IPackageManager) + +

+ +

Creates a new SelectionCandidate provider.

+
+
+ +
+
public SelectionCandidateProvider(Config config, IFeedManager feedManager, IImplementationStore implementationStore, IPackageManager packageManager)
+
+ +

Parameters

+
+
config Config
+

User settings controlling network behaviour, solving, etc.

+
+
feedManager IFeedManager
+

Provides access to remote and local Feeds. Handles downloading, signature verification and caching.

+
+
implementationStore IImplementationStore
+

Used to check which Implementations are already cached.

+
+
packageManager IPackageManager
+

An external package manager that can install PackageImplementations.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ FailedFeeds + +

+ +

A list of feeds that could not be downloaded along with the exceptions describing the problems.

+
+
+ +
+
public IReadOnlyDictionary<FeedUri, Exception> FailedFeeds { get; }
+
+ + + + + +

Property Value

+
+
IReadOnlyDictionary<FeedUri, Exception>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clear() + +

+ +

Clears any in-memory caches.

+
+
+ +
+
public void Clear()
+
+ + + + + + + + + + + + + + + +

+ GetSortedCandidates(Requirements) + +

+ +

Gets all SelectionCandidates for a specific set of Requirements sorted from best to worst.

+
+
+ +
+
public IReadOnlyList<SelectionCandidate> GetSortedCandidates(Requirements requirements)
+
+ +

Parameters

+
+
requirements Requirements
+
+
+ +

Returns

+
+
IReadOnlyList<SelectionCandidate>
+
+
+ + + + + + + + + + + + + +

+ LookupOriginalImplementation(ImplementationSelection) + +

+ +

Retrieves the original Implementation an ImplementationSelection was based ofF.

+
+
+ +
+
public Implementation LookupOriginalImplementation(ImplementationSelection implementationSelection)
+
+ +

Parameters

+
+
implementationSelection ImplementationSelection
+
+
+ +

Returns

+
+
Implementation
+
+
+ + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

The implementationSelection was not provided by GetSortedCandidates(Requirements).

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.SolverDemand.html b/api/ZeroInstall.Services.Solvers.SolverDemand.html new file mode 100644 index 000000000..7f56b2cad --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.SolverDemand.html @@ -0,0 +1,396 @@ + + + + + Class SolverDemand | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SolverDemand +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ +

A demand used by ISolvers internally. Wrapper for Requirements that holds SelectionCandidates.

+
+
+ +
+
public sealed record SolverDemand : IEquatable<SolverDemand>
+
+ + + + +
+
Inheritance
+
+ +
SolverDemand
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ SolverDemand(Requirements, ISelectionCandidateProvider, Importance) + +

+ +

A demand used by ISolvers internally. Wrapper for Requirements that holds SelectionCandidates.

+
+
+ +
+
public SolverDemand(Requirements Requirements, ISelectionCandidateProvider CandidateProvider, Importance Importance = Importance.Essential)
+
+ +

Parameters

+
+
Requirements Requirements
+

The requirements.

+
+
CandidateProvider ISelectionCandidateProvider
+

Generates SelectionCandidates for the Requirements.

+
+
Importance Importance
+

Describes how important the demand is (i.e. whether ignoring it is an option).

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ CandidateProvider + +

+ +

Generates SelectionCandidates for the Requirements.

+
+
+ +
+
public ISelectionCandidateProvider CandidateProvider { get; init; }
+
+ + + + + +

Property Value

+
+
ISelectionCandidateProvider
+
+
+ + + + + + + + + + +

+ Candidates + +

+ +

All candidates for the Requirements, including those that are not suitable.

+
+
+ +
+
public IReadOnlyList<SelectionCandidate> Candidates { get; }
+
+ + + + + +

Property Value

+
+
IReadOnlyList<SelectionCandidate>
+
+
+ + + + + + + + + + +

+ Importance + +

+ +

Describes how important the demand is (i.e. whether ignoring it is an option).

+
+
+ +
+
public Importance Importance { get; init; }
+
+ + + + + +

Property Value

+
+
Importance
+
+
+ + + + + + + + + + +

+ Requirements + +

+ +

The requirements.

+
+
+ +
+
public Requirements Requirements { get; init; }
+
+ + + + + +

Property Value

+
+
Requirements
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ CandidatesCompatibleWith(Selections) + +

+ +

Gets all SelectionCandidates that are compatible with the specified selections.

+
+
+ +
+
public IEnumerable<SelectionCandidate> CandidatesCompatibleWith(Selections selections)
+
+ +

Parameters

+
+
selections Selections
+
+
+ +

Returns

+
+
IEnumerable<SelectionCandidate>
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.SolverException.html b/api/ZeroInstall.Services.Solvers.SolverException.html new file mode 100644 index 000000000..6c9e26914 --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.SolverException.html @@ -0,0 +1,305 @@ + + + + + Class SolverException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SolverException +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Indicates the ISolver was unable to provide Selections that fulfill the Requirements.

+
+
+ +
+
public sealed class SolverException : Exception, ISerializable
+
+ + + + +
+
Inheritance
+
+ + +
SolverException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ SolverException() + +

+ +

Indicates that the ISolver encountered an unknown problem.

+
+
+ +
+
public SolverException()
+
+ + + + + + + + + + + + + + + +

+ SolverException(string) + +

+ +

Indicates that the ISolver encountered a specific problem.

+
+
+ +
+
public SolverException(string message)
+
+ +

Parameters

+
+
message string
+
+
+ + + + + + + + + + + + + + +

+ SolverException(string, Exception) + +

+ +

Indicates that there was a problem parsing the ISolver's output.

+
+
+ +
+
public SolverException(string message, Exception innerException)
+
+ +

Parameters

+
+
message string
+
+
innerException Exception
+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.SolverExtensions.html b/api/ZeroInstall.Services.Solvers.SolverExtensions.html new file mode 100644 index 000000000..f8ee04662 --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.SolverExtensions.html @@ -0,0 +1,235 @@ + + + + + Class SolverExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SolverExtensions +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides extension methods for ISolver.

+
+
+ +
+
public static class SolverExtensions
+
+ + + + +
+
Inheritance
+
+ +
SolverExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ TrySolve(ISolver, Requirements) + +

+ +

Provides Selections that satisfy a set of Requirements. Catches most exceptions and Logs them.

+
+
+ +
+
public static Selections? TrySolve(this ISolver solver, Requirements requirements)
+
+ +

Parameters

+
+
solver ISolver
+

The ISolver implementation.

+
+
requirements Requirements
+

A set of requirements/restrictions imposed by the user on the implementation selection process.

+
+
+ +

Returns

+
+
Selections
+

The ImplementationSelections chosen for the feed; null if there was a problem.

+
+
+ + + + + + + +

Remarks

+

Feed files may be downloaded, signature validation is performed, implementations are not downloaded.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ArgumentException
+

requirements is incomplete.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.SolverRunBase.html b/api/ZeroInstall.Services.Solvers.SolverRunBase.html new file mode 100644 index 000000000..68479d643 --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.SolverRunBase.html @@ -0,0 +1,453 @@ + + + + + Class SolverRunBase | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SolverRunBase +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Common base class for representing a single run of a solver.

+
+
+ +
+
public abstract class SolverRunBase
+
+ + + + +
+
Inheritance
+
+ +
SolverRunBase
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + +

Remarks

+

This is intended to be used by private classes within ISolver implementations to hold state during a run of Solve(Requirements).

+
+ + +

Constructors +

+ + + + +

+ SolverRunBase(Requirements, ISelectionCandidateProvider) + +

+ +

Common base class for representing a single run of a solver.

+
+
+ +
+
protected SolverRunBase(Requirements requirements, ISelectionCandidateProvider candidateProvider)
+
+ +

Parameters

+
+
requirements Requirements
+

The requirements to satisfy.

+
+
candidateProvider ISelectionCandidateProvider
+

Generates SelectionCandidates for the solver to choose from.

+
+
+ + + + + + + + +

Remarks

+

This is intended to be used by private classes within ISolver implementations to hold state during a run of Solve(Requirements).

+
+ + + + +

Fields +

+ + + +

+ CandidateProvider + +

+ +

Generates SelectionCandidates for the solver to choose from.

+
+
+ +
+
protected readonly ISelectionCandidateProvider CandidateProvider
+
+ + + + +

Field Value

+
+
ISelectionCandidateProvider
+
+
+ + + + + + + + + + +

+ Selections + +

+ +

Used to iteratively construct the selections to be returned.

+
+
+ +
+
protected Selections Selections
+
+ + + + +

Field Value

+
+
Selections
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ DemandsFor(Command, FeedUri) + +

+ +

Generates SolverDemands for the dependencies specified by a Command.

+
+
+ +
+
protected IEnumerable<SolverDemand> DemandsFor(Command command, FeedUri interfaceUri)
+
+ +

Parameters

+
+
command Command
+

The command to scan for dependencies.

+
+
interfaceUri FeedUri
+

The interface URI of the feed providing the command.

+
+
+ +

Returns

+
+
IEnumerable<SolverDemand>
+
+
+ + + + + + + + + + + + + +

+ DemandsFor(ImplementationSelection, Requirements) + +

+ +

Generates SolverDemands for the dependencies specified by an ImplementationSelection.

+
+
+ +
+
protected IEnumerable<SolverDemand> DemandsFor(ImplementationSelection selection, Requirements requirements)
+
+ +

Parameters

+
+
selection ImplementationSelection
+

The selection to scan for dependencies.

+
+
requirements Requirements
+

Requirements to inherit into the demands.

+
+
+ +

Returns

+
+
IEnumerable<SolverDemand>
+
+
+ + + + + + + + + + + + + +

+ Solve() + +

+ +

Provides Selections that satisfy the specified Requirements.

+
+
+ +
+
public Selections Solve()
+
+ + +

Returns

+
+
Selections
+

The selected ImplementationSelections.

+
+
+ + + + + + + + +

Exceptions

+
+
SolverException
+

The solver was unable to provide Selections that fulfill the Requirements.

+
+
+ + + + + +

+ TryFulfill(SolverDemand) + +

+ +

Tries to fulfill the specified solver demand. Adds the result to Selections if successful.

+
+
+ +
+
protected abstract bool TryFulfill(SolverDemand demand)
+
+ +

Parameters

+
+
demand SolverDemand
+

The demand to fulfill.

+
+
+ +

Returns

+
+
bool
+

true if the demand could be met, false if not.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.SolverUtils.html b/api/ZeroInstall.Services.Solvers.SolverUtils.html new file mode 100644 index 000000000..73dd4156b --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.SolverUtils.html @@ -0,0 +1,488 @@ + + + + + Class SolverUtils | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SolverUtils +

+ +
+
Namespace
ZeroInstall.Services.Solvers
+
Assembly
ZeroInstall.Services.dll
+
+ +

Helper functions for ISolver implementations.

+
+
+ +
+
public static class SolverUtils
+
+ + + + +
+
Inheritance
+
+ +
SolverUtils
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ AddCommand(ImplementationSelection, Requirements, Implementation) + +

+ +

Adds a Command specified in an Implementation to a ImplementationSelection.

+
+
+ +
+
public static Command? AddCommand(this ImplementationSelection selection, Requirements requirements, Implementation from)
+
+ +

Parameters

+
+
selection ImplementationSelection
+

The ImplementationSelection to add the Command to.

+
+
requirements Requirements
+

The requirements specifying which Command to extract.

+
+
from Implementation
+

The Implementation to get the Command from.

+
+
+ +

Returns

+
+
Command
+

The Command that was added to selection; null if none.

+
+
+ + + + + + + + + + + + + +

+ AddDependencies(IDependencyContainer, Requirements, IDependencyContainer) + +

+ +

Transfers Dependencys from one IDependencyContainer to another.

+
+
+ +
+
public static void AddDependencies(this IDependencyContainer target, Requirements requirements, IDependencyContainer from)
+
+ +

Parameters

+
+
target IDependencyContainer
+

The IDependencyContainer to add the Dependencys to.

+
+
requirements Requirements
+

The requirements which restrict which Dependencys are applicable.

+
+
from IDependencyContainer
+

The IDependencyContainer to get the Dependencys to.

+
+
+ + + + + + + + + + + + + + +

+ AddRestriction(Requirements, Restriction) + +

+ +

Adds the version restriction from source to the requirements.

+
+
+ +
+
public static void AddRestriction(this Requirements requirements, Restriction source)
+
+ +

Parameters

+
+
requirements Requirements
+
+
source Restriction
+
+
+ + + + + + + + + + + + + + +

+ AddRestrictions(Requirements, Requirements) + +

+ +

Adds the version restrictions from source to the requirements.

+
+
+ +
+
public static void AddRestrictions(this Requirements requirements, Requirements source)
+
+ +

Parameters

+
+
requirements Requirements
+
+
source Requirements
+
+
+ + + + + + + + + + + + + + +

+ BucketizeImportance(IEnumerable<SolverDemand>) + +

+ +

Separates solver demands into buckets by importance.

+
+
+ +
+
public static (List<SolverDemand> essential, List<SolverDemand> recommended) BucketizeImportance(this IEnumerable<SolverDemand> demands)
+
+ +

Parameters

+
+
demands IEnumerable<SolverDemand>
+
+
+ +

Returns

+
+
(List<SolverDemand> essential, List<SolverDemand> recommended)
+
+
+ + + + + + + + + + + + + +

+ PurgeRestrictions(Selections) + +

+ +

Removes all Restrictions from Selections.

+
+
+ +
+
public static void PurgeRestrictions(this Selections selections)
+
+ +

Parameters

+
+
selections Selections
+
+
+ + + + + + + + + + + + + + +

+ ToSelection(SelectionCandidate, Requirements, IReadOnlyList<SelectionCandidate>) + +

+ + +
+ +
+
public static ImplementationSelection ToSelection(this SelectionCandidate candidate, Requirements requirements, IReadOnlyList<SelectionCandidate> allCandidates)
+
+ +

Parameters

+
+
candidate SelectionCandidate
+

The selection candidate.

+
+
requirements Requirements
+

The requirements the candidate was chosen for.

+
+
allCandidates IReadOnlyList<SelectionCandidate>
+

All candidates that were considered for selection (including candidate). These are used to present the user with possible alternatives.

+
+
+ +

Returns

+
+
ImplementationSelection
+
+
+ + + + + + + + + + + + + +

+ ToSelections(IEnumerable<SelectionCandidate>, SolverDemand) + +

+ + +
+ +
+
[LinqTunnel]
+public static IEnumerable<ImplementationSelection> ToSelections(this IEnumerable<SelectionCandidate> candidates, SolverDemand demand)
+
+ +

Parameters

+
+
candidates IEnumerable<SelectionCandidate>
+

The selection candidates.

+
+
demand SolverDemand
+

The solver demand the candidates were chosen for.

+
+
+ +

Returns

+
+
IEnumerable<ImplementationSelection>
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.Solvers.html b/api/ZeroInstall.Services.Solvers.html new file mode 100644 index 000000000..b38532f64 --- /dev/null +++ b/api/ZeroInstall.Services.Solvers.html @@ -0,0 +1,189 @@ + + + + + Namespace ZeroInstall.Services.Solvers | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Services.Solvers

+
+

Solves requirements by selecting a specific combination of implementations from feeds.

+
+
+
+ +

+Classes +

+
+
BacktrackingSolver
+

Uses limited backtracking to solve Requirements. Does not find all possible solutions!

+
+
+
+
ExternalSolver
+

Uses an external process to solve Requirements. +The executable for external process is itself provided by another ISolver.

+
+
+
+
FallbackSolver
+

Wraps two solvers always passing requests to the primary one initially and falling back to secondary one should the primary one fail.

+
+
+
+
SelectionCandidateComparer
+

Ranks SelectionCandidates.

+
+
+
+
SelectionCandidateProvider
+

Generates SelectionCandidates for ISolvers to choose among.

+
+
+
+
SolverDemand
+

A demand used by ISolvers internally. Wrapper for Requirements that holds SelectionCandidates.

+
+
+
+
SolverException
+

Indicates the ISolver was unable to provide Selections that fulfill the Requirements.

+
+
+
+
SolverExtensions
+

Provides extension methods for ISolver.

+
+
+
+
SolverRunBase
+

Common base class for representing a single run of a solver.

+
+
+
+
SolverUtils
+

Helper functions for ISolver implementations.

+
+
+

+Interfaces +

+
+
ISelectionCandidateProvider
+

Generates SelectionCandidates for ISolvers to choose among.

+
+
+
+
ISolver
+

Chooses a set of Implementations to satisfy the requirements of a program and its user.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.WebExceptionExtensions.html b/api/ZeroInstall.Services.WebExceptionExtensions.html new file mode 100644 index 000000000..a41b98b5a --- /dev/null +++ b/api/ZeroInstall.Services.WebExceptionExtensions.html @@ -0,0 +1,220 @@ + + + + + Class WebExceptionExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class WebExceptionExtensions +

+ +
+
Namespace
ZeroInstall.Services
+
Assembly
ZeroInstall.Services.dll
+
+ +

Provides extension methods for WebExceptions.

+
+
+ +
+
public static class WebExceptionExtensions
+
+ + + + +
+
Inheritance
+
+ +
WebExceptionExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ ShouldTryMirror(WebException, Uri) + +

+ +

Determines a download from a specific uri that failed with an exception is should be retried using a mirror location.

+
+
+ +
+
public static bool ShouldTryMirror(this WebException exception, Uri uri)
+
+ +

Parameters

+
+
exception WebException
+
+
uri Uri
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Services.html b/api/ZeroInstall.Services.html new file mode 100644 index 000000000..f35bf9079 --- /dev/null +++ b/api/ZeroInstall.Services.html @@ -0,0 +1,193 @@ + + + + + Namespace ZeroInstall.Services | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Services

+
+

Services for solving dependencies, downloading implementations, executing apps, etc..

+

NuGet package: ZeroInstall.Services

+
+
+
+ +

+Namespaces +

+
+
ZeroInstall.Services.Executors
+
+

Launches implementations and injects the selected dependencies.

+
+
+
+
ZeroInstall.Services.Feeds
+
+

Downloading and verifying feeds.

+
+
+
+
ZeroInstall.Services.Fetchers
+
+

Downloads and extracts implementations.

+
+
+
+
ZeroInstall.Services.Native
+
+

Operating system specific services such as native package managers.

+
+
+
+
ZeroInstall.Services.Solvers
+
+

Solves requirements by selecting a specific combination of implementations from feeds.

+
+
+

+Classes +

+
+
SelectionsManager
+

Provides methods for filtering Selections.

+
+
+
+
SelectionsManagerExtensions
+

Provides extension methods for ISelectionsManager.

+
+
+
+
ServiceCollectionExtensions
+

Provides extension methods for IServiceCollection.

+
+
+
+
ServiceProvider
+

Instantiates requested services transparently on first use. Handles dependency injection internally. +Use exactly one instance of the service provider per user request to ensure consistent state during execution.

+
+
+
+
WebExceptionExtensions
+

Provides extension methods for WebExceptions.

+
+
+

+Interfaces +

+
+
ISelectionsManager
+

Provides methods for filtering Selections.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Configuration.Config.html b/api/ZeroInstall.Store.Configuration.Config.html new file mode 100644 index 000000000..dc679ff22 --- /dev/null +++ b/api/ZeroInstall.Store.Configuration.Config.html @@ -0,0 +1,1721 @@ + + + + + Class Config | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Config +

+ +
+
Namespace
ZeroInstall.Store.Configuration
+
Assembly
ZeroInstall.Store.dll
+
+ +

User settings controlling network behaviour, solving, etc..

+
+
+ +
+
[Serializable]
+public sealed class Config : IEnumerable<KeyValuePair<string, string>>, IEnumerable, ICloneable<Config>, IEquatable<Config>
+
+ + + + +
+
Inheritance
+
+ +
Config
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Config() + +

+ +

Creates a new configuration with default values set.

+
+
+ +
+
public Config()
+
+ + + + + + + + + + + + + +

Fields +

+ + + +

+ DefaultExternalSolverUri + +

+ +

The default value for ExternalSolverUri.

+
+
+ +
+
public const string DefaultExternalSolverUri = "https://apps.0install.net/0install/0install-ocaml.xml"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ DefaultFeedMirror + +

+ +

The default value for FeedMirror.

+
+
+ +
+
public const string DefaultFeedMirror = "https://roscidus.com/0mirror"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ DefaultKeyInfoServer + +

+ +

The default value for KeyInfoServer.

+
+
+ +
+
public const string DefaultKeyInfoServer = "https://keylookup.0install.net/"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ DefaultMaxParallelDownloads + +

+ +

The default value for MaxParallelDownloads.

+
+
+ +
+
public const int DefaultMaxParallelDownloads = 4
+
+ + + + +

Field Value

+
+
int
+
+
+ + + + + + + + + + +

+ DefaultSelfUpdateUri + +

+ +

The default value for SelfUpdateUri.

+
+
+ +
+
public const string DefaultSelfUpdateUri = "https://apps.0install.net/0install/0install-dotnet.xml"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ DefaultSyncServer + +

+ +

The default value for SyncServer.

+
+
+ +
+
public const string DefaultSyncServer = "https://0install.de/sync/"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ AutoApproveKeys + +

+ +

Automatically approve keys known by the KeyInfoServer and seen the first time a feed is fetched.

+
+
+ +
+
public bool AutoApproveKeys { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ EffectiveNetworkUse + +

+ +

Same as NetworkUse, except when there the internet connection is metered (capped at Minimal) or unavailable (capped at Offline).

+
+
+ +
+
[Browsable(false)]
+public NetworkLevel EffectiveNetworkUse { get; }
+
+ + + + + +

Property Value

+
+
NetworkLevel
+
+
+ + + + + + + + + + +

+ ExternalSolverUri + +

+ +

The feed URI used to get the external solver. Set to empty to deactivate use of external solver.

+
+
+ +
+
public FeedUri? ExternalSolverUri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ FeedMirror + +

+ +

The mirror server used to provide feeds when the original server is unavailable. Set to empty to deactivate use of feed mirror.

+
+
+ +
+
public FeedUri? FeedMirror { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ Freshness + +

+ +

The maximum age a cached Feed may have until it is considered stale (needs to be updated).

+
+
+ +
+
public TimeSpan Freshness { get; set; }
+
+ + + + + +

Property Value

+
+
TimeSpan
+
+
+ + + + + + + + + + +

+ HelpWithTesting + +

+ +

Always prefer the newest versions, even if they have not been marked as Stable yet.

+
+
+ +
+
public bool HelpWithTesting { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ InitialTab + +

+ +

The initial tab to show in GUI representations.

+
+
+ +
+
[Browsable(false)]
+public ConfigTab InitialTab { get; set; }
+
+ + + + + +

Property Value

+
+
ConfigTab
+
+
+ + + + + + + + + + +

+ IsSyncConfigured + +

+ +

Indicates whether the sync-related configuration is complete.

+
+
+ +
+
[Browsable(false)]
+public bool IsSyncConfigured { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ KeyInfoServer + +

+ +

The key information server used to get information about who signed a feed. Set to empty to deactivate use of key information server.

+
+
+ +
+
public FeedUri? KeyInfoServer { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ KioskMode + +

+ +

Restrict usage to feeds specified in the catalog.

+
+
+ +
+
public bool KioskMode { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ MaxParallelDownloads + +

+ +

Maximum number of Implementations to download in parallel.

+
+
+ +
+
[Range(1, 128)]
+public int MaxParallelDownloads { get; set; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ NetworkUse + +

+ +

Controls how liberally network access is attempted.

+
+
+ +
+
public NetworkLevel NetworkUse { get; set; }
+
+ + + + + +

Property Value

+
+
NetworkLevel
+
+
+ + + + + + + + + + +

+ SelfUpdateUri + +

+ +

The feed URI used to search for updates for Zero Install itself. Set to empty to deactivate self-update.

+
+
+ +
+
public FeedUri? SelfUpdateUri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ SyncCryptoKey + +

+ +

The local key used to encrypt data before sending it to the SyncServer.

+
+
+ +
+
public string SyncCryptoKey { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SyncServer + +

+ +

The sync server used to synchronize your app list between multiple computers.

+
+
+ +
+
public FeedUri? SyncServer { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + +
+
See Also
+
+ + +
+
+ + + + +

+ SyncServerPassword + +

+ +

The password to authenticate with against the SyncServer.

+
+
+ +
+
public string SyncServerPassword { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + +
+
See Also
+
+ + +
+
+ + + + +

+ SyncServerUsername + +

+ +

The username to authenticate with against the SyncServer.

+
+
+ +
+
public string SyncServerUsername { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + +
+
See Also
+
+ + +
+
+ + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Config instance.

+
+
+ +
+
public Config Clone()
+
+ + +

Returns

+
+
Config
+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(Config?) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public bool Equals(Config? other)
+
+ +

Parameters

+
+
other Config
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetEnumerator() + +

+ +

Returns an enumerator that iterates through the collection.

+
+
+ +
+
public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
+
+ + +

Returns

+
+
IEnumerator<KeyValuePair<string, string>>
+

An enumerator that can be used to iterate through the collection.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ GetOption(string) + +

+ +

Retrieves the string representation of an option identified by a key.

+
+
+ +
+
public string GetOption(string key)
+
+ +

Parameters

+
+
key string
+

The key of the option to retrieve.

+
+
+ +

Returns

+
+
string
+

The string representation of the the option.

+
+
+ + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

key is invalid.

+
+
+ + + + + +

+ IsOptionLocked(string) + +

+ +

Determines whether an option is locked by a group policy (in the Windows registry).

+
+
+ +
+
public static bool IsOptionLocked(string key)
+
+ +

Parameters

+
+
key string
+

The key of the option to check.

+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Load() + +

+ +

Aggregates options from all applicable config files and registry locations.

+
+
+ +
+
public static Config Load()
+
+ + +

Returns

+
+
Config
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing the config data.

+
+
+ + + + + +

+ LoadSafe() + +

+ +

Tries to aggregates options from all applicable config files and registry locations. Automatically falls back to default values on errors.

+
+
+ +
+
public static Config LoadSafe()
+
+ + +

Returns

+
+
Config
+

The loaded Config or default Config if there was a problem.

+
+
+ + + + + + + + + + + + + +

+ ReadFrom(IniData, string) + +

+ +

Reads options from a config file stream and merges them into the config instance.

+
+
+ +
+
public void ReadFrom(IniData iniData, string path = "embedded")
+
+ +

Parameters

+
+
iniData IniData
+

The parsed file.

+
+
path string
+

The path of the file iniData was read from. Used for logging.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

The file contains invalid config values.

+
+
+ + + + + +

+ ReadFromFile(string) + +

+ +

Reads options from a config file and merges them into the config instance.

+
+
+ +
+
public void ReadFromFile(string path)
+
+ +

Parameters

+
+
path string
+

The path of the file to read.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

The file contains invalid config values.

+
+
+ + + + + +

+ ReadFromFiles() + +

+ +

Reads options from config files in default locations and merges them into the config instance.

+
+
+ +
+
public void ReadFromFiles()
+
+ + + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

The file contains invalid config values.

+
+
+ + + + + +

+ ReadFromFilesMachineWideOnly() + +

+ +

Reads options from config files in machine-wide locations.

+
+
+ +
+
public void ReadFromFilesMachineWideOnly()
+
+ + + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

The file contains invalid config values.

+
+
+ + + + + +

+ ReadFromGroupPolicy() + +

+ +

Reads options from group policies (in the Windows registry) and merges them into the config instance.

+
+
+ +
+
public void ReadFromGroupPolicy()
+
+ + + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Read access to the registry key is not permitted.

+
+
InvalidDataException
+

The registry key contains invalid config values.

+
+
+ + + + + +

+ ResetOption(string) + +

+ +

Resets an option identified by a key to its default value.

+
+
+ +
+
public void ResetOption(string key)
+
+ +

Parameters

+
+
key string
+

The key of the option to reset.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

key is invalid.

+
+
+ + + + + +

+ Save(bool) + +

+ +

Saves the options to a config file in a default location.

+
+
+ +
+
public void Save(bool machineWide = false)
+
+ +

Parameters

+
+
machineWide bool
+

true to save in a machine-wide location; false to save in the user profile.

+
+
+ + + + + + + + +

Remarks

+

This method performs an atomic write operation when possible.

+
+ +

Exceptions

+
+
IOException
+

A problem occurred while writing the file.

+
+
UnauthorizedAccessException
+

Write access to the file is not permitted.

+
+
+ + + + + +

+ Save(string) + +

+ +

Saves the options to a config file.

+
+
+ +
+
public void Save(string path)
+
+ +

Parameters

+
+
path string
+
+
+ + + + + + + + +

Remarks

+

This method performs an atomic write operation when possible.

+
+ +

Exceptions

+
+
IOException
+

A problem occurred while writing the file.

+
+
UnauthorizedAccessException
+

Write access to the file is not permitted.

+
+
+ + + + + +

+ SetOption(string, string) + +

+ +

Sets an option identified by a key.

+
+
+ +
+
public void SetOption(string key, string value)
+
+ +

Parameters

+
+
key string
+

The key of the option to set.

+
+
value string
+

A string representation of the option.

+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

key is invalid.

+
+
FormatException
+

value is invalid.

+
+
UnauthorizedAccessException
+

This option is controlled by a group policy and can therefore not be modified.

+
+
+ + + + + +

+ ToIniData() + +

+ +

Converts the options into an in-memory representation of an INI file.

+
+
+ +
+
public IniData ToIniData()
+
+ + +

Returns

+
+
IniData
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Configuration.ConfigTab.html b/api/ZeroInstall.Store.Configuration.ConfigTab.html new file mode 100644 index 000000000..86dc737dd --- /dev/null +++ b/api/ZeroInstall.Store.Configuration.ConfigTab.html @@ -0,0 +1,164 @@ + + + + + Enum ConfigTab | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum ConfigTab +

+ +
+
Namespace
ZeroInstall.Store.Configuration
+
Assembly
ZeroInstall.Store.dll
+
+ +

Available tabs in a Config GUI.

+
+
+ +
+
public enum ConfigTab
+
+ + + + + + + + + +

Fields +

+
+
Advanced = 7
+
+
Catalog = 3
+
+
Default = 0
+
+
Language = 6
+
+
Storage = 2
+
+
Sync = 5
+
+
Trust = 4
+
+
Updates = 1
+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Configuration.NetworkLevel.html b/api/ZeroInstall.Store.Configuration.NetworkLevel.html new file mode 100644 index 000000000..cdbe80564 --- /dev/null +++ b/api/ZeroInstall.Store.Configuration.NetworkLevel.html @@ -0,0 +1,157 @@ + + + + + Enum NetworkLevel | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum NetworkLevel +

+ +
+
Namespace
ZeroInstall.Store.Configuration
+
Assembly
ZeroInstall.Store.dll
+
+ +

Controls how liberally network access is attempted.

+
+
+ +
+
public enum NetworkLevel
+
+ + + + + + + + + +

Fields +

+
+
Full = 2
+

Always use network to get the newest available versions.

+
+
Minimal = 1
+

Only access network when there are no safe implementations available.

+
+
Offline = 0
+

Do not access network at all.

+
+
+ + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Configuration.html b/api/ZeroInstall.Store.Configuration.html new file mode 100644 index 000000000..fb555e170 --- /dev/null +++ b/api/ZeroInstall.Store.Configuration.html @@ -0,0 +1,143 @@ + + + + + Namespace ZeroInstall.Store.Configuration | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Store.Configuration

+
+

User settings controlling network behaviour, solving, etc..

+
+
+
+ +

+Classes +

+
+
Config
+

User settings controlling network behaviour, solving, etc..

+
+
+

+Enums +

+
+
ConfigTab
+

Available tabs in a Config GUI.

+
+
+
+
NetworkLevel
+

Controls how liberally network access is attempted.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Deployment.ClearDirectory.html b/api/ZeroInstall.Store.Deployment.ClearDirectory.html new file mode 100644 index 000000000..75ee064c3 --- /dev/null +++ b/api/ZeroInstall.Store.Deployment.ClearDirectory.html @@ -0,0 +1,341 @@ + + + + + Class ClearDirectory | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ClearDirectory +

+ +
+
Namespace
ZeroInstall.Store.Deployment
+
Assembly
ZeroInstall.Store.dll
+
+ +

Deletes files listed in a Manifest file from a directory.

+
+
+ +
+
[MustDisposeResource]
+public class ClearDirectory : DirectoryOperation, IDisposable
+
+ + + + +
+
Inheritance
+
+ + + +
ClearDirectory
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ClearDirectory(string, Manifest, ITaskHandler) + +

+ +

Deletes files listed in a Manifest file from a directory.

+
+
+ +
+
public ClearDirectory(string path, Manifest manifest, ITaskHandler handler)
+
+ +

Parameters

+
+
path string
+

The path of the directory to clear.

+
+
manifest Manifest
+

The contents of a Manifest file describing the directory.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be asked questions or informed about IO tasks.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ OnCommit() + +

+ +

Template method to commit the changes made by OnStage().

+
+
+ +
+
protected override void OnCommit()
+
+ + + + + + + + + + + + + + + +

+ OnRollback() + +

+ +

Template method to revert any changes made by OnStage().

+
+
+ +
+
protected override void OnRollback()
+
+ + + + + + + + + + + + + + + +

+ OnStage() + +

+ +

Template method to stage changes.

+
+
+ +
+
protected override void OnStage()
+
+ + + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Deployment.DeployDirectory.html b/api/ZeroInstall.Store.Deployment.DeployDirectory.html new file mode 100644 index 000000000..046fe3436 --- /dev/null +++ b/api/ZeroInstall.Store.Deployment.DeployDirectory.html @@ -0,0 +1,380 @@ + + + + + Class DeployDirectory | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DeployDirectory +

+ +
+
Namespace
ZeroInstall.Store.Deployment
+
Assembly
ZeroInstall.Store.dll
+
+ +

Deploys/copies files listed in a Manifest file to another directory.

+
+
+ +
+
[MustDisposeResource]
+public class DeployDirectory : DirectoryOperation, IDisposable
+
+ + + + +
+
Inheritance
+
+ + + +
DeployDirectory
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ DeployDirectory(string, Manifest, string, ITaskHandler) + +

+ +

Deploys/copies files listed in a Manifest file to another directory.

+
+
+ +
+
public DeployDirectory(string sourcePath, Manifest sourceManifest, string destinationPath, ITaskHandler handler)
+
+ +

Parameters

+
+
sourcePath string
+

The path of the source directory to copy from.

+
+
sourceManifest Manifest
+

The contents of a Manifest file describing the source directory.

+
+
destinationPath string
+

The path of the destination directory to copy to.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be asked questions or informed about IO tasks.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ DestinationPath + +

+ +

The path of the destination directory. May already exist.

+
+
+ +
+
public string DestinationPath { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ OnCommit() + +

+ +

Template method to commit the changes made by OnStage().

+
+
+ +
+
protected override void OnCommit()
+
+ + + + + + + + + + + + + + + +

+ OnRollback() + +

+ +

Template method to revert any changes made by OnStage().

+
+
+ +
+
protected override void OnRollback()
+
+ + + + + + + + + + + + + + + +

+ OnStage() + +

+ +

Template method to stage changes.

+
+
+ +
+
protected override void OnStage()
+
+ + + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Deployment.DirectoryOperation.html b/api/ZeroInstall.Store.Deployment.DirectoryOperation.html new file mode 100644 index 000000000..87c87f534 --- /dev/null +++ b/api/ZeroInstall.Store.Deployment.DirectoryOperation.html @@ -0,0 +1,486 @@ + + + + + Class DirectoryOperation | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DirectoryOperation +

+ +
+
Namespace
ZeroInstall.Store.Deployment
+
Assembly
ZeroInstall.Store.dll
+
+ +

Common base class for deployment operations that operate on directories with Manifests.

+
+
+ +
+
[MustDisposeResource]
+public abstract class DirectoryOperation : StagedOperation, IDisposable
+
+ + + + +
+
Inheritance
+
+ + +
DirectoryOperation
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ DirectoryOperation(string, Manifest, ITaskHandler) + +

+ +

Common base class for deployment operations that operate on directories with Manifests.

+
+
+ +
+
protected DirectoryOperation(string path, Manifest manifest, ITaskHandler handler)
+
+ +

Parameters

+
+
path string
+

The path of the directory to operate on.

+
+
manifest Manifest
+

The contents of a <see cref="Manifests.Manifest"/> file describing the directory.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be asked questions or informed about IO tasks.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Handler + +

+ +

A callback object used when the user needs to be asked questions or informed about IO tasks.

+
+
+ +
+
protected readonly ITaskHandler Handler
+
+ + + + +

Field Value

+
+
ITaskHandler
+
+
+ + + + + + + + + + +

+ Manifest + +

+ +

The contents of a Manifest file describing the directory.

+
+
+ +
+
protected readonly Manifest Manifest
+
+ + + + +

Field Value

+
+
Manifest
+
+
+ + + + + + + + + + +

+ Path + +

+ +

The path of the directory to operate on.

+
+
+ +
+
protected readonly string Path
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ NoRestart + +

+ +

Indicates that applications shut down by the WindowsRestartManager shall not be restarted on Dispose().

+
+
+ +
+
public bool NoRestart { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Dispose() + +

+ +

Performs a rollback of all changes made by Stage() if Commit() has not been called and completed yet.

+
+
+ +
+
public override void Dispose()
+
+ + + + + + + + + + + + + + + +

+ Randomize(string) + +

+ +

Appends a random string to a file path.

+
+
+ +
+
protected static string Randomize(string path)
+
+ +

Parameters

+
+
path string
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ UnlockFiles(IEnumerable<string>) + +

+ +

Uses WindowsRestartManager to close any applications that have open references to the specified files if possible and removes read-only attributes.

+
+
+ +
+
protected void UnlockFiles(IEnumerable<string> files)
+
+ +

Parameters

+
+
files IEnumerable<string>
+
+
+ + + + + + + + +

Remarks

+

Closed applications will be restarted by Dispose().

+
+ + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Deployment.html b/api/ZeroInstall.Store.Deployment.html new file mode 100644 index 000000000..3ebfc41aa --- /dev/null +++ b/api/ZeroInstall.Store.Deployment.html @@ -0,0 +1,140 @@ + + + + + Namespace ZeroInstall.Store.Deployment | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Store.Deployment

+
+

Deploying implementations to locations outside an implementation cache; mainly used to deploy Zero Install itself.

+
+
+
+ +

+Classes +

+
+
ClearDirectory
+

Deletes files listed in a Manifest file from a directory.

+
+
+
+
DeployDirectory
+

Deploys/copies files listed in a Manifest file to another directory.

+
+
+
+
DirectoryOperation
+

Common base class for deployment operations that operate on directories with Manifests.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Feeds.FeedCache.html b/api/ZeroInstall.Store.Feeds.FeedCache.html new file mode 100644 index 000000000..b01cf8bb3 --- /dev/null +++ b/api/ZeroInstall.Store.Feeds.FeedCache.html @@ -0,0 +1,591 @@ + + + + + Class FeedCache | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedCache +

+ +
+
Namespace
ZeroInstall.Store.Feeds
+
Assembly
ZeroInstall.Store.dll
+
+ +

A disk-based cache of Feeds that were downloaded via HTTP(S). +Once a feed has been added to this cache it is considered trusted (signatures are not checked again).

+
+
+ +
+
public sealed class FeedCache : IFeedCache
+
+ + + + +
+
Inheritance
+
+ +
FeedCache
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ FeedCache(string, IOpenPgp) + +

+ +

A disk-based cache of Feeds that were downloaded via HTTP(S). +Once a feed has been added to this cache it is considered trusted (signatures are not checked again).

+
+
+ +
+
public FeedCache(string path, IOpenPgp openPgp)
+
+ +

Parameters

+
+
path string
+

A fully qualified directory path.

+
+
openPgp IOpenPgp
+

Provides access to an encryption/signature system compatible with the OpenPGP standard.

+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Properties +

+ + + + +

+ Path + +

+ +

The path to the underlying directory in the file system.

+
+
+ +
+
public string Path { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Add(FeedUri, byte[]) + +

+ +

Adds a new Feed to the cache. Only do this after the feed source has been verified and trusted and replay attacks filtered!

+
+
+ +
+
public void Add(FeedUri feedUri, byte[] data)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed. Must not be a local path.

+
+
data byte[]
+

The content of the feed file as a byte array.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing the feed file.

+
+
UnauthorizedAccessException
+

Write access to the cache is not permitted.

+
+
InvalidDataException
+

The feed file could not be parsed.

+
+
InvalidOperationException
+

feedUri is a a local path.

+
+
+ + + + + +

+ Contains(FeedUri) + +

+ +

Determines whether this cache contains a local copy of a Feed identified by a specific URL.

+
+
+ +
+
public bool Contains(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed.

+
+
+ +

Returns

+
+
bool
+

true if the specified feed is available in this cache; +false if the specified feed is not available in this cache.

+
+
+ + + + + + + + + + + + + +

+ GetFeed(FeedUri) + +

+ +

Tries to get a specific Feed from this cache.

+
+
+ +
+
public Feed? GetFeed(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed.

+
+
+ +

Returns

+
+
Feed
+

The un-normalized Feed; null if the feed was not found in the cache or could not be parsed.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Read access to the cache is not permitted.

+
+
+ + + + + +

+ GetPath(FeedUri) + +

+ +

Tries to get the file path of the on-disk representation of a specific Feed.

+
+
+ +
+
public string? GetPath(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed.

+
+
+ +

Returns

+
+
string
+

The fully qualified path to the feed file; null if the feed was not found in the cache.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Read access to the cache is not permitted.

+
+
+ + + + + +

+ GetSignatures(FeedUri) + +

+ +

Determines which signatures a Feed from this cache is signed with.

+
+
+ +
+
public IEnumerable<OpenPgpSignature> GetSignatures(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed.

+
+
+ +

Returns

+
+
IEnumerable<OpenPgpSignature>
+

A list of signatures found, both valid and invalid. Returns an empty list if the feed was not found in the cache.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Read access to the cache is not permitted.

+
+
SignatureException
+

A signature block was found but it could not be parsed.

+
+
+ + + + + +

+ ListAll() + +

+ +

Returns a list of all Feeds stored in this cache.

+
+
+ +
+
public IEnumerable<FeedUri> ListAll()
+
+ + +

Returns

+
+
IEnumerable<FeedUri>
+

A list of feed URIs (e.g. "http://somedomain.net/interface.xml"). +Usually these can also be considered interface URIs.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading from the cache.

+
+
UnauthorizedAccessException
+

Read access to the cache is not permitted.

+
+
+ + + + + +

+ Remove(FeedUri) + +

+ +

Removes a specific Feed from this cache. No exception is thrown if the specified Feed is not in the cache.

+
+
+ +
+
public void Remove(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

The feed could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the cache is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Feeds.FeedCaches.html b/api/ZeroInstall.Store.Feeds.FeedCaches.html new file mode 100644 index 000000000..ed987e2f0 --- /dev/null +++ b/api/ZeroInstall.Store.Feeds.FeedCaches.html @@ -0,0 +1,255 @@ + + + + + Class FeedCaches | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedCaches +

+ +
+
Namespace
ZeroInstall.Store.Feeds
+
Assembly
ZeroInstall.Store.dll
+
+ +

Provides IFeedCache instances.

+
+
+ +
+
public static class FeedCaches
+
+ + + + +
+
Inheritance
+
+ +
FeedCaches
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ DefaultPath + +

+ +

The default feed cache location in the user profile.

+
+
+ +
+
public static string DefaultPath { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Default(IOpenPgp) + +

+ +

Creates an IFeedCache instance that uses the default cache location in the user profile.

+
+
+ +
+
public static IFeedCache Default(IOpenPgp openPgp)
+
+ +

Parameters

+
+
openPgp IOpenPgp
+

Provides access to an encryption/signature system compatible with the OpenPGP standard.

+
+
+ +

Returns

+
+
IFeedCache
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Feeds.FeedUtils.html b/api/ZeroInstall.Store.Feeds.FeedUtils.html new file mode 100644 index 000000000..cf1595cea --- /dev/null +++ b/api/ZeroInstall.Store.Feeds.FeedUtils.html @@ -0,0 +1,295 @@ + + + + + Class FeedUtils | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedUtils +

+ +
+
Namespace
ZeroInstall.Store.Feeds
+
Assembly
ZeroInstall.Store.dll
+
+ +

Provides utility methods for managing Feeds.

+
+
+ +
+
public static class FeedUtils
+
+ + + + +
+
Inheritance
+
+ +
FeedUtils
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Fields +

+ + + +

+ SignatureBlockEnd + +

+ +

The string signifying the end of a signature block.

+
+
+ +
+
public const string SignatureBlockEnd = "\n-->\n"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ SignatureBlockStart + +

+ +

The string signifying the start of a signature block.

+
+
+ +
+
public const string SignatureBlockStart = "<!-- Base64 Signature\n"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Methods +

+ + + + +

+ GetSignatures(IOpenPgp, byte[]) + +

+ +

Determines which signatures a feed is signed with.

+
+
+ +
+
public static IEnumerable<OpenPgpSignature> GetSignatures(IOpenPgp openPgp, byte[] feedData)
+
+ +

Parameters

+
+
openPgp IOpenPgp
+

The OpenPGP-compatible system used to validate the signatures.

+
+
feedData byte[]
+

The feed data containing an embedded signature.

+
+
+ +

Returns

+
+
IEnumerable<OpenPgpSignature>
+

A list of signatures found, both valid and invalid. Empty list if no signature block is found.

+
+
+ + + + + + + + +

Exceptions

+
+
SignatureException
+

A signature block was found but it could not be parsed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Feeds.IFeedCache.html b/api/ZeroInstall.Store.Feeds.IFeedCache.html new file mode 100644 index 000000000..f6111afee --- /dev/null +++ b/api/ZeroInstall.Store.Feeds.IFeedCache.html @@ -0,0 +1,512 @@ + + + + + Interface IFeedCache | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IFeedCache +

+ +
+
Namespace
ZeroInstall.Store.Feeds
+
Assembly
ZeroInstall.Store.dll
+
+ +

A disk-based cache of Feeds that were downloaded via HTTP(S). +Once a feed has been added to this cache it is considered trusted (signatures are not checked again).

+
+
+ +
+
public interface IFeedCache
+
+ + + + + + + + + + + +

Remarks

+

Implementations of this interface are immutable and thread-safe.

+
+ + +

Properties +

+ + + + +

+ Path + +

+ +

The path to the underlying directory in the file system.

+
+
+ +
+
string Path { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Add(FeedUri, byte[]) + +

+ +

Adds a new Feed to the cache. Only do this after the feed source has been verified and trusted and replay attacks filtered!

+
+
+ +
+
void Add(FeedUri feedUri, byte[] data)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed. Must not be a local path.

+
+
data byte[]
+

The content of the feed file as a byte array.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing the feed file.

+
+
UnauthorizedAccessException
+

Write access to the cache is not permitted.

+
+
InvalidDataException
+

The feed file could not be parsed.

+
+
InvalidOperationException
+

feedUri is a a local path.

+
+
+ + + + + +

+ Contains(FeedUri) + +

+ +

Determines whether this cache contains a local copy of a Feed identified by a specific URL.

+
+
+ +
+
bool Contains(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed.

+
+
+ +

Returns

+
+
bool
+

true if the specified feed is available in this cache; +false if the specified feed is not available in this cache.

+
+
+ + + + + + + + + + + + + +

+ GetFeed(FeedUri) + +

+ +

Tries to get a specific Feed from this cache.

+
+
+ +
+
Feed? GetFeed(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed.

+
+
+ +

Returns

+
+
Feed
+

The un-normalized Feed; null if the feed was not found in the cache or could not be parsed.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Read access to the cache is not permitted.

+
+
+ + + + + +

+ GetPath(FeedUri) + +

+ +

Tries to get the file path of the on-disk representation of a specific Feed.

+
+
+ +
+
string? GetPath(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed.

+
+
+ +

Returns

+
+
string
+

The fully qualified path to the feed file; null if the feed was not found in the cache.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Read access to the cache is not permitted.

+
+
+ + + + + +

+ GetSignatures(FeedUri) + +

+ +

Determines which signatures a Feed from this cache is signed with.

+
+
+ +
+
IEnumerable<OpenPgpSignature> GetSignatures(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed.

+
+
+ +

Returns

+
+
IEnumerable<OpenPgpSignature>
+

A list of signatures found, both valid and invalid. Returns an empty list if the feed was not found in the cache.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the feed file.

+
+
UnauthorizedAccessException
+

Read access to the cache is not permitted.

+
+
SignatureException
+

A signature block was found but it could not be parsed.

+
+
+ + + + + +

+ ListAll() + +

+ +

Returns a list of all Feeds stored in this cache.

+
+
+ +
+
IEnumerable<FeedUri> ListAll()
+
+ + +

Returns

+
+
IEnumerable<FeedUri>
+

A list of feed URIs (e.g. "http://somedomain.net/interface.xml"). +Usually these can also be considered interface URIs.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading from the cache.

+
+
UnauthorizedAccessException
+

Read access to the cache is not permitted.

+
+
+ + + + + +

+ Remove(FeedUri) + +

+ +

Removes a specific Feed from this cache. No exception is thrown if the specified Feed is not in the cache.

+
+
+ +
+
void Remove(FeedUri feedUri)
+
+ +

Parameters

+
+
feedUri FeedUri
+

The canonical ID used to identify the feed.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

The feed could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the cache is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Feeds.SearchResult.html b/api/ZeroInstall.Store.Feeds.SearchResult.html new file mode 100644 index 000000000..ec37e2222 --- /dev/null +++ b/api/ZeroInstall.Store.Feeds.SearchResult.html @@ -0,0 +1,644 @@ + + + + + Class SearchResult | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SearchResult +

+ +
+
Namespace
ZeroInstall.Store.Feeds
+
Assembly
ZeroInstall.Store.dll
+
+ +

A single result of a feed search.

+
+
+ +
+
[Serializable]
+[Equatable]
+public class SearchResult : IEquatable<SearchResult>
+
+ + + + +
+
Inheritance
+
+ +
SearchResult
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + +
+ + + + + + +

Properties +

+ + + + +

+ Categories + +

+ +

A list of well-known categories the applications fits into.

+
+
+ +
+
[Browsable(false)]
+public List<Category> Categories { get; }
+
+ + + + + +

Property Value

+
+
List<Category>
+
+
+ + + + + + + + + + +

+ CategoriesString + +

+ +

Used for DataGrid rendering.

+
+
+ +
+
[IgnoreEquality]
+public string CategoriesString { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + +
+
See Also
+
+ +
+
+ + + + +

+ Name + +

+ +

A short name to identify the interface (e.g. "Foo").

+
+
+ +
+
public required string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Score + +

+ +

A value between 0 and 100 indicating how good this result matches the query.

+
+
+ +
+
public int Score { get; set; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Summary + +

+ +

Short one-line description for different languages; the first word should not be upper-case unless it is a proper noun (e.g. "cures all ills").

+
+
+ +
+
public string? Summary { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Uri + +

+ +

The URI of the feed.

+
+
+ +
+
public required FeedUri Uri { get; set; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(SearchResult?) + +

+ +
+
+ +
+
protected bool Equals(SearchResult? other)
+
+ +

Parameters

+
+
other SearchResult
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToPseudoFeed() + +

+ +

Generates a pseudo-Feed using the information from this result.

+
+
+ +
+
public Feed ToPseudoFeed()
+
+ + +

Returns

+
+
Feed
+

A pseudo-Feed; not a complete feed that can be used to launch an implementation.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Creates string representation suitable for console output.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(SearchResult?, SearchResult?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(SearchResult? left, SearchResult? right)
+
+ +

Parameters

+
+
left SearchResult
+

The left object

+
+
right SearchResult
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(SearchResult?, SearchResult?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(SearchResult? left, SearchResult? right)
+
+ +

Parameters

+
+
left SearchResult
+

The left object

+
+
right SearchResult
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Feeds.SearchResults.html b/api/ZeroInstall.Store.Feeds.SearchResults.html new file mode 100644 index 000000000..b51ce6aa4 --- /dev/null +++ b/api/ZeroInstall.Store.Feeds.SearchResults.html @@ -0,0 +1,268 @@ + + + + + Class SearchResults | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SearchResults +

+ +
+
Namespace
ZeroInstall.Store.Feeds
+
Assembly
ZeroInstall.Store.dll
+
+ +

Holds results of a feed search query.

+
+
+ +
+
[Serializable]
+public class SearchResults
+
+ + + + +
+
Inheritance
+
+ +
SearchResults
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ Results + +

+ +

A list of results matching the specified keywords.

+
+
+ +
+
public List<SearchResult> Results { get; }
+
+ + + + + +

Property Value

+
+
List<SearchResult>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Query(Config, string?) + +

+ +

Performs a feed search query using the FeedMirror.

+
+
+ +
+
public static List<SearchResult> Query(Config config, string? keywords)
+
+ +

Parameters

+
+
config Config
+

The current configuration determining which mirror server to query.

+
+
keywords string
+

The keywords to search for.

+
+
+ +

Returns

+
+
List<SearchResult>
+
+
+ + + + + + + + +

Exceptions

+
+
WebException
+

Failed to get query result.

+
+
InvalidDataException
+

Failed to parse query result.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Feeds.html b/api/ZeroInstall.Store.Feeds.html new file mode 100644 index 000000000..d57f04fea --- /dev/null +++ b/api/ZeroInstall.Store.Feeds.html @@ -0,0 +1,160 @@ + + + + + Namespace ZeroInstall.Store.Feeds | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Store.Feeds

+
+

Caches for feeds.

+
+
+
+ +

+Classes +

+
+
FeedCache
+

A disk-based cache of Feeds that were downloaded via HTTP(S). +Once a feed has been added to this cache it is considered trusted (signatures are not checked again).

+
+
+
+
FeedCaches
+

Provides IFeedCache instances.

+
+
+
+
FeedUtils
+

Provides utility methods for managing Feeds.

+
+
+
+
SearchResult
+

A single result of a feed search.

+
+
+
+
SearchResults
+

Holds results of a feed search query.

+
+
+

+Interfaces +

+
+
IFeedCache
+

A disk-based cache of Feeds that were downloaded via HTTP(S). +Once a feed has been added to this cache it is considered trusted (signatures are not checked again).

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.FileSystem.BuilderExtensions.html b/api/ZeroInstall.Store.FileSystem.BuilderExtensions.html new file mode 100644 index 000000000..3ba23b688 --- /dev/null +++ b/api/ZeroInstall.Store.FileSystem.BuilderExtensions.html @@ -0,0 +1,421 @@ + + + + + Class BuilderExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class BuilderExtensions +

+ +
+
Namespace
ZeroInstall.Store.FileSystem
+
Assembly
ZeroInstall.Store.dll
+
+ +

Helpers for adding RetrievalMethods to IBuilders.

+
+
+ +
+
public static class BuilderExtensions
+
+ + + + +
+
Inheritance
+
+ +
BuilderExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ AddFile(IBuilder, SingleFile, Stream) + +

+ +

Adds a file to the implementation.

+
+
+ +
+
public static void AddFile(this IBuilder builder, SingleFile metadata, Stream stream)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder.

+
+
metadata SingleFile
+

The metadata of the file.

+
+
stream Stream
+

The contents of the file.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ BuildDirectory(IBuilder, string?) + +

+ +

Adds a subdirectory to the implementation and returns a wrapped IBuilder to elements inside this subdirectory.

+
+
+ +
+
public static IBuilder BuildDirectory(this IBuilder builder, string? path)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder.

+
+
path string
+

The path of the directory to create relative to the implementation root.

+
+
+ +

Returns

+
+
IBuilder
+

An IBuilder wrapped around builder that prepends path to paths.

+
+
+ + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ CopyFrom(IBuilder, CopyFromStep, string, ITaskHandler) + +

+ +

Copies files or directories from another implementation.

+
+
+ +
+
public static void CopyFrom(this IBuilder builder, CopyFromStep metadata, string path, ITaskHandler handler)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder.

+
+
metadata CopyFromStep
+

The path of the source and destination file or directory.

+
+
path string
+

The path of the implementation referenced by metadata.

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Remove(IBuilder, RemoveStep) + +

+ +

Removes a file or directory from the implementation.

+
+
+ +
+
public static void Remove(this IBuilder builder, RemoveStep metadata)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder.

+
+
metadata RemoveStep
+

The path of the file or directory.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Rename(IBuilder, RenameStep) + +

+ +

Renames a file or directory in the implementation.

+
+
+ +
+
public static void Rename(this IBuilder builder, RenameStep metadata)
+
+ +

Parameters

+
+
builder IBuilder
+

The builder.

+
+
metadata RenameStep
+

The path of the source and destination file or directory.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.FileSystem.DirectoryBuilder.html b/api/ZeroInstall.Store.FileSystem.DirectoryBuilder.html new file mode 100644 index 000000000..0e93309cb --- /dev/null +++ b/api/ZeroInstall.Store.FileSystem.DirectoryBuilder.html @@ -0,0 +1,687 @@ + + + + + Class DirectoryBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DirectoryBuilder +

+ +
+
Namespace
ZeroInstall.Store.FileSystem
+
Assembly
ZeroInstall.Store.dll
+
+ +

Builds a file system directory on-disk.

+
+
+ +
+
public class DirectoryBuilder : MarshalNoTimeout, IBuilder, IForwardOnlyBuilder
+
+ + + + +
+
Inheritance
+
+ + + +
DirectoryBuilder
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ +
+
Extension Methods
+
+ + + + + +
+ + + + + +

Constructors +

+ + + + +

+ DirectoryBuilder(string, IBuilder?) + +

+ +

Builds a file system directory on-disk.

+
+
+ +
+
public DirectoryBuilder(string path, IBuilder? innerBuilder = null)
+
+ +

Parameters

+
+
path string
+

The path to the directory to build the implementation in.

+
+
innerBuilder IBuilder
+

An additional IBuilder to pass all calls on to as well. Usually ManifestBuilder.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ AllowedHardlinkRoot + +

+ +

A directory all hardlink targets must be a child of. +Defaults to Path.

+
+
+ +
+
public string AllowedHardlinkRoot { get; init; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Path + +

+ +

The path to the directory to build the implementation in.

+
+
+ +
+
public string Path { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ AddDirectory(string) + +

+ +

Adds a subdirectory to the implementation.

+
+
+ +
+
public void AddDirectory(string path)
+
+ +

Parameters

+
+
path string
+

The path of the directory to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ AddFile(string, Stream, UnixTime, bool) + +

+ +

Adds a file to the implementation.

+
+
+ +
+
public void AddFile(string path, Stream stream, UnixTime modifiedTime, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the file to create relative to the implementation root.

+
+
stream Stream
+

The contents of the file.

+
+
modifiedTime UnixTime
+

The last write time to set for the file.

+
+
executable bool
+

true if the file's executable bit is to be set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + + + +

Adds a hardlink to the implementation.

+
+
+ +
+
public void AddHardlink(string path, string target, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the hardlink to create relative to the implementation root.

+
+
target string
+

The path of the existing file the hardlink shall be based on relative to the implementation root. Must point

+
+
executable bool
+

true if the executable bit of the hardlink is set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
NotSupportedException
+

The currently platform or builder does not support hardlinks. Use AddFile(string, Stream, UnixTime, bool) instead.

+
+
+ + + + + + + +

Adds a symbolic link to the implementation.

+
+
+ +
+
public void AddSymlink(string path, string target)
+
+ +

Parameters

+
+
path string
+

The path of the symlink to create relative to the implementation root.

+
+
target string
+

The target the symbolic link shall point to relative to path. May use non-native path separators.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ MarkAsExecutable(string) + +

+ +

Marks a previously added file as executable.

+
+
+ +
+
public void MarkAsExecutable(string path)
+
+ +

Parameters

+
+
path string
+

The path of the file to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Remove(string) + +

+ +

Removes a file or directory from the implementation.

+
+
+ +
+
public void Remove(string path)
+
+ +

Parameters

+
+
path string
+

The path of the file or directory relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Rename(string, string) + +

+ +

Renames a file or directory in the implementation.

+
+
+ +
+
public void Rename(string path, string target)
+
+ +

Parameters

+
+
path string
+

The original path of the file or directory relative to the implementation root.

+
+
target string
+

The new path of the file or directory relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + + + +

Turns a previously added file into a symlink.

+
+
+ +
+
public void TurnIntoSymlink(string path)
+
+ +

Parameters

+
+
path string
+

The path of the symlink to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.FileSystem.IBuilder.html b/api/ZeroInstall.Store.FileSystem.IBuilder.html new file mode 100644 index 000000000..4919fd088 --- /dev/null +++ b/api/ZeroInstall.Store.FileSystem.IBuilder.html @@ -0,0 +1,355 @@ + + + + + Interface IBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IBuilder +

+ +
+
Namespace
ZeroInstall.Store.FileSystem
+
Assembly
ZeroInstall.Store.dll
+
+ +

Builds a file system directory.

+
+
+ +
+
public interface IBuilder : IForwardOnlyBuilder
+
+ + + + + + + +
+
Inherited Members
+
+ + + + +
+ +
+
Extension Methods
+
+ + + + + +
+ + + + + +

Methods +

+ + + + +

+ MarkAsExecutable(string) + +

+ +

Marks a previously added file as executable.

+
+
+ +
+
void MarkAsExecutable(string path)
+
+ +

Parameters

+
+
path string
+

The path of the file to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Remove(string) + +

+ +

Removes a file or directory from the implementation.

+
+
+ +
+
void Remove(string path)
+
+ +

Parameters

+
+
path string
+

The path of the file or directory relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Rename(string, string) + +

+ +

Renames a file or directory in the implementation.

+
+
+ +
+
void Rename(string path, string target)
+
+ +

Parameters

+
+
path string
+

The original path of the file or directory relative to the implementation root.

+
+
target string
+

The new path of the file or directory relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + + + +

Turns a previously added file into a symlink.

+
+
+ +
+
void TurnIntoSymlink(string path)
+
+ +

Parameters

+
+
path string
+

The path of the symlink to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.FileSystem.IForwardOnlyBuilder.html b/api/ZeroInstall.Store.FileSystem.IForwardOnlyBuilder.html new file mode 100644 index 000000000..d09dea15b --- /dev/null +++ b/api/ZeroInstall.Store.FileSystem.IForwardOnlyBuilder.html @@ -0,0 +1,338 @@ + + + + + Interface IForwardOnlyBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IForwardOnlyBuilder +

+ +
+
Namespace
ZeroInstall.Store.FileSystem
+
Assembly
ZeroInstall.Store.dll
+
+ +

Builds a file system directory without changing or removing elements that have already been added.

+
+
+ +
+
public interface IForwardOnlyBuilder
+
+ + + + + + + + + + + + + +

Methods +

+ + + + +

+ AddDirectory(string) + +

+ +

Adds a subdirectory to the implementation.

+
+
+ +
+
void AddDirectory(string path)
+
+ +

Parameters

+
+
path string
+

The path of the directory to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ AddFile(string, Stream, UnixTime, bool) + +

+ +

Adds a file to the implementation.

+
+
+ +
+
void AddFile(string path, Stream stream, UnixTime modifiedTime, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the file to create relative to the implementation root.

+
+
stream Stream
+

The contents of the file.

+
+
modifiedTime UnixTime
+

The last write time to set for the file.

+
+
executable bool
+

true if the file's executable bit is to be set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + + + +

Adds a hardlink to the implementation.

+
+
+ +
+
void AddHardlink(string path, string target, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the hardlink to create relative to the implementation root.

+
+
target string
+

The path of the existing file the hardlink shall be based on relative to the implementation root. Must point

+
+
executable bool
+

true if the executable bit of the hardlink is set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
NotSupportedException
+

The currently platform or builder does not support hardlinks. Use AddFile(string, Stream, UnixTime, bool) instead.

+
+
+ + + + + + + +

Adds a symbolic link to the implementation.

+
+
+ +
+
void AddSymlink(string path, string target)
+
+ +

Parameters

+
+
path string
+

The path of the symlink to create relative to the implementation root.

+
+
target string
+

The target the symbolic link shall point to relative to path. May use non-native path separators.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.FileSystem.ImplFileUtils.html b/api/ZeroInstall.Store.FileSystem.ImplFileUtils.html new file mode 100644 index 000000000..b993d99c2 --- /dev/null +++ b/api/ZeroInstall.Store.FileSystem.ImplFileUtils.html @@ -0,0 +1,337 @@ + + + + + Class ImplFileUtils | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplFileUtils +

+ +
+
Namespace
ZeroInstall.Store.FileSystem
+
Assembly
ZeroInstall.Store.dll
+
+ +

Provides filesystem helper methods for working with implementation directories.

+
+
+ +
+
public static class ImplFileUtils
+
+ + + + +
+
Inheritance
+
+ +
ImplFileUtils
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + + + +

Creates a new symbolic link to a file or directory.

+
+
+ +
+
public static void CreateSymlink(string sourcePath, string targetPath)
+
+ +

Parameters

+
+
sourcePath string
+

The path of the link to create.

+
+
targetPath string
+

The path of the existing file or directory to point to (relative to sourcePath).

+
+
+ + + + + + + + + + + + + + +

+ IsExecutable(string, ManifestElement?) + +

+ +

Checks whether a file is marked as Unix-executable.

+
+
+ +
+
public static bool IsExecutable(string path, ManifestElement? manifestElement = null)
+
+ +

Parameters

+
+
path string
+

The path of the file to check.

+
+
manifestElement ManifestElement
+

The file's equivalent manifest entry, if available.

+
+
+ +

Returns

+
+
bool
+

true if path points to an executable; false otherwise.

+
+
+ + + + + + + + + + + + + + + +

Checks whether a file is a symbolic link.

+
+
+ +
+
public static bool IsSymlink(string path, out string? target, ManifestElement? manifestElement = null)
+
+ +

Parameters

+
+
path string
+

The path of the file to check.

+
+
target string
+

Returns the target the symbolic link points to if it exists.

+
+
manifestElement ManifestElement
+

The file's equivalent manifest entry, if available.

+
+
+ +

Returns

+
+
bool
+

true if manifestElement points to a symbolic link; false otherwise.

+
+
+ + + + + + + + + + + + + +

+ SetExecutable(string) + +

+ +

Marks a file as Unix-executable.

+
+
+ +
+
public static void SetExecutable(string fullPath)
+
+ +

Parameters

+
+
fullPath string
+

The absolute path of the file.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.FileSystem.PrefixBuilder.html b/api/ZeroInstall.Store.FileSystem.PrefixBuilder.html new file mode 100644 index 000000000..6c6c19b88 --- /dev/null +++ b/api/ZeroInstall.Store.FileSystem.PrefixBuilder.html @@ -0,0 +1,618 @@ + + + + + Class PrefixBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PrefixBuilder +

+ +
+
Namespace
ZeroInstall.Store.FileSystem
+
Assembly
ZeroInstall.Store.dll
+
+ +

Wraps an IBuilder and prepends a directory prefix to paths.

+
+
+ +
+
public class PrefixBuilder : MarshalNoTimeout, IBuilder, IForwardOnlyBuilder
+
+ + + + +
+
Inheritance
+
+ + + +
PrefixBuilder
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ +
+
Extension Methods
+
+ + + + + +
+ + + + + +

Constructors +

+ + + + +

+ PrefixBuilder(IBuilder, string) + +

+ +

Wraps an IBuilder and prepends a directory prefix to paths.

+
+
+ +
+
public PrefixBuilder(IBuilder underlyingBuilder, string prefix)
+
+ +

Parameters

+
+
underlyingBuilder IBuilder
+

The underlying IBuilder to wrap.

+
+
prefix string
+

The directory prefix to prepend to paths.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ AddDirectory(string) + +

+ +

Adds a subdirectory to the implementation.

+
+
+ +
+
public void AddDirectory(string path)
+
+ +

Parameters

+
+
path string
+

The path of the directory to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ AddFile(string, Stream, UnixTime, bool) + +

+ +

Adds a file to the implementation.

+
+
+ +
+
public void AddFile(string path, Stream stream, UnixTime modifiedTime, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the file to create relative to the implementation root.

+
+
stream Stream
+

The contents of the file.

+
+
modifiedTime UnixTime
+

The last write time to set for the file.

+
+
executable bool
+

true if the file's executable bit is to be set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + + + +

Adds a hardlink to the implementation.

+
+
+ +
+
public void AddHardlink(string path, string target, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the hardlink to create relative to the implementation root.

+
+
target string
+

The path of the existing file the hardlink shall be based on relative to the implementation root. Must point

+
+
executable bool
+

true if the executable bit of the hardlink is set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
NotSupportedException
+

The currently platform or builder does not support hardlinks. Use AddFile(string, Stream, UnixTime, bool) instead.

+
+
+ + + + + + + +

Adds a symbolic link to the implementation.

+
+
+ +
+
public void AddSymlink(string path, string target)
+
+ +

Parameters

+
+
path string
+

The path of the symlink to create relative to the implementation root.

+
+
target string
+

The target the symbolic link shall point to relative to path. May use non-native path separators.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ MarkAsExecutable(string) + +

+ +

Marks a previously added file as executable.

+
+
+ +
+
public void MarkAsExecutable(string path)
+
+ +

Parameters

+
+
path string
+

The path of the file to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Remove(string) + +

+ +

Removes a file or directory from the implementation.

+
+
+ +
+
public void Remove(string path)
+
+ +

Parameters

+
+
path string
+

The path of the file or directory relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Rename(string, string) + +

+ +

Renames a file or directory in the implementation.

+
+
+ +
+
public void Rename(string path, string target)
+
+ +

Parameters

+
+
path string
+

The original path of the file or directory relative to the implementation root.

+
+
target string
+

The new path of the file or directory relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + + + +

Turns a previously added file into a symlink.

+
+
+ +
+
public void TurnIntoSymlink(string path)
+
+ +

Parameters

+
+
path string
+

The path of the symlink to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.FileSystem.ReadDirectory.html b/api/ZeroInstall.Store.FileSystem.ReadDirectory.html new file mode 100644 index 000000000..254533dd7 --- /dev/null +++ b/api/ZeroInstall.Store.FileSystem.ReadDirectory.html @@ -0,0 +1,385 @@ + + + + + Class ReadDirectory | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ReadDirectory +

+ +
+
Namespace
ZeroInstall.Store.FileSystem
+
Assembly
ZeroInstall.Store.dll
+
+ +

Reads the content of a directory to an IBuilder.

+
+
+ +
+
public class ReadDirectory : ReadDirectoryBase, ITask
+
+ + + + +
+
Inheritance
+
+ + + + +
ReadDirectory
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ReadDirectory(string, IForwardOnlyBuilder, string?) + +

+ +

Creates a new directory read task.

+
+
+ +
+
public ReadDirectory(string path, IForwardOnlyBuilder builder, string? name = null)
+
+ +

Parameters

+
+
path string
+

The path of the directory to read.

+
+
builder IForwardOnlyBuilder
+

The builder to read to.

+
+
name string
+

A name describing the task in human-readable form.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Name + +

+ +

A name describing the task in human-readable form.

+
+
+ +
+
public override string Name { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ HandleDirectory(DirectoryInfo) + +

+ +

Called once for every sub-directory below Source.

+
+
+ +
+
protected override void HandleDirectory(DirectoryInfo entry)
+
+ +

Parameters

+
+
entry DirectoryInfo
+
+
+ + + + + + + + + + + + + + +

+ HandleFile(FileInfo, FileInfo?) + +

+ +

Called once for every file below Source.

+
+
+ +
+
protected override void HandleFile(FileInfo file, FileInfo? hardlinkTarget = null)
+
+ +

Parameters

+
+
file FileInfo
+

The file to handle.

+
+
hardlinkTarget FileInfo
+

A previously handled file that is hardlinked to file. May be null.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.FileSystem.html b/api/ZeroInstall.Store.FileSystem.html new file mode 100644 index 000000000..bc9dfee22 --- /dev/null +++ b/api/ZeroInstall.Store.FileSystem.html @@ -0,0 +1,163 @@ + + + + + Namespace ZeroInstall.Store.FileSystem | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Store.FileSystem

+
+

Interfaces and methods for building and reading File system structures.

+
+
+
+ +

+Classes +

+
+
BuilderExtensions
+

Helpers for adding RetrievalMethods to IBuilders.

+
+
+
+
DirectoryBuilder
+

Builds a file system directory on-disk.

+
+
+
+
ImplFileUtils
+

Provides filesystem helper methods for working with implementation directories.

+
+
+
+
PrefixBuilder
+

Wraps an IBuilder and prepends a directory prefix to paths.

+
+
+
+
ReadDirectory
+

Reads the content of a directory to an IBuilder.

+
+
+

+Interfaces +

+
+
IBuilder
+

Builds a file system directory.

+
+
+
+
IForwardOnlyBuilder
+

Builds a file system directory without changing or removing elements that have already been added.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Icons.IIconStore.html b/api/ZeroInstall.Store.Icons.IIconStore.html new file mode 100644 index 000000000..2f1357043 --- /dev/null +++ b/api/ZeroInstall.Store.Icons.IIconStore.html @@ -0,0 +1,369 @@ + + + + + Interface IIconStore | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IIconStore +

+ +
+
Namespace
ZeroInstall.Store.Icons
+
Assembly
ZeroInstall.Store.dll
+
+ +

Stores icon files downloaded from the web as local files.

+
+
+ +
+
public interface IIconStore
+
+ + + + + + + + +
+
Extension Methods
+
+ +
+ + + +

Remarks

+

Implementations of this interface are immutable and thread-safe.

+
+ + +

Methods +

+ + + + +

+ Get(Icon, out bool) + +

+ +

Gets an icon from the cache or downloads it if not yet cached.

+
+
+ +
+
string Get(Icon icon, out bool shouldRefresh)
+
+ +

Parameters

+
+
icon Icon
+

The icon to get.

+
+
shouldRefresh bool
+

Indicates whether the returned file is outdated and EffectiveNetworkUse is Full.

+
+
+ +

Returns

+
+
string
+

The file path of the icon in the cache.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while adding the icon to the cache.

+
+
UnauthorizedAccessException
+

Read or write access to the cache is not permitted.

+
+
WebException
+

A problem occurred while downloading the icon.

+
+
InvalidDataException
+

The icon does not have a valid format.

+
+
+ + + + + +

+ GetCached(Icon, out bool) + +

+ +

Tries to get an icon that is already cached.

+
+
+ +
+
string? GetCached(Icon icon, out bool shouldRefresh)
+
+ +

Parameters

+
+
icon Icon
+

The icon to get.

+
+
shouldRefresh bool
+

Indicates whether the returned file is outdated and EffectiveNetworkUse is Full.

+
+
+ +

Returns

+
+
string
+

The file path of the icon in the cache; null if the icon is not cached yet.

+
+
+ + + + + + + + + + + + + +

+ GetFresh(Icon) + +

+ +

Gets an icon from the cache or downloads it if not yet cached or outdated.

+
+
+ +
+
string GetFresh(Icon icon)
+
+ +

Parameters

+
+
icon Icon
+

The icon to get.

+
+
+ +

Returns

+
+
string
+

The file path of the icon in the cache.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while adding the icon to the cache.

+
+
UnauthorizedAccessException
+

Read or write access to the cache is not permitted.

+
+
WebException
+

A problem occurred while downloading the icon.

+
+
InvalidDataException
+

The icon does not have a valid format.

+
+
+ + + + + +

+ Import(Icon, Stream) + +

+ +

Imports an icon into the cache

+
+
+ +
+
void Import(Icon icon, Stream stream)
+
+ +

Parameters

+
+
icon Icon
+

Metadata about the icon.

+
+
stream Stream
+

The contents of the icon file.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while adding the icon to the cache.

+
+
UnauthorizedAccessException
+

Read or write access to the cache is not permitted.

+
+
InvalidDataException
+

The icon does not have a valid format.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Icons.IconStore.html b/api/ZeroInstall.Store.Icons.IconStore.html new file mode 100644 index 000000000..a990dce8c --- /dev/null +++ b/api/ZeroInstall.Store.Icons.IconStore.html @@ -0,0 +1,484 @@ + + + + + Class IconStore | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IconStore +

+ +
+
Namespace
ZeroInstall.Store.Icons
+
Assembly
ZeroInstall.Store.dll
+
+ +

Stores icon files downloaded from the web as local files.

+
+
+ +
+
public sealed class IconStore : IIconStore
+
+ + + + +
+
Inheritance
+
+ +
IconStore
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + +

Constructors +

+ + + + +

+ IconStore(string, Config, ITaskHandler) + +

+ +

Stores icon files downloaded from the web as local files.

+
+
+ +
+
public IconStore(string path, Config config, ITaskHandler handler)
+
+ +

Parameters

+
+
path string
+
+
config Config
+
+
handler ITaskHandler
+
+
+ + + + + + + + +

Remarks

+

This class is immutable and thread-safe.

+
+ + + + +

Methods +

+ + + + +

+ Get(Icon, out bool) + +

+ +

Gets an icon from the cache or downloads it if not yet cached.

+
+
+ +
+
public string Get(Icon icon, out bool shouldRefresh)
+
+ +

Parameters

+
+
icon Icon
+

The icon to get.

+
+
shouldRefresh bool
+

Indicates whether the returned file is outdated and EffectiveNetworkUse is Full.

+
+
+ +

Returns

+
+
string
+

The file path of the icon in the cache.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while adding the icon to the cache.

+
+
UnauthorizedAccessException
+

Read or write access to the cache is not permitted.

+
+
WebException
+

A problem occurred while downloading the icon.

+
+
InvalidDataException
+

The icon does not have a valid format.

+
+
+ + + + + +

+ GetCached(Icon, out bool) + +

+ +

Tries to get an icon that is already cached.

+
+
+ +
+
public string? GetCached(Icon icon, out bool shouldRefresh)
+
+ +

Parameters

+
+
icon Icon
+

The icon to get.

+
+
shouldRefresh bool
+

Indicates whether the returned file is outdated and EffectiveNetworkUse is Full.

+
+
+ +

Returns

+
+
string
+

The file path of the icon in the cache; null if the icon is not cached yet.

+
+
+ + + + + + + + + + + + + +

+ GetFileName(Icon) + +

+ +

Gets a file name suitable for storing an Icon on the disk.

+
+
+ +
+
public static string GetFileName(Icon icon)
+
+ +

Parameters

+
+
icon Icon
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ GetFresh(Icon) + +

+ +

Gets an icon from the cache or downloads it if not yet cached or outdated.

+
+
+ +
+
public string GetFresh(Icon icon)
+
+ +

Parameters

+
+
icon Icon
+

The icon to get.

+
+
+ +

Returns

+
+
string
+

The file path of the icon in the cache.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while adding the icon to the cache.

+
+
UnauthorizedAccessException
+

Read or write access to the cache is not permitted.

+
+
WebException
+

A problem occurred while downloading the icon.

+
+
InvalidDataException
+

The icon does not have a valid format.

+
+
+ + + + + +

+ Import(Icon, Stream) + +

+ +

Imports an icon into the cache

+
+
+ +
+
public void Import(Icon icon, Stream stream)
+
+ +

Parameters

+
+
icon Icon
+

Metadata about the icon.

+
+
stream Stream
+

The contents of the icon file.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

A problem occurred while adding the icon to the cache.

+
+
UnauthorizedAccessException
+

Read or write access to the cache is not permitted.

+
+
InvalidDataException
+

The icon does not have a valid format.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Icons.IconStoreExtensions.html b/api/ZeroInstall.Store.Icons.IconStoreExtensions.html new file mode 100644 index 000000000..b0331a6ae --- /dev/null +++ b/api/ZeroInstall.Store.Icons.IconStoreExtensions.html @@ -0,0 +1,223 @@ + + + + + Class IconStoreExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class IconStoreExtensions +

+ +
+
Namespace
ZeroInstall.Store.Icons
+
Assembly
ZeroInstall.Store.dll
+
+ +

Provides extension methods for IIconStore.

+
+
+ +
+
public static class IconStoreExtensions
+
+ + + + +
+
Inheritance
+
+ +
IconStoreExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ GetCached(IIconStore, Icon) + +

+ +

Tries to get an icon that is already cached.

+
+
+ +
+
public static string? GetCached(this IIconStore iconStore, Icon icon)
+
+ +

Parameters

+
+
iconStore IIconStore
+

The icon store.

+
+
icon Icon
+

The icon to get.

+
+
+ +

Returns

+
+
string
+

The file path of the icon in the cache; null if the icon is not cached yet.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Icons.html b/api/ZeroInstall.Store.Icons.html new file mode 100644 index 000000000..079e9b5ea --- /dev/null +++ b/api/ZeroInstall.Store.Icons.html @@ -0,0 +1,143 @@ + + + + + Namespace ZeroInstall.Store.Icons | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Store.Icons

+
+

Stores icon files downloaded from the web as local files.

+
+
+
+ +

+Classes +

+
+
IconStore
+

Stores icon files downloaded from the web as local files.

+
+
+
+
IconStoreExtensions
+

Provides extension methods for IIconStore.

+
+
+

+Interfaces +

+
+
IIconStore
+

Stores icon files downloaded from the web as local files.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.CompositeImplementationSink.html b/api/ZeroInstall.Store.Implementations.CompositeImplementationSink.html new file mode 100644 index 000000000..527ee8e2a --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.CompositeImplementationSink.html @@ -0,0 +1,345 @@ + + + + + Class CompositeImplementationSink | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CompositeImplementationSink +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +

Combines multiple IImplementationSinks as a composite.

+
+
+ +
+
public class CompositeImplementationSink : MarshalNoTimeout, IImplementationSink
+
+ + + + +
+
Inheritance
+
+ + + +
CompositeImplementationSink
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + +

Remarks

+

When adding new Implementations the last child IImplementationSink that doesn't throw an UnauthorizedAccessException is used.

+
+ + +

Constructors +

+ + + + +

+ CompositeImplementationSink(IReadOnlyList<IImplementationSink>) + +

+ +

Combines multiple IImplementationSinks as a composite.

+
+
+ +
+
public CompositeImplementationSink(IReadOnlyList<IImplementationSink> sinks)
+
+ +

Parameters

+
+
sinks IReadOnlyList<IImplementationSink>
+

A priority-sorted list of IImplementationSinks. +Queried last-to-first for adding new Implementation.

+
+
+ + + + + + + + +

Remarks

+

When adding new Implementations the last child IImplementationSink that doesn't throw an UnauthorizedAccessException is used.

+
+ + + + +

Methods +

+ + + + +

+ Add(ManifestDigest, Action<IBuilder>) + +

+ +

Adds a new implementation.

+
+
+ +
+
public void Add(ManifestDigest manifestDigest, Action<IBuilder> build)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest the implementation is supposed to match.

+
+
build Action<IBuilder>
+

Callback for building the implementation.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ImplementationAlreadyInStoreException
+

There is already an implementation with the specified manifestDigest in the store.

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
DigestMismatchException
+

The implementation's content doesn't match the manifestDigest.

+
+
+ + + + + +

+ Contains(ManifestDigest) + +

+ +

Determines whether the sink/store contains an implementation identified by a specific ManifestDigest.

+
+
+ +
+
public bool Contains(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest of the implementation to check for.

+
+
+ +

Returns

+
+
bool
+

true if the specified implementation is available in the store; +false if the specified implementation is not available in the store or if read access to the store is not permitted.

+
+
+ + + + + + + +

Remarks

+

If read access to the store is not permitted, no exception is thrown.

+
+ + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.CompositeImplementationStore.html b/api/ZeroInstall.Store.Implementations.CompositeImplementationStore.html new file mode 100644 index 000000000..6bff2f20e --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.CompositeImplementationStore.html @@ -0,0 +1,757 @@ + + + + + Class CompositeImplementationStore | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CompositeImplementationStore +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +

Combines multiple IImplementationStores as a composite.

+
+
+ +
+
public class CompositeImplementationStore : CompositeImplementationSink, IImplementationStore, IImplementationSink
+
+ + + + +
+
Inheritance
+
+ + + + +
CompositeImplementationStore
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + +

Remarks

+

When adding new Implementations the last child IImplementationStore that doesn't throw an UnauthorizedAccessException is used.

+

When when retrieving existing Implementations the first child IImplementationStore that returns true for Contains(ManifestDigest) is used.

+
+ + +

Constructors +

+ + + + +

+ CompositeImplementationStore(IReadOnlyList<IImplementationStore>) + +

+ +

Creates a new composite implementation store with a set of IImplementationStores.

+
+
+ +
+
public CompositeImplementationStore(IReadOnlyList<IImplementationStore> stores)
+
+ +

Parameters

+
+
stores IReadOnlyList<IImplementationStore>
+

A priority-sorted list of IImplementationStores. +Queried last-to-first for adding new Implementations, first-to-last otherwise.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Kind + +

+ +

Indicates what kind of access to this store is possible.

+
+
+ +
+
public ImplementationStoreKind Kind { get; }
+
+ + + + + +

Property Value

+
+
ImplementationStoreKind
+
+
+ + + + + + + + + + +

+ Path + +

+ +

The path to the underlying directory in the file system.

+
+
+ +
+
public string Path { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Stores + +

+ +

The IImplementationStores this store is internally composed of.

+
+
+ +
+
public IReadOnlyList<IImplementationStore> Stores { get; }
+
+ + + + + +

Property Value

+
+
IReadOnlyList<IImplementationStore>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ GetPath(ManifestDigest) + +

+ +

Determines the local path of an implementation with a given ManifestDigest.

+
+
+ +
+
public string? GetPath(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest the implementation to look for.

+
+
+ +

Returns

+
+
string
+

A fully qualified path to the directory containing the implementation; null if the requested implementation could not be found in the store.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

The implementation directory is missing content and could not be deleted.

+
+
UnauthorizedAccessException
+

The implementation directory is missing content and write access to the store is not permitted.

+
+
+ + + + + +

+ ListAll() + +

+ +

Returns a list of all implementations currently in the store.

+
+
+ +
+
public IEnumerable<ManifestDigest> ListAll()
+
+ + +

Returns

+
+
IEnumerable<ManifestDigest>
+

A list of implementations formatted as "algorithm=digest" (e.g. "sha256=123abc").

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading from the store.

+
+
UnauthorizedAccessException
+

Read access to the store is not permitted.

+
+
+ + + + + +

+ ListTemp() + +

+ +

Returns a list of temporary directories currently in the store.

+
+
+ +
+
public IEnumerable<string> ListTemp()
+
+ + +

Returns

+
+
IEnumerable<string>
+

A list of fully qualified paths.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading from the store.

+
+
UnauthorizedAccessException
+

Read access to the store is not permitted.

+
+
+ + + + + +

+ Optimise() + +

+ +

Reads in all the manifest files in the store and looks for duplicates (files with the same permissions, modification time and digest). When it finds a pair, it deletes one and replaces it with a hard-link to the other.

+
+
+ +
+
public long Optimise()
+
+ + +

Returns

+
+
long
+

The number of bytes saved by deduplication.

+
+
+ + + + + + + +

Remarks

+

If the store does not support optimising this method call may be silently ignored.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

Two files could not be hard-linked together.

+
+
UnauthorizedAccessException
+

Write access to the store is not permitted.

+
+
DigestMismatchException
+

A damaged implementation is encountered while optimizing.

+
+
+ + + + + +

+ Purge() + +

+ +

Removes all implementations and temporary directories from a store.

+
+
+ +
+
public void Purge()
+
+ + + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

An implementation could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the store is not permitted.

+
+
+ + + + + +

+ Remove(ManifestDigest) + +

+ +

Removes a specific implementation from the store.

+
+
+ +
+
public bool Remove(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest of the implementation to be removed.

+
+
+ +

Returns

+
+
bool
+

true if the implementation was successfully removed; false if it could not be removed, e.g., because it does not exist or is locked.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
NotAdminException
+

Needs admin rights to delete from this store.

+
+
+ + + + + +

+ RemoveTemp(string) + +

+ +

Removes a specific temporary directory from the store.

+
+
+ +
+
public bool RemoveTemp(string path)
+
+ +

Parameters

+
+
path string
+

The fully qualified path of the directory.

+
+
+ +

Returns

+
+
bool
+

true if the directory was successfully removed; false if it could not be removed, e.g. because it does not exist inside the store.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

The directory could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the store is not permitted.

+
+
+ + + + + +

+ ToString() + +

+ +

Creates string representation suitable for console output.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Verify(ManifestDigest) + +

+ +

Checks whether an implementation in the store still matches the expected digest. +Asks the user whether to delete the implementation if it does not match.

+
+
+ +
+
public void Verify(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest of the implementation to be verified.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
NotSupportedException
+

manifestDigest does not list any supported digests.

+
+
IOException
+

The implementation's directory could not be processed.

+
+
UnauthorizedAccessException
+

Read access to the implementation's directory is not permitted.

+
+
ImplementationNotFoundException
+

No implementation matching manifestDigest could be found in the store.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.DigestMismatchException.html b/api/ZeroInstall.Store.Implementations.DigestMismatchException.html new file mode 100644 index 000000000..b76cf3927 --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.DigestMismatchException.html @@ -0,0 +1,514 @@ + + + + + Class DigestMismatchException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DigestMismatchException +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +

Indicates that the ManifestDigest of an implementation does not match the expected value.

+
+
+ +
+
public sealed class DigestMismatchException : Exception, ISerializable
+
+ + + + +
+
Inheritance
+
+ + +
DigestMismatchException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ DigestMismatchException() + +

+ +

Initializes a new instance of the Exception class.

+
+
+ +
+
public DigestMismatchException()
+
+ + + + + + + + + + + + + + + +

+ DigestMismatchException(string) + +

+ +

Initializes a new instance of the Exception class with a specified error message.

+
+
+ +
+
public DigestMismatchException(string message)
+
+ +

Parameters

+
+
message string
+

The message that describes the error.

+
+
+ + + + + + + + + + + + + + +

+ DigestMismatchException(string, Exception) + +

+ +

Initializes a new instance of the Exception class with a specified error message and a reference to the inner exception that is the cause of this exception.

+
+
+ +
+
public DigestMismatchException(string message, Exception innerException)
+
+ +

Parameters

+
+
message string
+

The error message that explains the reason for the exception.

+
+
innerException Exception
+

The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.

+
+
+ + + + + + + + + + + + + + +

+ DigestMismatchException(string?, string?, Manifest?, Manifest?) + +

+ +

Creates a new digest mismatch exception.

+
+
+ +
+
public DigestMismatchException(string? expectedDigest = null, string? actualDigest = null, Manifest? expectedManifest = null, Manifest? actualManifest = null)
+
+ +

Parameters

+
+
expectedDigest string
+

The digest value the Implementation was supposed to have.

+
+
actualDigest string
+

The digest value that was actually calculated.

+
+
expectedManifest Manifest
+

The Manifest that resulted in the expectedDigest; may be null.

+
+
actualManifest Manifest
+

The Manifest that resulted in the actualDigest.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ ActualDigest + +

+ +

The hash value that was actually calculated.

+
+
+ +
+
public string? ActualDigest { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ActualManifest + +

+ +

The Manifest that resulted in the ActualDigest.

+
+
+ +
+
public Manifest? ActualManifest { get; }
+
+ + + + + +

Property Value

+
+
Manifest
+
+
+ + + + + + + + + + +

+ ExpectedDigest + +

+ +

The hash value the Implementation was supposed to have.

+
+
+ +
+
public string? ExpectedDigest { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ExpectedManifest + +

+ +

The Manifest that resulted in the ExpectedDigest.

+
+
+ +
+
public Manifest? ExpectedManifest { get; }
+
+ + + + + +

Property Value

+
+
Manifest
+
+
+ + + + + + + + + + +

+ LongMessage + +

+ +

A longer version of Message that contains more details. Suitable for verbose output.

+
+
+ +
+
public string LongMessage { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.IImplementationSink.html b/api/ZeroInstall.Store.Implementations.IImplementationSink.html new file mode 100644 index 000000000..cdf239a26 --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.IImplementationSink.html @@ -0,0 +1,246 @@ + + + + + Interface IImplementationSink | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IImplementationSink +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +

Accepts implementations and stores them.

+
+
+ +
+
public interface IImplementationSink
+
+ + + + + + + + + + + + + +

Methods +

+ + + + +

+ Add(ManifestDigest, Action<IBuilder>) + +

+ +

Adds a new implementation.

+
+
+ +
+
void Add(ManifestDigest manifestDigest, Action<IBuilder> build)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest the implementation is supposed to match.

+
+
build Action<IBuilder>
+

Callback for building the implementation.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ImplementationAlreadyInStoreException
+

There is already an implementation with the specified manifestDigest in the store.

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
DigestMismatchException
+

The implementation's content doesn't match the manifestDigest.

+
+
+ + + + + +

+ Contains(ManifestDigest) + +

+ +

Determines whether the sink/store contains an implementation identified by a specific ManifestDigest.

+
+
+ +
+
bool Contains(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest of the implementation to check for.

+
+
+ +

Returns

+
+
bool
+

true if the specified implementation is available in the store; +false if the specified implementation is not available in the store or if read access to the store is not permitted.

+
+
+ + + + + + + +

Remarks

+

If read access to the store is not permitted, no exception is thrown.

+
+ + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.IImplementationStore.html b/api/ZeroInstall.Store.Implementations.IImplementationStore.html new file mode 100644 index 000000000..e914b5ccc --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.IImplementationStore.html @@ -0,0 +1,607 @@ + + + + + Interface IImplementationStore | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IImplementationStore +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +

Manages a directory that stores implementations. Also known as an implementation cache.

+
+
+ +
+
public interface IImplementationStore : IImplementationSink
+
+ + + + + + + +
+
Inherited Members
+
+ + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Properties +

+ + + + +

+ Kind + +

+ +

Indicates what kind of access to this store is possible.

+
+
+ +
+
ImplementationStoreKind Kind { get; }
+
+ + + + + +

Property Value

+
+
ImplementationStoreKind
+
+
+ + + + + + + + + + +

+ Path + +

+ +

The path to the underlying directory in the file system.

+
+
+ +
+
string? Path { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ GetPath(ManifestDigest) + +

+ +

Determines the local path of an implementation with a given ManifestDigest.

+
+
+ +
+
string? GetPath(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest the implementation to look for.

+
+
+ +

Returns

+
+
string
+

A fully qualified path to the directory containing the implementation; null if the requested implementation could not be found in the store.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

The implementation directory is missing content and could not be deleted.

+
+
UnauthorizedAccessException
+

The implementation directory is missing content and write access to the store is not permitted.

+
+
+ + + + + +

+ ListAll() + +

+ +

Returns a list of all implementations currently in the store.

+
+
+ +
+
IEnumerable<ManifestDigest> ListAll()
+
+ + +

Returns

+
+
IEnumerable<ManifestDigest>
+

A list of implementations formatted as "algorithm=digest" (e.g. "sha256=123abc").

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading from the store.

+
+
UnauthorizedAccessException
+

Read access to the store is not permitted.

+
+
+ + + + + +

+ ListTemp() + +

+ +

Returns a list of temporary directories currently in the store.

+
+
+ +
+
IEnumerable<string> ListTemp()
+
+ + +

Returns

+
+
IEnumerable<string>
+

A list of fully qualified paths.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading from the store.

+
+
UnauthorizedAccessException
+

Read access to the store is not permitted.

+
+
+ + + + + +

+ Optimise() + +

+ +

Reads in all the manifest files in the store and looks for duplicates (files with the same permissions, modification time and digest). When it finds a pair, it deletes one and replaces it with a hard-link to the other.

+
+
+ +
+
long Optimise()
+
+ + +

Returns

+
+
long
+

The number of bytes saved by deduplication.

+
+
+ + + + + + + +

Remarks

+

If the store does not support optimising this method call may be silently ignored.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

Two files could not be hard-linked together.

+
+
UnauthorizedAccessException
+

Write access to the store is not permitted.

+
+
DigestMismatchException
+

A damaged implementation is encountered while optimizing.

+
+
+ + + + + +

+ Purge() + +

+ +

Removes all implementations and temporary directories from a store.

+
+
+ +
+
void Purge()
+
+ + + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

An implementation could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the store is not permitted.

+
+
+ + + + + +

+ Remove(ManifestDigest) + +

+ +

Removes a specific implementation from the store.

+
+
+ +
+
bool Remove(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest of the implementation to be removed.

+
+
+ +

Returns

+
+
bool
+

true if the implementation was successfully removed; false if it could not be removed, e.g., because it does not exist or is locked.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
NotAdminException
+

Needs admin rights to delete from this store.

+
+
+ + + + + +

+ RemoveTemp(string) + +

+ +

Removes a specific temporary directory from the store.

+
+
+ +
+
bool RemoveTemp(string path)
+
+ +

Parameters

+
+
path string
+

The fully qualified path of the directory.

+
+
+ +

Returns

+
+
bool
+

true if the directory was successfully removed; false if it could not be removed, e.g. because it does not exist inside the store.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

The directory could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the store is not permitted.

+
+
+ + + + + +

+ Verify(ManifestDigest) + +

+ +

Checks whether an implementation in the store still matches the expected digest. +Asks the user whether to delete the implementation if it does not match.

+
+
+ +
+
void Verify(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest of the implementation to be verified.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
NotSupportedException
+

manifestDigest does not list any supported digests.

+
+
IOException
+

The implementation's directory could not be processed.

+
+
UnauthorizedAccessException
+

Read access to the implementation's directory is not permitted.

+
+
ImplementationNotFoundException
+

No implementation matching manifestDigest could be found in the store.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.ImplementationAlreadyInStoreException.html b/api/ZeroInstall.Store.Implementations.ImplementationAlreadyInStoreException.html new file mode 100644 index 000000000..633f86a1f --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.ImplementationAlreadyInStoreException.html @@ -0,0 +1,377 @@ + + + + + Class ImplementationAlreadyInStoreException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationAlreadyInStoreException +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +

Indicates an Implementation being added to an IImplementationStore is already in the store.

+
+
+ +
+
public sealed class ImplementationAlreadyInStoreException : Exception, ISerializable
+
+ + + + +
+
Inheritance
+
+ + +
ImplementationAlreadyInStoreException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ImplementationAlreadyInStoreException() + +

+ +

Initializes a new instance of the Exception class.

+
+
+ +
+
public ImplementationAlreadyInStoreException()
+
+ + + + + + + + + + + + + + + +

+ ImplementationAlreadyInStoreException(string) + +

+ +

Initializes a new instance of the Exception class with a specified error message.

+
+
+ +
+
public ImplementationAlreadyInStoreException(string message)
+
+ +

Parameters

+
+
message string
+

The message that describes the error.

+
+
+ + + + + + + + + + + + + + +

+ ImplementationAlreadyInStoreException(string, Exception) + +

+ +

Initializes a new instance of the Exception class with a specified error message and a reference to the inner exception that is the cause of this exception.

+
+
+ +
+
public ImplementationAlreadyInStoreException(string message, Exception innerException)
+
+ +

Parameters

+
+
message string
+

The error message that explains the reason for the exception.

+
+
innerException Exception
+

The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.

+
+
+ + + + + + + + + + + + + + +

+ ImplementationAlreadyInStoreException(ManifestDigest) + +

+ +

Creates a new implementation already in store exception.

+
+
+ +
+
public ImplementationAlreadyInStoreException(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest of the Implementation that was supposed to be added.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ ManifestDigest + +

+ +

The hash value the Implementation was supposed to have.

+
+
+ +
+
public ManifestDigest ManifestDigest { get; }
+
+ + + + + +

Property Value

+
+
ManifestDigest
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.ImplementationNotFoundException.html b/api/ZeroInstall.Store.Implementations.ImplementationNotFoundException.html new file mode 100644 index 000000000..d24f41399 --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.ImplementationNotFoundException.html @@ -0,0 +1,379 @@ + + + + + Class ImplementationNotFoundException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationNotFoundException +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +

Indicates an Implementation could not be found in a IImplementationStore.

+
+
+ +
+
public sealed class ImplementationNotFoundException : IOException, ISerializable
+
+ + + + +
+
Inheritance
+
+ + + + +
ImplementationNotFoundException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ImplementationNotFoundException() + +

+ +

Creates a new implementation not found exception without specifying the specific implementation ID.

+
+
+ +
+
public ImplementationNotFoundException()
+
+ + + + + + + + + + + + + + + +

+ ImplementationNotFoundException(string) + +

+ +

Initializes a new instance of the IOException class with its message string set to message, its HRESULT set to COR_E_IO, and its inner exception set to null.

+
+
+ +
+
public ImplementationNotFoundException(string message)
+
+ +

Parameters

+
+
message string
+

A string that describes the error. The content of message is intended to be understood by humans. The caller of this constructor is required to ensure that this string has been localized for the current system culture.

+
+
+ + + + + + + + + + + + + + +

+ ImplementationNotFoundException(string, Exception) + +

+ +

Initializes a new instance of the IOException class with a specified error message and a reference to the inner exception that is the cause of this exception.

+
+
+ +
+
public ImplementationNotFoundException(string message, Exception innerException)
+
+ +

Parameters

+
+
message string
+

The error message that explains the reason for the exception.

+
+
innerException Exception
+

The exception that is the cause of the current exception. If the innerException parameter is not null, the current exception is raised in a catch block that handles the inner exception.

+
+
+ + + + + + + + + + + + + + +

+ ImplementationNotFoundException(ManifestDigest) + +

+ +

Creates a new implementation not found exception.

+
+
+ +
+
public ImplementationNotFoundException(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The ManifestDigest of the Implementation to be found.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ ManifestDigest + +

+ +

The ManifestDigest of the Implementation to be found.

+
+
+ +
+
public ManifestDigest ManifestDigest { get; }
+
+ + + + + +

Property Value

+
+
ManifestDigest
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.ImplementationSink.html b/api/ZeroInstall.Store.Implementations.ImplementationSink.html new file mode 100644 index 000000000..046646010 --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.ImplementationSink.html @@ -0,0 +1,518 @@ + + + + + Class ImplementationSink | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationSink +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +

Accepts implementations and stores them.

+
+
+ +
+
public class ImplementationSink : MarshalNoTimeout, IImplementationSink
+
+ + + + +
+
Inheritance
+
+ + + +
ImplementationSink
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ImplementationSink(string, bool) + +

+ +

Creates a new implementation sink using a specific path to a directory.

+
+
+ +
+
public ImplementationSink(string path, bool useWriteProtection = true)
+
+ +

Parameters

+
+
path string
+

A fully qualified directory path. The directory will be created if it doesn't exist yet.

+
+
useWriteProtection bool
+

Controls whether implementation directories are made write-protected once added to prevent unintentional modification (which would invalidate the manifest digests).

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

The path could not be created or the underlying filesystem can not store file-changed times accurate to the second.

+
+
UnauthorizedAccessException
+

Creating the path is not permitted.

+
+
+ + + +

Fields +

+ + + +

+ ReadOnly + +

+ +

Indicates whether this implementation sink does not support write access.

+
+
+ +
+
protected readonly bool ReadOnly
+
+ + + + +

Field Value

+
+
bool
+
+
+ + + + + + + + + + +

+ UseWriteProtection + +

+ +

Controls whether implementation directories are made write-protected once added to prevent unintentional modification (which would invalidate the manifest digests).

+
+
+ +
+
protected readonly bool UseWriteProtection
+
+ + + + +

Field Value

+
+
bool
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Path + +

+ +

The path to the underlying directory in the file system.

+
+
+ +
+
public string Path { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Add(ManifestDigest, Action<IBuilder>) + +

+ +

Adds a new implementation.

+
+
+ +
+
public void Add(ManifestDigest manifestDigest, Action<IBuilder> build)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest the implementation is supposed to match.

+
+
build Action<IBuilder>
+

Callback for building the implementation.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
ImplementationAlreadyInStoreException
+

There is already an implementation with the specified manifestDigest in the store.

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
DigestMismatchException
+

The implementation's content doesn't match the manifestDigest.

+
+
+ + + + + +

+ Contains(ManifestDigest) + +

+ +

Determines whether the sink/store contains an implementation identified by a specific ManifestDigest.

+
+
+ +
+
public bool Contains(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest of the implementation to check for.

+
+
+ +

Returns

+
+
bool
+

true if the specified implementation is available in the store; +false if the specified implementation is not available in the store or if read access to the store is not permitted.

+
+
+ + + + + + + +

Remarks

+

If read access to the store is not permitted, no exception is thrown.

+
+ + + + + + +

+ GetPath(ManifestDigest) + +

+ +

Determines the local path of an implementation with a given ManifestDigest.

+
+
+ +
+
public string? GetPath(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest the implementation to look for.

+
+
+ +

Returns

+
+
string
+

A fully qualified path to the directory containing the implementation; null if the requested implementation could not be found in the store.

+
+
+ + + + + + + + + + + + + +

+ RemoveDeleteInfoFile() + +

+ +

Removes the file explaining to users how to delete files with write protection.

+
+
+ +
+
protected void RemoveDeleteInfoFile()
+
+ + + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.ImplementationStore.html b/api/ZeroInstall.Store.Implementations.ImplementationStore.html new file mode 100644 index 000000000..c1ee8c864 --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.ImplementationStore.html @@ -0,0 +1,821 @@ + + + + + Class ImplementationStore | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationStore +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +

Manages a directory that stores implementations. Also known as an implementation cache.

+
+
+ +
+
public class ImplementationStore : ImplementationSink, IImplementationStore, IImplementationSink, IEquatable<ImplementationStore>
+
+ + + + +
+
Inheritance
+
+ + + + +
ImplementationStore
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Constructors +

+ + + + +

+ ImplementationStore(string, ITaskHandler, bool) + +

+ +

Manages a directory that stores implementations. Also known as an implementation cache.

+
+
+ +
+
public ImplementationStore(string path, ITaskHandler handler, bool useWriteProtection = true)
+
+ +

Parameters

+
+
path string
+

A fully qualified directory path. The directory will be created if it doesn't exist yet.

+
+
handler ITaskHandler
+

A callback object used when the user is to be informed about progress or asked questions.

+
+
useWriteProtection bool
+

Controls whether implementation directories are made write-protected once added to the store to prevent unintentional modification (which would invalidate the manifest digests).

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

The path could not be created or the underlying filesystem can not store file-changed times accurate to the second.

+
+
UnauthorizedAccessException
+

Creating the path is not permitted.

+
+
+ + + +

Properties +

+ + + + +

+ Kind + +

+ +

Indicates what kind of access to this store is possible.

+
+
+ +
+
public ImplementationStoreKind Kind { get; }
+
+ + + + + +

Property Value

+
+
ImplementationStoreKind
+
+
+ + + + + +

Exceptions

+
+
IOException
+

The path could not be created or the underlying filesystem can not store file-changed times accurate to the second.

+
+
UnauthorizedAccessException
+

Creating the path is not permitted.

+
+
+ + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

The path could not be created or the underlying filesystem can not store file-changed times accurate to the second.

+
+
UnauthorizedAccessException
+

Creating the path is not permitted.

+
+
+ + + + + +

+ Equals(ImplementationStore?) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public bool Equals(ImplementationStore? other)
+
+ +

Parameters

+
+
other ImplementationStore
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

The path could not be created or the underlying filesystem can not store file-changed times accurate to the second.

+
+
UnauthorizedAccessException
+

Creating the path is not permitted.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

The path could not be created or the underlying filesystem can not store file-changed times accurate to the second.

+
+
UnauthorizedAccessException
+

Creating the path is not permitted.

+
+
+ + + + + +

+ ListAll() + +

+ +

Returns a list of all implementations currently in the store.

+
+
+ +
+
public IEnumerable<ManifestDigest> ListAll()
+
+ + +

Returns

+
+
IEnumerable<ManifestDigest>
+

A list of implementations formatted as "algorithm=digest" (e.g. "sha256=123abc").

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading from the store.

+
+
UnauthorizedAccessException
+

Read access to the store is not permitted.

+
+
+ + + + + +

+ ListTemp() + +

+ +

Returns a list of temporary directories currently in the store.

+
+
+ +
+
public IEnumerable<string> ListTemp()
+
+ + +

Returns

+
+
IEnumerable<string>
+

A list of fully qualified paths.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading from the store.

+
+
UnauthorizedAccessException
+

Read access to the store is not permitted.

+
+
+ + + + + +

+ Optimise() + +

+ +

Reads in all the manifest files in the store and looks for duplicates (files with the same permissions, modification time and digest). When it finds a pair, it deletes one and replaces it with a hard-link to the other.

+
+
+ +
+
public long Optimise()
+
+ + +

Returns

+
+
long
+

The number of bytes saved by deduplication.

+
+
+ + + + + + + +

Remarks

+

If the store does not support optimising this method call may be silently ignored.

+
+ +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

Two files could not be hard-linked together.

+
+
UnauthorizedAccessException
+

Write access to the store is not permitted.

+
+
DigestMismatchException
+

A damaged implementation is encountered while optimizing.

+
+
+ + + + + +

+ Purge() + +

+ +

Removes all implementations and temporary directories from a store.

+
+
+ +
+
public void Purge()
+
+ + + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

An implementation could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the store is not permitted.

+
+
+ + + + + +

+ Remove(ManifestDigest) + +

+ +

Removes a specific implementation from the store.

+
+
+ +
+
public bool Remove(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest of the implementation to be removed.

+
+
+ +

Returns

+
+
bool
+

true if the implementation was successfully removed; false if it could not be removed, e.g., because it does not exist or is locked.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
NotAdminException
+

Needs admin rights to delete from this store.

+
+
+ + + + + +

+ RemoveTemp(string) + +

+ +

Removes a specific temporary directory from the store.

+
+
+ +
+
public bool RemoveTemp(string path)
+
+ +

Parameters

+
+
path string
+

The fully qualified path of the directory.

+
+
+ +

Returns

+
+
bool
+

true if the directory was successfully removed; false if it could not be removed, e.g. because it does not exist inside the store.

+
+
+ + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

The directory could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the store is not permitted.

+
+
+ + + + + +

+ ToString() + +

+ +

Creates string representation suitable for console output.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

The path could not be created or the underlying filesystem can not store file-changed times accurate to the second.

+
+
UnauthorizedAccessException
+

Creating the path is not permitted.

+
+
+ + + + + +

+ Verify(ManifestDigest) + +

+ +

Checks whether an implementation in the store still matches the expected digest. +Asks the user whether to delete the implementation if it does not match.

+
+
+ +
+
public void Verify(ManifestDigest manifestDigest)
+
+ +

Parameters

+
+
manifestDigest ManifestDigest
+

The digest of the implementation to be verified.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
NotSupportedException
+

manifestDigest does not list any supported digests.

+
+
IOException
+

The implementation's directory could not be processed.

+
+
UnauthorizedAccessException
+

Read access to the implementation's directory is not permitted.

+
+
ImplementationNotFoundException
+

No implementation matching manifestDigest could be found in the store.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.ImplementationStoreKind.html b/api/ZeroInstall.Store.Implementations.ImplementationStoreKind.html new file mode 100644 index 000000000..0ceffbf79 --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.ImplementationStoreKind.html @@ -0,0 +1,160 @@ + + + + + Enum ImplementationStoreKind | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum ImplementationStoreKind +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +
+
+ +
+
public enum ImplementationStoreKind
+
+ + + + + + + + + +

Fields +

+
+
ReadOnly = 1
+

This store cannot be modified.

+
+
ReadWrite = 0
+

This store can be written to directly.

+
+
Service = 2
+

This store is managed by a background service.

+
+
+ + + +

See Also

+
+ +
+
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.ImplementationStoreUtils.html b/api/ZeroInstall.Store.Implementations.ImplementationStoreUtils.html new file mode 100644 index 000000000..ca5e04195 --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.ImplementationStoreUtils.html @@ -0,0 +1,334 @@ + + + + + Class ImplementationStoreUtils | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationStoreUtils +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +

Helper methods for IImplementationStores and paths.

+
+
+ +
+
public static class ImplementationStoreUtils
+
+ + + + +
+
Inheritance
+
+ +
ImplementationStoreUtils
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ GetPath(IImplementationStore, ImplementationBase) + +

+ +

Determines the local path of an implementation.

+
+
+ +
+
public static string GetPath(this IImplementationStore store, ImplementationBase implementation)
+
+ +

Parameters

+
+
store IImplementationStore
+

The store containing the implementation.

+
+
implementation ImplementationBase
+

The implementation to be located.

+
+
+ +

Returns

+
+
string
+

A fully qualified path to the directory containing the implementation.

+
+
+ + + + + + + + +

Exceptions

+
+
ImplementationNotFoundException
+

The implementation is not cached yet.

+
+
UnauthorizedAccessException
+

Read access to the store is not permitted.

+
+
+ + + + + +

+ IsImplementation(string, out string?) + +

+ +

Determines whether a path looks like it is inside a store implementation known by ManifestFormat.

+
+
+ +
+
public static bool IsImplementation(string path, out string? implementationPath)
+
+ +

Parameters

+
+
path string
+

A path to a directory that may or may not be inside a store implementation.

+
+
implementationPath string
+

The top-level of the detected store implementation directory if any; null otherwise.

+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + +

Remarks

+

Performs no file system access. Only looks at the path string itself.

+
+ + + + + + +

+ Verify(string, ManifestDigest, ITaskHandler) + +

+ +

Checks whether an implementation directory matches the expected digest. +Throws DigestMismatchException if it does not match.

+
+
+ +
+
public static void Verify(string path, ManifestDigest manifestDigest, ITaskHandler handler)
+
+ +

Parameters

+
+
path string
+

The path of the directory ot check.

+
+
manifestDigest ManifestDigest
+

The expected digest.

+
+
handler ITaskHandler
+

A callback object used when the user is to be informed about progress.

+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
NotSupportedException
+

manifestDigest does not list any supported digests.

+
+
IOException
+

The directory could not be processed.

+
+
UnauthorizedAccessException
+

Read access to the directory is not permitted.

+
+
DigestMismatchException
+

The directory does not match the expected digest

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.ImplementationStores.html b/api/ZeroInstall.Store.Implementations.ImplementationStores.html new file mode 100644 index 000000000..3fed79e2a --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.ImplementationStores.html @@ -0,0 +1,444 @@ + + + + + Class ImplementationStores | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationStores +

+ +
+
Namespace
ZeroInstall.Store.Implementations
+
Assembly
ZeroInstall.Store.dll
+
+ +

Manages implementation store directories and provides IImplementationStore instances.

+
+
+ +
+
public static class ImplementationStores
+
+ + + + +
+
Inheritance
+
+ +
ImplementationStores
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ Default(ITaskHandler) + +

+ +

Creates an IImplementationStore instance that uses the default cache locations (based on ImplementationStores.

+
+
+ +
+
public static IImplementationStore Default(ITaskHandler handler)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user is to be informed about progress or asked questions.

+
+
+ +

Returns

+
+
IImplementationStore
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file or one of the stores.

+
+
UnauthorizedAccessException
+

Access to a configuration file or one of the stores was not permitted.

+
+
+ + + + + +

+ GetDirectories(bool) + +

+ +

Returns a list of paths for implementation directories as defined by configuration files including the default locations.

+
+
+ +
+
public static IEnumerable<string> GetDirectories(bool serviceMode = false)
+
+ +

Parameters

+
+
serviceMode bool
+

true to exclude the default location in the user profile, e.g., for system services.

+
+
+ +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + +

Remarks

+

Multiple configuration files apply cumulatively. I.e., directories from both the user config and the system config are used.

+
+ +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file or one of the stores.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
+ + + + + +

+ GetMachineWideDirectories() + +

+ +

Returns a list of custom implementation directories in the current machine-wide configuration.

+
+
+ +
+
public static IEnumerable<string> GetMachineWideDirectories()
+
+ + +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
+ + + + + +

+ GetUserDirectories() + +

+ +

Returns a list of custom implementation directories in the current user configuration.

+
+
+ +
+
public static IEnumerable<string> GetUserDirectories()
+
+ + +

Returns

+
+
IEnumerable<string>
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem accessing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
+ + + + + +

+ SetMachineWideDirectories(IEnumerable<string>) + +

+ +

Sets the list of custom implementation directories in the current machine-wide configuration.

+
+
+ +
+
public static void SetMachineWideDirectories(IEnumerable<string> paths)
+
+ +

Parameters

+
+
paths IEnumerable<string>
+

The list of implementation directories to set.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem writing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
+ + + + + +

+ SetUserDirectories(IEnumerable<string>) + +

+ +

Sets the list of custom implementation directories in the current user configuration.

+
+
+ +
+
public static void SetUserDirectories(IEnumerable<string> paths)
+
+ +

Parameters

+
+
paths IEnumerable<string>
+

The list of implementation directories to set.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

There was a problem writing a configuration file.

+
+
UnauthorizedAccessException
+

Access to a configuration file was not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Implementations.html b/api/ZeroInstall.Store.Implementations.html new file mode 100644 index 000000000..07f7b7b48 --- /dev/null +++ b/api/ZeroInstall.Store.Implementations.html @@ -0,0 +1,190 @@ + + + + + Namespace ZeroInstall.Store.Implementations | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Store.Implementations

+
+

On-disk storage for implementations, i.e. implementation caches.

+
+
+
+ +

+Classes +

+
+
CompositeImplementationSink
+

Combines multiple IImplementationSinks as a composite.

+
+
+
+
CompositeImplementationStore
+

Combines multiple IImplementationStores as a composite.

+
+
+
+
DigestMismatchException
+

Indicates that the ManifestDigest of an implementation does not match the expected value.

+
+
+
+
ImplementationAlreadyInStoreException
+

Indicates an Implementation being added to an IImplementationStore is already in the store.

+
+
+
+
ImplementationNotFoundException
+

Indicates an Implementation could not be found in a IImplementationStore.

+
+
+
+
ImplementationSink
+

Accepts implementations and stores them.

+
+
+
+
ImplementationStore
+

Manages a directory that stores implementations. Also known as an implementation cache.

+
+
+
+
ImplementationStoreUtils
+

Helper methods for IImplementationStores and paths.

+
+
+
+
ImplementationStores
+

Manages implementation store directories and provides IImplementationStore instances.

+
+
+

+Interfaces +

+
+
IImplementationSink
+

Accepts implementations and stores them.

+
+
+
+
IImplementationStore
+

Manages a directory that stores implementations. Also known as an implementation cache.

+
+
+

+Enums +

+
+
ImplementationStoreKind
+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ManagerBase.html b/api/ZeroInstall.Store.ManagerBase.html new file mode 100644 index 000000000..05b45256c --- /dev/null +++ b/api/ZeroInstall.Store.ManagerBase.html @@ -0,0 +1,398 @@ + + + + + Class ManagerBase | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ManagerBase +

+ +
+
Namespace
ZeroInstall.Store
+
Assembly
ZeroInstall.Store.dll
+
+ +

Common base class for managers that need an ITaskHandler and Mutex-based locking.

+
+
+ +
+
[MustDisposeResource]
+public abstract class ManagerBase : IDisposable
+
+ + + + +
+
Inheritance
+
+ +
ManagerBase
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ManagerBase(ITaskHandler, bool) + +

+ +

Common base class for managers that need an ITaskHandler and Mutex-based locking.

+
+
+ +
+
protected ManagerBase(ITaskHandler handler, bool machineWide)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
machineWide bool
+

Apply operations machine-wide instead of just for the current user.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ Handler + +

+ +

A callback object used when the user needs to be asked questions or informed about download and IO tasks.

+
+
+ +
+
protected readonly ITaskHandler Handler
+
+ + + + +

Field Value

+
+
ITaskHandler
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ MachineWide + +

+ +

Apply operations machine-wide instead of just for the current user.

+
+
+ +
+
public bool MachineWide { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ MutexName + +

+ +

The name of the cross-process mutex used by AcquireMutex().

+
+
+ +
+
protected abstract string MutexName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ AcquireMutex() + +

+ +

Tries to acquire a mutex with the name MutexName. Call this at the end of your constructors.

+
+
+ +
+
protected void AcquireMutex()
+
+ + + + + + + + + + +

Exceptions

+
+
TimeoutException
+

Another process is already holding the mutex.

+
+
+ + + + + +

+ Dispose() + +

+ +

Releases the mutex.

+
+
+ +
+
public virtual void Dispose()
+
+ + + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Manifests.Manifest.html b/api/ZeroInstall.Store.Manifests.Manifest.html new file mode 100644 index 000000000..4fbf70366 --- /dev/null +++ b/api/ZeroInstall.Store.Manifests.Manifest.html @@ -0,0 +1,1044 @@ + + + + + Class Manifest | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Manifest +

+ +
+
Namespace
ZeroInstall.Store.Manifests
+
Assembly
ZeroInstall.Store.dll
+
+ +

A manifest lists every directory, file and symlink in a directory and contains a digest of each file's content.

+
+
+ +
+
[Serializable]
+public sealed class Manifest : IReadOnlyDictionary<string, IDictionary<string, ManifestElement>>, IReadOnlyCollection<KeyValuePair<string, IDictionary<string, ManifestElement>>>, IEnumerable<KeyValuePair<string, IDictionary<string, ManifestElement>>>, IEnumerable
+
+ + + + +
+
Inheritance
+
+ +
Manifest
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + +
+ + + + +

Remarks

+ + + +

Constructors +

+ + + + +

+ Manifest(ManifestFormat) + +

+ +

Creates a new manifest.

+
+
+ +
+
public Manifest(ManifestFormat format)
+
+ +

Parameters

+
+
format ManifestFormat
+

The format used to calculate digests, also specifies the algorithm used in Digest.

+
+
+ + + + + + + + + + + + +

Fields +

+ + + +

+ ManifestFile + +

+ +

The well-known file name used to store manifest files in directories.

+
+
+ +
+
public const string ManifestFile = ".manifest"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Count + +

+ +

Gets the number of elements in the collection.

+
+
+ +
+
public int Count { get; }
+
+ + + + + +

Property Value

+
+
int
+

The number of elements in the collection.

+
+
+ + + + + + + + + + +

+ Format + +

+ +

The format of the manifest (which file details are listed, which digest method is used, etc.).

+
+
+ +
+
public ManifestFormat Format { get; }
+
+ + + + + +

Property Value

+
+
ManifestFormat
+
+
+ + + + + + + + + + +

+ this[string] + +

+ +

Gets or adds directory in the manifest.

+
+
+ +
+
public IDictionary<string, ManifestElement> this[string key] { get; }
+
+ +

Parameters

+
+
key string
+

The Unix path of the directory relative to the implementation root. Empty for root.

+
+
+ + + + +

Property Value

+
+
IDictionary<string, ManifestElement>
+
+
+ + + + + + + + + + +

+ Keys + +

+ +

Gets an enumerable collection that contains the keys in the read-only dictionary.

+
+
+ +
+
public IEnumerable<string> Keys { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+

An enumerable collection that contains the keys in the read-only dictionary.

+
+
+ + + + + + + + + + +

+ Lines + +

+ +

The directories and ManifestElements comprising the manifest in line format.

+
+
+ +
+
public IEnumerable<string> Lines { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<string>
+
+
+ + + + + + + + + + +

+ TotalSize + +

+ +

The combined size of all files listed in the manifest in bytes.

+
+
+ +
+
public long TotalSize { get; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + + + + + + + +

+ Values + +

+ +

Gets an enumerable collection that contains the values in the read-only dictionary.

+
+
+ +
+
public IEnumerable<IDictionary<string, ManifestElement>> Values { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<IDictionary<string, ManifestElement>>
+

An enumerable collection that contains the values in the read-only dictionary.

+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Add(string) + +

+ +

Returns an existing directory or adds a new directory (and any missing parents) to the manifest.

+
+
+ +
+
public SortedDictionary<string, ManifestElement> Add(string key)
+
+ +

Parameters

+
+
key string
+

The Unix path of the directory relative to the implementation root.

+
+
+ +

Returns

+
+
SortedDictionary<string, ManifestElement>
+

A dictionary of elements inside the directory.

+
+
+ + + + + + + + + + + + + +

+ CalculateDigest() + +

+ +

Calculates the digest for the manifest in-memory.

+
+
+ +
+
public string CalculateDigest()
+
+ + +

Returns

+
+
string
+

The manifest digest.

+
+
+ + + + + + + + + + + + + +

+ ContainsKey(string) + +

+ +

Determines whether the read-only dictionary contains an element that has the specified key.

+
+
+ +
+
public bool ContainsKey(string key)
+
+ +

Parameters

+
+
key string
+

The key to locate.

+
+
+ +

Returns

+
+
bool
+

true if the read-only dictionary contains an element that has the specified key; otherwise, false.

+
+
+ + + + + + + + +

Exceptions

+
+
ArgumentNullException
+

key is null.

+
+
+ + + + + +

+ Load(Stream, ManifestFormat) + +

+ +

Parses a manifest file stream.

+
+
+ +
+
public static Manifest Load(Stream stream, ManifestFormat format)
+
+ +

Parameters

+
+
stream Stream
+

The stream to load from.

+
+
format ManifestFormat
+

The format of the file and the format of the created Manifest. Comprises the digest method used and the file's format.

+
+
+ +

Returns

+
+
Manifest
+

The parsed content of the file.

+
+
+ + + + + + + + +

Exceptions

+
+
FormatException
+

The file specified is not a valid manifest file.

+
+
+ + + + + +

+ Load(string, ManifestFormat) + +

+ +

Parses a manifest file.

+
+
+ +
+
public static Manifest Load(string path, ManifestFormat format)
+
+ +

Parameters

+
+
path string
+

The path of the file to load.

+
+
format ManifestFormat
+

The format of the file and the format of the created Manifest. Comprises the digest method used and the file's format.

+
+
+ +

Returns

+
+
Manifest
+

The parsed content of the file.

+
+
+ + + + + + + + +

Exceptions

+
+
FormatException
+

The file specified is not a valid manifest file.

+
+
IOException
+

The manifest file could not be read.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
+ + + + + +

+ RejectPath(string) + +

+ +

Determines whether a file path may not be used in implementations.

+
+
+ +
+
public static bool RejectPath(string path)
+
+ +

Parameters

+
+
path string
+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Remove(string) + +

+ +

Removes a directory and all its subdirectories from the manifest.

+
+
+ +
+
public bool Remove(string key)
+
+ +

Parameters

+
+
key string
+

The Unix path of the directory relative to the implementation root.

+
+
+ +

Returns

+
+
bool
+

true if the directory is successfully found and removed; false otherwise.

+
+
+ + + + + + + + + + + + + +

+ Rename(string, string) + +

+ +

Moves a directory and all its subdirectories to a new path.

+
+
+ +
+
public bool Rename(string key, string newKey)
+
+ +

Parameters

+
+
key string
+

The Unix path of the directory relative to the implementation root.

+
+
newKey string
+

The new Unix path of the directory relative to the implementation root.

+
+
+ +

Returns

+
+
bool
+

true if the directory is successfully found and renamed; false otherwise.

+
+
+ + + + + + + + + + + + + +

+ Save(string) + +

+ +

Writes the manifest to a file.

+
+
+ +
+
public void Save(string path)
+
+ +

Parameters

+
+
path string
+

The path of the file to write.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing the file.

+
+
UnauthorizedAccessException
+

Write access to the file is not permitted.

+
+
+ + + + + +

+ ToString() + +

+ +

The directories and ManifestElements comprising the manifest in line format. Safe for parsing.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ TryGetValue(string, out IDictionary<string, ManifestElement>?) + +

+ +

Gets the value that is associated with the specified key.

+
+
+ +
+
public bool TryGetValue(string key, out IDictionary<string, ManifestElement>? value)
+
+ +

Parameters

+
+
key string
+

The key to locate.

+
+
value IDictionary<string, ManifestElement>
+

When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized.

+
+
+ +

Returns

+
+
bool
+

true if the object that implements the IReadOnlyDictionary<TKey, TValue> interface contains an element that has the specified key; otherwise, false.

+
+
+ + + + + + + + +

Exceptions

+
+
ArgumentNullException
+

key is null.

+
+
+ + + + + +

+ TryLoad(string, ManifestFormat) + +

+ +

Tries to parse a manifest file.

+
+
+ +
+
public static Manifest? TryLoad(string path, ManifestFormat format)
+
+ +

Parameters

+
+
path string
+

The path of the file to load.

+
+
format ManifestFormat
+

The format of the file and the format of the created Manifest. Comprises the digest method used and the file's format.

+
+
+ +

Returns

+
+
Manifest
+

The parsed content of the file; null if the file does not exits or has invalid content.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

The manifest file could not be read.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
+ + + + + +

+ WithOffset(TimeSpan) + +

+ +

Creates a copy of the manifest with all timestamps shifted by the specified offset and rounded up to an even number of seconds.

+
+
+ +
+
public Manifest WithOffset(TimeSpan offset)
+
+ +

Parameters

+
+
offset TimeSpan
+
+
+ +

Returns

+
+
Manifest
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Manifests.ManifestBuilder.html b/api/ZeroInstall.Store.Manifests.ManifestBuilder.html new file mode 100644 index 000000000..03f06dee5 --- /dev/null +++ b/api/ZeroInstall.Store.Manifests.ManifestBuilder.html @@ -0,0 +1,651 @@ + + + + + Class ManifestBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ManifestBuilder +

+ +
+
Namespace
ZeroInstall.Store.Manifests
+
Assembly
ZeroInstall.Store.dll
+
+ +

Builds a Manifest for a file system directory.

+
+
+ +
+
public class ManifestBuilder : MarshalNoTimeout, IBuilder, IForwardOnlyBuilder
+
+ + + + +
+
Inheritance
+
+ + + +
ManifestBuilder
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + +
+ +
+
Extension Methods
+
+ + + + + +
+ + + + + +

Constructors +

+ + + + +

+ ManifestBuilder(ManifestFormat) + +

+ +

Builds a Manifest for a file system directory.

+
+
+ +
+
public ManifestBuilder(ManifestFormat format)
+
+ +

Parameters

+
+
format ManifestFormat
+

The manifest format.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Manifest + +

+ +

The manifest.

+
+
+ +
+
public Manifest Manifest { get; }
+
+ + + + + +

Property Value

+
+
Manifest
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ AddDirectory(string) + +

+ +

Adds a subdirectory to the implementation.

+
+
+ +
+
public void AddDirectory(string path)
+
+ +

Parameters

+
+
path string
+

The path of the directory to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ AddFile(string, Stream, UnixTime, bool) + +

+ +

Adds a file to the implementation.

+
+
+ +
+
public void AddFile(string path, Stream stream, UnixTime modifiedTime, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the file to create relative to the implementation root.

+
+
stream Stream
+

The contents of the file.

+
+
modifiedTime UnixTime
+

The last write time to set for the file.

+
+
executable bool
+

true if the file's executable bit is to be set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + + + +

Adds a hardlink to the implementation.

+
+
+ +
+
public void AddHardlink(string path, string target, bool executable = false)
+
+ +

Parameters

+
+
path string
+

The path of the hardlink to create relative to the implementation root.

+
+
target string
+

The path of the existing file the hardlink shall be based on relative to the implementation root. Must point

+
+
executable bool
+

true if the executable bit of the hardlink is set; false otherwise.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
NotSupportedException
+

The currently platform or builder does not support hardlinks. Use AddFile(string, Stream, UnixTime, bool) instead.

+
+
+ + + + + + + +

Adds a symbolic link to the implementation.

+
+
+ +
+
public void AddSymlink(string path, string target)
+
+ +

Parameters

+
+
path string
+

The path of the symlink to create relative to the implementation root.

+
+
target string
+

The target the symbolic link shall point to relative to path. May use non-native path separators.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ MarkAsExecutable(string) + +

+ +

Marks a previously added file as executable.

+
+
+ +
+
public void MarkAsExecutable(string path)
+
+ +

Parameters

+
+
path string
+

The path of the file to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Remove(string) + +

+ +

Removes a file or directory from the implementation.

+
+
+ +
+
public void Remove(string path)
+
+ +

Parameters

+
+
path string
+

The path of the file or directory relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + +

+ Rename(string, string) + +

+ +

Renames a file or directory in the implementation.

+
+
+ +
+
public void Rename(string path, string target)
+
+ +

Parameters

+
+
path string
+

The original path of the file or directory relative to the implementation root.

+
+
target string
+

The new path of the file or directory relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + + + + +

Turns a previously added file into a symlink.

+
+
+ +
+
public void TurnIntoSymlink(string path)
+
+ +

Parameters

+
+
path string
+

The path of the symlink to create relative to the implementation root.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

Access to a resource was denied.

+
+
IOException
+

An IO operation failed.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Manifests.ManifestElement.html b/api/ZeroInstall.Store.Manifests.ManifestElement.html new file mode 100644 index 000000000..319bc6ff6 --- /dev/null +++ b/api/ZeroInstall.Store.Manifests.ManifestElement.html @@ -0,0 +1,341 @@ + + + + + Class ManifestElement | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ManifestElement +

+ +
+
Namespace
ZeroInstall.Store.Manifests
+
Assembly
ZeroInstall.Store.dll
+
+ +

Base class for directory-element entries (files and symlinks) in a Manifest.

+
+
+ +
+
[Serializable]
+public abstract record ManifestElement : IEquatable<ManifestElement>
+
+ + + + +
+
Inheritance
+
+ +
ManifestElement
+
+
+ +
+
Implements
+
+ +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ManifestElement(string, long) + +

+ +

Base class for directory-element entries (files and symlinks) in a Manifest.

+
+
+ +
+
protected ManifestElement(string Digest, long Size)
+
+ +

Parameters

+
+
Digest string
+

The digest of the content of the element calculated using the selected digest algorithm.

+
+
Size long
+

The size of the element in bytes.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Digest + +

+ +

The digest of the content of the element calculated using the selected digest algorithm.

+
+
+ +
+
public string Digest { get; init; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Size + +

+ +

The size of the element in bytes.

+
+
+ +
+
public long Size { get; init; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ToLine(string) + +

+ +

Formats the element in the Manifest line format.

+
+
+ +
+
public abstract string ToLine(string name)
+
+ +

Parameters

+
+
name string
+

The name of the element.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Manifests.ManifestExecutableFile.html b/api/ZeroInstall.Store.Manifests.ManifestExecutableFile.html new file mode 100644 index 000000000..0631347b9 --- /dev/null +++ b/api/ZeroInstall.Store.Manifests.ManifestExecutableFile.html @@ -0,0 +1,279 @@ + + + + + Class ManifestExecutableFile | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ManifestExecutableFile +

+ +
+
Namespace
ZeroInstall.Store.Manifests
+
Assembly
ZeroInstall.Store.dll
+
+ +

An executable file entry in a Manifest.

+
+
+ +
+
[Serializable]
+public sealed record ManifestExecutableFile : ManifestFile, IEquatable<ManifestElement>, IEquatable<ManifestFile>, IEquatable<ManifestExecutableFile>
+
+ + + + +
+
Inheritance
+
+ + + +
ManifestExecutableFile
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ManifestExecutableFile(string, UnixTime, long) + +

+ +

An executable file entry in a Manifest.

+
+
+ +
+
public ManifestExecutableFile(string Digest, UnixTime ModifiedTime, long Size)
+
+ +

Parameters

+
+
Digest string
+

The digest of the content of the file calculated using the selected digest algorithm.

+
+
ModifiedTime UnixTime
+

The time this file was last modified.

+
+
Size long
+

The size of the file in bytes.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ ToLine(string) + +

+ +

Formats the element in the Manifest line format.

+
+
+ +
+
public override string ToLine(string name)
+
+ +

Parameters

+
+
name string
+

The name of the element.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Manifests.ManifestFile.html b/api/ZeroInstall.Store.Manifests.ManifestFile.html new file mode 100644 index 000000000..59f4acd88 --- /dev/null +++ b/api/ZeroInstall.Store.Manifests.ManifestFile.html @@ -0,0 +1,281 @@ + + + + + Class ManifestFile | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ManifestFile +

+ +
+
Namespace
ZeroInstall.Store.Manifests
+
Assembly
ZeroInstall.Store.dll
+
+ +

Base class for file entries in a Manifest.

+
+
+ +
+
[Serializable]
+public abstract record ManifestFile : ManifestElement, IEquatable<ManifestElement>, IEquatable<ManifestFile>
+
+ + + + +
+
Inheritance
+
+ + +
ManifestFile
+
+
+ +
+
Implements
+
+ + +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ManifestFile(string, UnixTime, long) + +

+ +

Base class for file entries in a Manifest.

+
+
+ +
+
protected ManifestFile(string Digest, UnixTime ModifiedTime, long Size)
+
+ +

Parameters

+
+
Digest string
+

The digest of the content of the file calculated using the selected digest algorithm.

+
+
ModifiedTime UnixTime
+

The time this file was last modified.

+
+
Size long
+

The size of the file in bytes.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ ModifiedTime + +

+ +

The time this file was last modified.

+
+
+ +
+
public UnixTime ModifiedTime { get; init; }
+
+ + + + + +

Property Value

+
+
UnixTime
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Manifests.ManifestFormat.html b/api/ZeroInstall.Store.Manifests.ManifestFormat.html new file mode 100644 index 000000000..f1a2d61d9 --- /dev/null +++ b/api/ZeroInstall.Store.Manifests.ManifestFormat.html @@ -0,0 +1,641 @@ + + + + + Class ManifestFormat | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ManifestFormat +

+ +
+
Namespace
ZeroInstall.Store.Manifests
+
Assembly
ZeroInstall.Store.dll
+
+ +

Abstract class to encapsulate the differences between the different formats that can be used to save and load Manifests.

+
+
+ +
+
[Serializable]
+public abstract class ManifestFormat
+
+ + + + +
+
Inheritance
+
+ +
ManifestFormat
+
+
+ + + +
+
Inherited Members
+
+ + + + + + +
+ + + + +

Remarks

+

Comprises: The digest method used and the format specification used to serialize and deserialize manifests.

+
+ + +

Fields +

+ + + +

+ All + +

+ +

All currently supported ManifestFormats listed from best (safest) to worst.

+
+
+ +
+
public static readonly ManifestFormat[] All
+
+ + + + +

Field Value

+
+
ManifestFormat[]
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Prefix + +

+ +

The prefix used to identify the format (e.g. "sha256").

+
+
+ +
+
public abstract string Prefix { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Separator + +

+ +

The separator placed between the Prefix and the actual digest.

+
+
+ +
+
public virtual string Separator { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Sha1New + +

+ +

The ManifestFormat to use for Sha1New.

+
+
+ +
+
public static ManifestFormat Sha1New { get; }
+
+ + + + + +

Property Value

+
+
ManifestFormat
+
+
+ + + + + + + + + + +

+ Sha256 + +

+ +

The ManifestFormat to use for Sha256.

+
+
+ +
+
public static ManifestFormat Sha256 { get; }
+
+ + + + + +

Property Value

+
+
ManifestFormat
+
+
+ + + + + + + + + + +

+ Sha256New + +

+ +

The ManifestFormat to use for Sha256New.

+
+
+ +
+
public static ManifestFormat Sha256New { get; }
+
+ + + + + +

Property Value

+
+
ManifestFormat
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ DigestContent(Stream) + +

+ +

Generates the digest of a implementation file as used within the manifest file.

+
+
+ +
+
public string DigestContent(Stream stream)
+
+ +

Parameters

+
+
stream Stream
+

The content of the implementation file.

+
+
+ +

Returns

+
+
string
+

A string representation of the digest.

+
+
+ + + + + + + + + + + + + +

+ DigestManifest(Manifest) + +

+ +

Generates the digest of a manifest.

+
+
+ +
+
public string DigestManifest(Manifest manifest)
+
+ +

Parameters

+
+
manifest Manifest
+
+
+ +

Returns

+
+
string
+

A string representation of the digest.

+
+
+ + + + + + + + + + + + + +

+ FromPrefix(string) + +

+ +

Selects the correct ManifestFormat based on the digest prefix.

+
+
+ +
+
public static ManifestFormat FromPrefix(string id)
+
+ +

Parameters

+
+
id string
+

The digest id to extract the prefix from or only the prefix.

+
+
+ +

Returns

+
+
ManifestFormat
+
+
+ + + + + + + + +

Exceptions

+
+
NotSupportedException
+

id does not have a supported algorithm prefix.

+
+
+ + + + + +

+ GetHashAlgorithm() + +

+ +

Retrieves a new instance of the hashing algorithm used for generating digests.

+
+
+ +
+
protected abstract HashAlgorithm GetHashAlgorithm()
+
+ + +

Returns

+
+
HashAlgorithm
+
+
+ + + + + + + + + + + + + +

+ SerializeContentDigest(byte[]) + +

+ +

Serializes a hash as digest of an implementation file as used within the manifest file.

+
+
+ +
+
protected virtual string SerializeContentDigest(byte[] hash)
+
+ +

Parameters

+
+
hash byte[]
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ SerializeManifestDigest(byte[]) + +

+ +

Serializes a hash as a digest of a manifest file as used for the implementation directory name.

+
+
+ +
+
protected virtual string SerializeManifestDigest(byte[] hash)
+
+ +

Parameters

+
+
hash byte[]
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns a string that represents the current object.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+

A string that represents the current object.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Manifests.ManifestNormalFile.html b/api/ZeroInstall.Store.Manifests.ManifestNormalFile.html new file mode 100644 index 000000000..deb6a93d1 --- /dev/null +++ b/api/ZeroInstall.Store.Manifests.ManifestNormalFile.html @@ -0,0 +1,279 @@ + + + + + Class ManifestNormalFile | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ManifestNormalFile +

+ +
+
Namespace
ZeroInstall.Store.Manifests
+
Assembly
ZeroInstall.Store.dll
+
+ +

An non-executable file entry in a Manifest.

+
+
+ +
+
[Serializable]
+public sealed record ManifestNormalFile : ManifestFile, IEquatable<ManifestElement>, IEquatable<ManifestFile>, IEquatable<ManifestNormalFile>
+
+ + + + +
+
Inheritance
+
+ + + +
ManifestNormalFile
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ManifestNormalFile(string, UnixTime, long) + +

+ +

An non-executable file entry in a Manifest.

+
+
+ +
+
public ManifestNormalFile(string Digest, UnixTime ModifiedTime, long Size)
+
+ +

Parameters

+
+
Digest string
+

The digest of the content of the file calculated using the selected digest algorithm.

+
+
ModifiedTime UnixTime
+

The time this file was last modified.

+
+
Size long
+

The size of the file in bytes.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ ToLine(string) + +

+ +

Formats the element in the Manifest line format.

+
+
+ +
+
public override string ToLine(string name)
+
+ +

Parameters

+
+
name string
+

The name of the element.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Manifests.ManifestSymlink.html b/api/ZeroInstall.Store.Manifests.ManifestSymlink.html new file mode 100644 index 000000000..a8a81a2d1 --- /dev/null +++ b/api/ZeroInstall.Store.Manifests.ManifestSymlink.html @@ -0,0 +1,271 @@ + + + + + Class ManifestSymlink | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ManifestSymlink +

+ +
+
Namespace
ZeroInstall.Store.Manifests
+
Assembly
ZeroInstall.Store.dll
+
+ +

A symlink entry in a Manifest.

+
+
+ +
+
[Serializable]
+public sealed record ManifestSymlink : ManifestElement, IEquatable<ManifestElement>, IEquatable<ManifestSymlink>
+
+ + + + +
+
Inheritance
+
+ + +
ManifestSymlink
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + + + +

Constructors +

+ + + + + + +

A symlink entry in a Manifest.

+
+
+ +
+
public ManifestSymlink(string Digest, long Size)
+
+ +

Parameters

+
+
Digest string
+

The digest of the link target path.

+
+
Size long
+

The length of the link target path.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + + + +

Formats the element in the Manifest line format.

+
+
+ +
+
public override string ToLine(string name)
+
+ +

Parameters

+
+
name string
+

The name of the element.

+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Manifests.html b/api/ZeroInstall.Store.Manifests.html new file mode 100644 index 000000000..31235ace4 --- /dev/null +++ b/api/ZeroInstall.Store.Manifests.html @@ -0,0 +1,165 @@ + + + + + Namespace ZeroInstall.Store.Manifests | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Store.Manifests

+
+

Manifests list every file, directory and symlink in the tree to allow for digest/hash calculation.

+
+
+
+ +

+Classes +

+
+
Manifest
+

A manifest lists every directory, file and symlink in a directory and contains a digest of each file's content.

+
+
+
+
ManifestBuilder
+

Builds a Manifest for a file system directory.

+
+
+
+
ManifestElement
+

Base class for directory-element entries (files and symlinks) in a Manifest.

+
+
+
+
ManifestExecutableFile
+

An executable file entry in a Manifest.

+
+
+
+
ManifestFile
+

Base class for file entries in a Manifest.

+
+
+
+
ManifestFormat
+

Abstract class to encapsulate the differences between the different formats that can be used to save and load Manifests.

+
+
+
+
ManifestNormalFile
+

An non-executable file entry in a Manifest.

+
+
+
+
ManifestSymlink
+

A symlink entry in a Manifest.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.BadSignature.html b/api/ZeroInstall.Store.Trust.BadSignature.html new file mode 100644 index 000000000..cd3a3bd07 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.BadSignature.html @@ -0,0 +1,264 @@ + + + + + Class BadSignature | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class BadSignature +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Represents a bad signature (i.e., the message has been tampered with).

+
+
+ +
+
public sealed record BadSignature : ErrorSignature, IKeyIDContainer, IEquatable<OpenPgpSignature>, IEquatable<ErrorSignature>, IEquatable<BadSignature>
+
+ + + + +
+
Inheritance
+
+ + + +
BadSignature
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Constructors +

+ + + + +

+ BadSignature(long) + +

+ +

Represents a bad signature (i.e., the message has been tampered with).

+
+
+ +
+
public BadSignature(long KeyID)
+
+ +

Parameters

+
+
KeyID long
+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Returns the signature information in the form "BadSignature: KeyID". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.BouncyCastle.html b/api/ZeroInstall.Store.Trust.BouncyCastle.html new file mode 100644 index 000000000..08d2069a1 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.BouncyCastle.html @@ -0,0 +1,455 @@ + + + + + Class BouncyCastle | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class BouncyCastle +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Provides access to the OpenPGP signature functions of Bouncy Castle.

+
+
+ +
+
public class BouncyCastle : IOpenPgp
+
+ + + + +
+
Inheritance
+
+ +
BouncyCastle
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ + + +
+ + + + + +

Constructors +

+ + + + +

+ BouncyCastle(string) + +

+ +

Provides access to the OpenPGP signature functions of Bouncy Castle.

+
+
+ +
+
public BouncyCastle(string homeDir)
+
+ +

Parameters

+
+
homeDir string
+

The GnuPG home dir to use.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ ExportKey(IKeyIDContainer) + +

+ +

Exports the public key for a specific key in the keyring.

+
+
+ +
+
public string ExportKey(IKeyIDContainer keyIDContainer)
+
+ +

Parameters

+
+
keyIDContainer IKeyIDContainer
+

An object containing the key ID of the public key to export.

+
+
+ +

Returns

+
+
string
+

The public key in ASCII Armored format. Always uses Unix-style linebreaks.

+
+
+ + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

The specified keyIDContainer could not be found in the keyring.

+
+
+ + + + + +

+ ImportKey(ArraySegment<byte>) + +

+ +

Imports a public key into the keyring.

+
+
+ +
+
public void ImportKey(ArraySegment<byte> data)
+
+ +

Parameters

+
+
data ArraySegment<byte>
+

The public key in binary or ASCII Armored format.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

data does not contain a valid public key.

+
+
+ + + + + +

+ ListSecretKeys() + +

+ +

Returns a list of secret keys in the keyring.

+
+
+ +
+
public IEnumerable<OpenPgpSecretKey> ListSecretKeys()
+
+ + +

Returns

+
+
IEnumerable<OpenPgpSecretKey>
+
+
+ + + + + + + + + + + + + +

+ Sign(ArraySegment<byte>, OpenPgpSecretKey, string?) + +

+ +

Creates a detached OpenPGP signature using a specific secret key.

+
+
+ +
+
public byte[] Sign(ArraySegment<byte> data, OpenPgpSecretKey secretKey, string? passphrase = null)
+
+ +

Parameters

+
+
data ArraySegment<byte>
+

The data to sign.

+
+
secretKey OpenPgpSecretKey
+

The secret key to use for signing.

+
+
passphrase string
+

The passphrase to use to unlock the secret key.

+
+
+ +

Returns

+
+
byte[]
+

The signature in binary format.

+
+
+ + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

The specified secretKey could not be found in the keyring.

+
+
WrongPassphraseException
+

passphrase was incorrect.

+
+
+ + + + + +

+ Verify(ArraySegment<byte>, byte[]) + +

+ +

Verifies a detached OpenPGP signature.

+
+
+ +
+
public IEnumerable<OpenPgpSignature> Verify(ArraySegment<byte> data, byte[] signature)
+
+ +

Parameters

+
+
data ArraySegment<byte>
+

The data the signature is for.

+
+
signature byte[]
+

The signature in binary format.

+
+
+ +

Returns

+
+
IEnumerable<OpenPgpSignature>
+

A list of signatures found, both valid and invalid. MissingKeySignature results indicate you need to use ImportKey(ArraySegment<byte>).

+
+
+ + + + + + + + +

Exceptions

+
+
SignatureException
+

signature does not contain syntactically correct signature data.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.Domain.html b/api/ZeroInstall.Store.Trust.Domain.html new file mode 100644 index 000000000..efb1f2c95 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.Domain.html @@ -0,0 +1,280 @@ + + + + + Struct Domain | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct Domain +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

A specific domain with feeds a Key is trusted to sign.

+
+
+ +
+
public record struct Domain : IEquatable<Domain>
+
+ + + + + +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ Domain(string?) + +

+ +

A specific domain with feeds a Key is trusted to sign.

+
+
+ +
+
public Domain(string? Value = null)
+
+ +

Parameters

+
+
Value string
+

A valid domain name (not a full Uri!).

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Value + +

+ +

A valid domain name (not a full Uri!).

+
+
+ +
+
public string? Value { readonly get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Returns the fully qualified type name of this instance.

+
+
+ +
+
public override string? ToString()
+
+ + +

Returns

+
+
string
+

The fully qualified type name.

+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.DomainSet.html b/api/ZeroInstall.Store.Trust.DomainSet.html new file mode 100644 index 000000000..a5996c704 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.DomainSet.html @@ -0,0 +1,385 @@ + + + + + Class DomainSet | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class DomainSet +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

A set of alphabetically sorted Domains.

+
+
+ +
+
public class DomainSet : SortedSet<Domain>, ISet<Domain>, ICollection<Domain>, IReadOnlySet<Domain>, IReadOnlyCollection<Domain>, IEnumerable<Domain>, ICollection, IEnumerable, IDeserializationCallback, ISerializable
+
+ + + + +
+
Inheritance
+
+ + +
DomainSet
+
+
+ +
+
Implements
+
+ + + + + + + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ DomainSet() + +

+ +
+
+ +
+
public DomainSet()
+
+ + + + + + + + + + + + + +

Properties +

+ + + + +

+ this[int] + +

+ +
+
+ +
+
public Domain this[int index] { get; }
+
+ +

Parameters

+
+
index int
+
+
+ + + + +

Property Value

+
+
Domain
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Returns the list of domains in the form "Domain1, Domain2, ...". Safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.ErrorSignature.html b/api/ZeroInstall.Store.Trust.ErrorSignature.html new file mode 100644 index 000000000..353c152c7 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.ErrorSignature.html @@ -0,0 +1,273 @@ + + + + + Class ErrorSignature | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ErrorSignature +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Represents a signature that could not be validated for some reason.

+
+
+ +
+
public record ErrorSignature : OpenPgpSignature, IKeyIDContainer, IEquatable<OpenPgpSignature>, IEquatable<ErrorSignature>
+
+ + + + +
+
Inheritance
+
+ + +
ErrorSignature
+
+
+ +
+
Implements
+
+ + + +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Constructors +

+ + + + +

+ ErrorSignature(long) + +

+ +

Represents a signature that could not be validated for some reason.

+
+
+ +
+
public ErrorSignature(long KeyID)
+
+ +

Parameters

+
+
KeyID long
+

The key ID of the key used to create this signature.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Returns the signature information in the form "ErrorSignature: KeyID". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.GnuPG.html b/api/ZeroInstall.Store.Trust.GnuPG.html new file mode 100644 index 000000000..b4b992961 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.GnuPG.html @@ -0,0 +1,494 @@ + + + + + Class GnuPG | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class GnuPG +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Provides access to the signature functions of GnuPG.

+
+
+ +
+
public class GnuPG : IOpenPgp
+
+ + + + +
+
Inheritance
+
+ +
GnuPG
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ + + +
+ + + + + +

Constructors +

+ + + + +

+ GnuPG(string) + +

+ +

Provides access to the signature functions of GnuPG.

+
+
+ +
+
public GnuPG(string homeDir)
+
+ +

Parameters

+
+
homeDir string
+

The GnuPG home dir to use.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ ExportKey(IKeyIDContainer) + +

+ +

Exports the public key for a specific key in the keyring.

+
+
+ +
+
public string ExportKey(IKeyIDContainer keyIDContainer)
+
+ +

Parameters

+
+
keyIDContainer IKeyIDContainer
+

An object containing the key ID of the public key to export.

+
+
+ +

Returns

+
+
string
+

The public key in ASCII Armored format. Always uses Unix-style linebreaks.

+
+
+ + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

The specified keyIDContainer could not be found in the keyring.

+
+
+ + + + + +

+ GenerateKey() + +

+ +

Launches an interactive process for generating a new keypair.

+
+
+ +
+
public static Process GenerateKey()
+
+ + +

Returns

+
+
Process
+

A handle that can be used to wait for the process to finish.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

The OpenPGP implementation could not be launched.

+
+
+ + + + + +

+ ImportKey(ArraySegment<byte>) + +

+ +

Imports a public key into the keyring.

+
+
+ +
+
public void ImportKey(ArraySegment<byte> data)
+
+ +

Parameters

+
+
data ArraySegment<byte>
+

The public key in binary or ASCII Armored format.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

data does not contain a valid public key.

+
+
+ + + + + +

+ ListSecretKeys() + +

+ +

Returns a list of secret keys in the keyring.

+
+
+ +
+
public IEnumerable<OpenPgpSecretKey> ListSecretKeys()
+
+ + +

Returns

+
+
IEnumerable<OpenPgpSecretKey>
+
+
+ + + + + + + + + + + + + +

+ Sign(ArraySegment<byte>, OpenPgpSecretKey, string?) + +

+ +

Creates a detached OpenPGP signature using a specific secret key.

+
+
+ +
+
public byte[] Sign(ArraySegment<byte> data, OpenPgpSecretKey secretKey, string? passphrase = null)
+
+ +

Parameters

+
+
data ArraySegment<byte>
+

The data to sign.

+
+
secretKey OpenPgpSecretKey
+

The secret key to use for signing.

+
+
passphrase string
+

The passphrase to use to unlock the secret key.

+
+
+ +

Returns

+
+
byte[]
+

The signature in binary format.

+
+
+ + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

The specified secretKey could not be found in the keyring.

+
+
WrongPassphraseException
+

passphrase was incorrect.

+
+
+ + + + + +

+ Verify(ArraySegment<byte>, byte[]) + +

+ +

Verifies a detached OpenPGP signature.

+
+
+ +
+
public IEnumerable<OpenPgpSignature> Verify(ArraySegment<byte> data, byte[] signature)
+
+ +

Parameters

+
+
data ArraySegment<byte>
+

The data the signature is for.

+
+
signature byte[]
+

The signature in binary format.

+
+
+ +

Returns

+
+
IEnumerable<OpenPgpSignature>
+

A list of signatures found, both valid and invalid. MissingKeySignature results indicate you need to use ImportKey(ArraySegment<byte>).

+
+
+ + + + + + + + +

Exceptions

+
+
SignatureException
+

signature does not contain syntactically correct signature data.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.IFingerprintContainer.html b/api/ZeroInstall.Store.Trust.IFingerprintContainer.html new file mode 100644 index 000000000..33b84ae7e --- /dev/null +++ b/api/ZeroInstall.Store.Trust.IFingerprintContainer.html @@ -0,0 +1,198 @@ + + + + + Interface IFingerprintContainer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IFingerprintContainer +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

An object containing a fingerprint for an IOpenPgp public or private key.

+
+
+ +
+
public interface IFingerprintContainer : IKeyIDContainer
+
+ + + + + + + +
+
Inherited Members
+
+ +
+ +
+
Extension Methods
+
+ + +
+ + + + + +

Properties +

+ + + + +

+ Fingerprint + +

+ +

An OpenPGP key fingerprint. Superset of KeyID.

+
+
+ +
+
OpenPgpFingerprint Fingerprint { get; }
+
+ + + + + +

Property Value

+
+
OpenPgpFingerprint
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.IKeyIDContainer.html b/api/ZeroInstall.Store.Trust.IKeyIDContainer.html new file mode 100644 index 000000000..443c38321 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.IKeyIDContainer.html @@ -0,0 +1,188 @@ + + + + + Interface IKeyIDContainer | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IKeyIDContainer +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

An object containing a key ID for an IOpenPgp public or private key.

+
+
+ +
+
public interface IKeyIDContainer
+
+ + + + + + + + +
+
Extension Methods
+
+ +
+ + + + + +

Properties +

+ + + + +

+ KeyID + +

+ +

An OpenPGP key ID. A short identifier for a key. The lower 64 bits of Fingerprint.

+
+
+ +
+
long KeyID { get; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.IOpenPgp.html b/api/ZeroInstall.Store.Trust.IOpenPgp.html new file mode 100644 index 000000000..167e58776 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.IOpenPgp.html @@ -0,0 +1,380 @@ + + + + + Interface IOpenPgp | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IOpenPgp +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Provides access to an encryption/signature system compatible with the OpenPGP standard.

+
+
+ +
+
public interface IOpenPgp
+
+ + + + + + + + +
+
Extension Methods
+
+ + + +
+ + + + + +

Methods +

+ + + + +

+ ExportKey(IKeyIDContainer) + +

+ +

Exports the public key for a specific key in the keyring.

+
+
+ +
+
string ExportKey(IKeyIDContainer keyIDContainer)
+
+ +

Parameters

+
+
keyIDContainer IKeyIDContainer
+

An object containing the key ID of the public key to export.

+
+
+ +

Returns

+
+
string
+

The public key in ASCII Armored format. Always uses Unix-style linebreaks.

+
+
+ + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

The specified keyIDContainer could not be found in the keyring.

+
+
+ + + + + +

+ ImportKey(ArraySegment<byte>) + +

+ +

Imports a public key into the keyring.

+
+
+ +
+
void ImportKey(ArraySegment<byte> data)
+
+ +

Parameters

+
+
data ArraySegment<byte>
+

The public key in binary or ASCII Armored format.

+
+
+ + + + + + + + + +

Exceptions

+
+
InvalidDataException
+

data does not contain a valid public key.

+
+
+ + + + + +

+ ListSecretKeys() + +

+ +

Returns a list of secret keys in the keyring.

+
+
+ +
+
IEnumerable<OpenPgpSecretKey> ListSecretKeys()
+
+ + +

Returns

+
+
IEnumerable<OpenPgpSecretKey>
+
+
+ + + + + + + + + + + + + +

+ Sign(ArraySegment<byte>, OpenPgpSecretKey, string?) + +

+ +

Creates a detached OpenPGP signature using a specific secret key.

+
+
+ +
+
byte[] Sign(ArraySegment<byte> data, OpenPgpSecretKey secretKey, string? passphrase = null)
+
+ +

Parameters

+
+
data ArraySegment<byte>
+

The data to sign.

+
+
secretKey OpenPgpSecretKey
+

The secret key to use for signing.

+
+
passphrase string
+

The passphrase to use to unlock the secret key.

+
+
+ +

Returns

+
+
byte[]
+

The signature in binary format.

+
+
+ + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

The specified secretKey could not be found in the keyring.

+
+
WrongPassphraseException
+

passphrase was incorrect.

+
+
+ + + + + +

+ Verify(ArraySegment<byte>, byte[]) + +

+ +

Verifies a detached OpenPGP signature.

+
+
+ +
+
IEnumerable<OpenPgpSignature> Verify(ArraySegment<byte> data, byte[] signature)
+
+ +

Parameters

+
+
data ArraySegment<byte>
+

The data the signature is for.

+
+
signature byte[]
+

The signature in binary format.

+
+
+ +

Returns

+
+
IEnumerable<OpenPgpSignature>
+

A list of signatures found, both valid and invalid. MissingKeySignature results indicate you need to use ImportKey(ArraySegment<byte>).

+
+
+ + + + + + + + +

Exceptions

+
+
SignatureException
+

signature does not contain syntactically correct signature data.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.Key.html b/api/ZeroInstall.Store.Trust.Key.html new file mode 100644 index 000000000..4afdb5d9a --- /dev/null +++ b/api/ZeroInstall.Store.Trust.Key.html @@ -0,0 +1,470 @@ + + + + + Class Key | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class Key +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

A known OpenPGP key, trusted to sign feeds from a certain set of domains.

+
+
+ +
+
[Equatable]
+public sealed class Key : ICloneable<Key>, IEquatable<Key>
+
+ + + + +
+
Inheritance
+
+ +
Key
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + +
+ + + + + + +

Properties +

+ + + + +

+ Domains + +

+ +

A list of Domains this key is valid for.

+
+
+ +
+
[SetEquality]
+public DomainSet Domains { get; }
+
+ + + + + +

Property Value

+
+
DomainSet
+
+
+ + + + + + + + + + +

+ Fingerprint + +

+ +

The cryptographic fingerprint of this key.

+
+
+ +
+
public string? Fingerprint { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this Key instance.

+
+
+ +
+
public Key Clone()
+
+ + +

Returns

+
+
Key
+

The new copy of the Key.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns the key in the form "Fingerprint: Domain1, Domain2, ...". Safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(Key?, Key?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(Key? left, Key? right)
+
+ +

Parameters

+
+
left Key
+

The left object

+
+
right Key
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(Key?, Key?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(Key? left, Key? right)
+
+ +

Parameters

+
+
left Key
+

The left object

+
+
right Key
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.MissingKeySignature.html b/api/ZeroInstall.Store.Trust.MissingKeySignature.html new file mode 100644 index 000000000..6521576d7 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.MissingKeySignature.html @@ -0,0 +1,265 @@ + + + + + Class MissingKeySignature | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class MissingKeySignature +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Represents a signature that could not yet be verified because the key is missing.

+
+
+ +
+
public sealed record MissingKeySignature : ErrorSignature, IKeyIDContainer, IEquatable<OpenPgpSignature>, IEquatable<ErrorSignature>, IEquatable<MissingKeySignature>
+
+ + + + +
+
Inheritance
+
+ + + +
MissingKeySignature
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Constructors +

+ + + + +

+ MissingKeySignature(long) + +

+ +

Represents a signature that could not yet be verified because the key is missing.

+
+
+ +
+
public MissingKeySignature(long KeyID)
+
+ +

Parameters

+
+
KeyID long
+

The key ID of the key used to create this signature.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Returns the signature information in the form "MissingKeySignature: KeyID". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.OpenPgp.html b/api/ZeroInstall.Store.Trust.OpenPgp.html new file mode 100644 index 000000000..2c5c8b906 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.OpenPgp.html @@ -0,0 +1,319 @@ + + + + + Class OpenPgp | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class OpenPgp +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Provides IOpenPgp instances.

+
+
+ +
+
public static class OpenPgp
+
+ + + + +
+
Inheritance
+
+ +
OpenPgp
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Properties +

+ + + + +

+ SigningHomeDir + +

+ +

The directory containing key rings used for creating signatures.

+
+
+ +
+
public static string SigningHomeDir { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + +

Remarks

+

This matches the normal GnuPG home directory.

+
+ + + + + + +

+ VerifyingHomeDir + +

+ +

The directory containing key rings used for verifying signatures.

+
+
+ +
+
public static string VerifyingHomeDir { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + +

Remarks

+

This is different from the normal GnuPG home directory to avoid polluting user profile with auto-imported public keys.

+
+ + + + +

Methods +

+ + + + +

+ Signing() + +

+ +

Creates an instance of IOpenPgp intended for creating signatures.

+
+
+ +
+
public static IOpenPgp Signing()
+
+ + +

Returns

+
+
IOpenPgp
+
+
+ + + + + + + + + + + + + +

+ Verifying() + +

+ +

Creates an instance of IOpenPgp intended for verifying signatures.

+
+
+ +
+
public static IOpenPgp Verifying()
+
+ + +

Returns

+
+
IOpenPgp
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.OpenPgpExtensions.html b/api/ZeroInstall.Store.Trust.OpenPgpExtensions.html new file mode 100644 index 000000000..e16f95f36 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.OpenPgpExtensions.html @@ -0,0 +1,275 @@ + + + + + Class OpenPgpExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class OpenPgpExtensions +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Provides extension methods for IOpenPgp implementations.

+
+
+ +
+
public static class OpenPgpExtensions
+
+ + + + +
+
Inheritance
+
+ +
OpenPgpExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ GetSecretKey(IOpenPgp, string?) + +

+ +

Returns a specific secret key in the keyring.

+
+
+ +
+
public static OpenPgpSecretKey GetSecretKey(this IOpenPgp openPgp, string? keySpecifier = null)
+
+ +

Parameters

+
+
openPgp IOpenPgp
+

The IOpenPgp implementation.

+
+
keySpecifier string
+

The key ID, fingerprint or any part of a user ID that identifies the keypair; null to use the default key.

+
+
+ +

Returns

+
+
OpenPgpSecretKey
+
+
+ + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

The specified key could not be found on the system.

+
+
+ + + + + +

+ GetSecretKey(IOpenPgp, IKeyIDContainer) + +

+ +

Returns a specific secret key in the keyring.

+
+
+ +
+
public static OpenPgpSecretKey GetSecretKey(this IOpenPgp openPgp, IKeyIDContainer keyIDContainer)
+
+ +

Parameters

+
+
openPgp IOpenPgp
+

The IOpenPgp implementation.

+
+
keyIDContainer IKeyIDContainer
+

An object containing the key ID that identifies the keypair.

+
+
+ +

Returns

+
+
OpenPgpSecretKey
+
+
+ + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

The specified key could not be found on the system.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.OpenPgpFingerprint.html b/api/ZeroInstall.Store.Trust.OpenPgpFingerprint.html new file mode 100644 index 000000000..c405033a3 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.OpenPgpFingerprint.html @@ -0,0 +1,370 @@ + + + + + Class OpenPgpFingerprint | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class OpenPgpFingerprint +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

An OpenPGP key fingerprint.

+
+
+ +
+
[Equatable]
+public record OpenPgpFingerprint : IEquatable<OpenPgpFingerprint>
+
+ + + + +
+
Inheritance
+
+ +
OpenPgpFingerprint
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ OpenPgpFingerprint(byte[]) + +

+ +

An OpenPGP key fingerprint.

+
+
+ +
+
public OpenPgpFingerprint(byte[] Identifier)
+
+ +

Parameters

+
+
Identifier byte[]
+

A long identifier for an OpenPGP key.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Identifier + +

+ +

A long identifier for an OpenPGP key.

+
+
+ +
+
[OrderedEquality]
+public byte[] Identifier { get; init; }
+
+ + + + + +

Property Value

+
+
byte[]
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(OpenPgpFingerprint?) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public virtual bool Equals(OpenPgpFingerprint? other)
+
+ +

Parameters

+
+
other OpenPgpFingerprint
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ implicit operator byte[](OpenPgpFingerprint) + +

+ +
+
+ +
+
public static implicit operator byte[](OpenPgpFingerprint fingerprint)
+
+ +

Parameters

+
+
fingerprint OpenPgpFingerprint
+
+
+ +

Returns

+
+
byte[]
+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.OpenPgpSecretKey.html b/api/ZeroInstall.Store.Trust.OpenPgpSecretKey.html new file mode 100644 index 000000000..f038a2882 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.OpenPgpSecretKey.html @@ -0,0 +1,368 @@ + + + + + Class OpenPgpSecretKey | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class OpenPgpSecretKey +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Represents a secret key stored in a local IOpenPgp profile.

+
+
+ +
+
public sealed record OpenPgpSecretKey : IFingerprintContainer, IKeyIDContainer, IEquatable<OpenPgpSecretKey>
+
+ + + + +
+
Inheritance
+
+ +
OpenPgpSecretKey
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + +
+ +
+
Extension Methods
+
+ + +
+ + + + + +

Constructors +

+ + + + +

+ OpenPgpSecretKey(long, OpenPgpFingerprint, string) + +

+ +

Represents a secret key stored in a local IOpenPgp profile.

+
+
+ +
+
public OpenPgpSecretKey(long KeyID, OpenPgpFingerprint Fingerprint, string UserID)
+
+ +

Parameters

+
+
KeyID long
+

The key ID of the key.

+
+
Fingerprint OpenPgpFingerprint
+

The fingerprint of the key.

+
+
UserID string
+

The user's name, e-mail address, etc. of the key owner.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Fingerprint + +

+ +

The fingerprint of the key.

+
+
+ +
+
public OpenPgpFingerprint Fingerprint { get; init; }
+
+ + + + + +

Property Value

+
+
OpenPgpFingerprint
+
+
+ + + + + + + + + + +

+ KeyID + +

+ +

The key ID of the key.

+
+
+ +
+
public long KeyID { get; init; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + + + + + + + +

+ UserID + +

+ +

The user's name, e-mail address, etc. of the key owner.

+
+
+ +
+
public string UserID { get; init; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Returns the secret key in the form "UserID". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.OpenPgpSignature.html b/api/ZeroInstall.Store.Trust.OpenPgpSignature.html new file mode 100644 index 000000000..0d9a16b2f --- /dev/null +++ b/api/ZeroInstall.Store.Trust.OpenPgpSignature.html @@ -0,0 +1,270 @@ + + + + + Class OpenPgpSignature | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class OpenPgpSignature +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Represents a signature checked by an IOpenPgp implementation.

+
+
+ +
+
public abstract record OpenPgpSignature : IKeyIDContainer, IEquatable<OpenPgpSignature>
+
+ + + + +
+
Inheritance
+
+ +
OpenPgpSignature
+
+
+ +
+
Implements
+
+ + +
+
+ +
+
Derived
+
+ + +
+
+ +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Constructors +

+ + + + +

+ OpenPgpSignature(long) + +

+ +

Represents a signature checked by an IOpenPgp implementation.

+
+
+ +
+
protected OpenPgpSignature(long KeyID)
+
+ +

Parameters

+
+
KeyID long
+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ KeyID + +

+ +

An OpenPGP key ID. A short identifier for a key. The lower 64 bits of Fingerprint.

+
+
+ +
+
public long KeyID { get; init; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.OpenPgpUtils.html b/api/ZeroInstall.Store.Trust.OpenPgpUtils.html new file mode 100644 index 000000000..1fbc2e819 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.OpenPgpUtils.html @@ -0,0 +1,306 @@ + + + + + Class OpenPgpUtils | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class OpenPgpUtils +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Helper methods for IKeyIDContainer and IFingerprintContainer.

+
+
+ +
+
public static class OpenPgpUtils
+
+ + + + +
+
Inheritance
+
+ +
OpenPgpUtils
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ DeployPublicKey(IOpenPgp, IKeyIDContainer, string) + +

+ +

Exports an OpenPGP public key to a key file.

+
+
+ +
+
public static void DeployPublicKey(this IOpenPgp openPgp, IKeyIDContainer keyID, string path)
+
+ +

Parameters

+
+
openPgp IOpenPgp
+

The OpenPGP-compatible system used to manage keys.

+
+
keyID IKeyIDContainer
+

The key ID to get the public key for.

+
+
path string
+

The directory to write the key file to.

+
+
+ + + + + + + + + +

Exceptions

+
+
UnauthorizedAccessException
+

The file could not be read or written.

+
+
UnauthorizedAccessException
+

Write access to the directory is not permitted.

+
+
IOException
+

The specified keyID could not be found on the system.

+
+
+ + + + + +

+ FormatFingerprint(IFingerprintContainer) + +

+ +

Formats a key fingerprint as a canonical string.

+
+
+ +
+
public static string FormatFingerprint(this IFingerprintContainer fingerprintContainer)
+
+ +

Parameters

+
+
fingerprintContainer IFingerprintContainer
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ FormatKeyID(IKeyIDContainer) + +

+ +

Formats a key ID as a canonical string.

+
+
+ +
+
public static string FormatKeyID(this IKeyIDContainer keyIDContainer)
+
+ +

Parameters

+
+
keyIDContainer IKeyIDContainer
+
+
+ +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.SignatureException.html b/api/ZeroInstall.Store.Trust.SignatureException.html new file mode 100644 index 000000000..103249968 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.SignatureException.html @@ -0,0 +1,308 @@ + + + + + Class SignatureException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SignatureException +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Indicates the IOpenPgp implementation detected a problem with a digital signature.

+
+
+ +
+
public sealed class SignatureException : Exception, ISerializable
+
+ + + + +
+
Inheritance
+
+ + +
SignatureException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ SignatureException() + +

+ +

Initializes a new instance of the Exception class.

+
+
+ +
+
public SignatureException()
+
+ + + + + + + + + + + + + + + +

+ SignatureException(string) + +

+ +

Initializes a new instance of the Exception class with a specified error message.

+
+
+ +
+
public SignatureException(string message)
+
+ +

Parameters

+
+
message string
+

The message that describes the error.

+
+
+ + + + + + + + + + + + + + +

+ SignatureException(string, Exception) + +

+ +

Initializes a new instance of the Exception class with a specified error message and a reference to the inner exception that is the cause of this exception.

+
+
+ +
+
public SignatureException(string message, Exception innerException)
+
+ +

Parameters

+
+
message string
+

The error message that explains the reason for the exception.

+
+
innerException Exception
+

The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.TrustDB.html b/api/ZeroInstall.Store.Trust.TrustDB.html new file mode 100644 index 000000000..a9297b337 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.TrustDB.html @@ -0,0 +1,893 @@ + + + + + Class TrustDB | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TrustDB +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

A database of OpenPGP signature fingerprints the users trusts to sign Feeds coming from specific domains.

+
+
+ +
+
[XmlNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance")]
+[Equatable]
+public sealed class TrustDB : ICloneable<TrustDB>, IEquatable<TrustDB>
+
+ + + + +
+
Inheritance
+
+ +
TrustDB
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + +
+ +
+
Extension Methods
+
+ +
+ + + + + +

Fields +

+ + + +

+ XmlNamespace + +

+ +

The XML namespace used for storing trust-related data.

+
+
+ +
+
public const string XmlNamespace = "http://zero-install.sourceforge.net/2007/injector/trust"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ XsdLocation + +

+ +

The URI to retrieve an XSD containing the XML Schema information for this class in serialized form.

+
+
+ +
+
public const string XsdLocation = "https://docs.0install.net/specifications/trust.xsd"
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + + +

+ XsiSchemaLocation + +

+ +

Provides XML Editors with location hints for XSD files.

+
+
+ +
+
public string XsiSchemaLocation
+
+ + + + +

Field Value

+
+
string
+
+
+ + + + + + + + + +

Properties +

+ + + + +

+ Keys + +

+ +

A list of known Keys.

+
+
+ +
+
[UnorderedEquality]
+public List<Key> Keys { get; }
+
+ + + + + +

Property Value

+
+
List<Key>
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Clone() + +

+ +

Creates a deep copy of this TrustDB instance.

+
+
+ +
+
public TrustDB Clone()
+
+ + +

Returns

+
+
TrustDB
+

The new copy of the TrustDB.

+
+
+ + + + + + + + + + + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ IsTrusted(string, Domain) + +

+ +

Checks whether a key is trusted for a specific domain.

+
+
+ +
+
public bool IsTrusted(string fingerprint, Domain domain)
+
+ +

Parameters

+
+
fingerprint string
+

The fingerprint of the key to check.

+
+
domain Domain
+

The domain the key should be valid for.

+
+
+ +

Returns

+
+
bool
+
+
+ + + + + + + + + + + + + +

+ Load() + +

+ +

Loads the TrustDB from the default locations, merging multiple files if found. +Returns an empty TrustDB if no files were found.

+
+
+ +
+
public static TrustDB Load()
+
+ + +

Returns

+
+
TrustDB
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ Load(string) + +

+ +

Loads the TrustDB from a file.

+
+
+ +
+
public static TrustDB Load(string path)
+
+ +

Parameters

+
+
path string
+

The file to load from.

+
+
+ +

Returns

+
+
TrustDB
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file.

+
+
UnauthorizedAccessException
+

Read access to the file is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ LoadMachineWide() + +

+ +

Loads the TrustDB from the machine-wide location. +Returns an empty TrustDB if the file does not exist.

+
+
+ +
+
public static TrustDB LoadMachineWide()
+
+ + +

Returns

+
+
TrustDB
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading the file or creating a directory.

+
+
UnauthorizedAccessException
+

Read access to the file or creating a directory is not permitted.

+
+
InvalidDataException
+

A problem occurred while deserializing an XML file.

+
+
+ + + + + +

+ LoadSafe() + +

+ +

Tries to load the TrustDB from the default locations, merging multiple files if found. +Returns an empty TrustDB on errors.

+
+
+ +
+
public static TrustDB LoadSafe()
+
+ + +

Returns

+
+
TrustDB
+
+
+ + + + + + + + + + + + + +

+ Save(string?) + +

+ +

Saves this TrustDB to a file.

+
+
+ +
+
public void Save(string? path = null)
+
+ +

Parameters

+
+
path string
+

The file to save to. Defaults to the location the file was loaded from or the user profile.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while writing the file.

+
+
UnauthorizedAccessException
+

Write access to the file is not permitted.

+
+
+ + + + + +

+ TrustKey(string, Domain) + +

+ +

Trusts feeds from a specific domain when signed with a specific key.

+
+
+ +
+
public TrustDB TrustKey(string fingerprint, Domain domain)
+
+ +

Parameters

+
+
fingerprint string
+

The fingerprint of the key to trust.

+
+
domain Domain
+

The domain the key should be trusted for.

+
+
+ +

Returns

+
+
TrustDB
+

The same TrustDB, for fluent-style use.

+
+
+ + + + + + + + + + + + + +

+ UntrustKey(string) + +

+ +

Stops trusting feeds signed with a specific key.

+
+
+ +
+
public bool UntrustKey(string fingerprint)
+
+ +

Parameters

+
+
fingerprint string
+

The fingerprint of the key to remove.

+
+
+ +

Returns

+
+
bool
+

true if the key was removed, false if the key was not found in the database.

+
+
+ + + + + + + + + + + + + +

+ UntrustKey(string, Domain) + +

+ +

Stops trusting feeds from a specific domain when signed with a specific key.

+
+
+ +
+
public bool UntrustKey(string fingerprint, Domain domain)
+
+ +

Parameters

+
+
fingerprint string
+

The fingerprint of the key to remove.

+
+
domain Domain
+

The domain the key should be removed for.

+
+
+ +

Returns

+
+
bool
+

true if the key was removed, false if the key was not found in the database.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(TrustDB?, TrustDB?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(TrustDB? left, TrustDB? right)
+
+ +

Parameters

+
+
left TrustDB
+

The left object

+
+
right TrustDB
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(TrustDB?, TrustDB?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(TrustDB? left, TrustDB? right)
+
+ +

Parameters

+
+
left TrustDB
+

The left object

+
+
right TrustDB
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.ValidSignature.html b/api/ZeroInstall.Store.Trust.ValidSignature.html new file mode 100644 index 000000000..f817d0908 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.ValidSignature.html @@ -0,0 +1,341 @@ + + + + + Class ValidSignature | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ValidSignature +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Represents a valid signature.

+
+
+ +
+
public sealed record ValidSignature : OpenPgpSignature, IEquatable<OpenPgpSignature>, IFingerprintContainer, IKeyIDContainer, IEquatable<ValidSignature>
+
+ + + + +
+
Inheritance
+
+ + +
ValidSignature
+
+
+ +
+
Implements
+
+ + + + +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ +
+
Extension Methods
+
+ + +
+ + + + + +

Constructors +

+ + + + +

+ ValidSignature(long, OpenPgpFingerprint, DateTime) + +

+ +

Represents a valid signature.

+
+
+ +
+
public ValidSignature(long KeyID, OpenPgpFingerprint Fingerprint, DateTime Timestamp)
+
+ +

Parameters

+
+
KeyID long
+

The key ID of the key used to create this signature.

+
+
Fingerprint OpenPgpFingerprint
+

The fingerprint of the key used to create this signature.

+
+
Timestamp DateTime
+

The point in time when the signature was created in UTC.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Fingerprint + +

+ +

The fingerprint of the key used to create this signature.

+
+
+ +
+
public OpenPgpFingerprint Fingerprint { get; init; }
+
+ + + + + +

Property Value

+
+
OpenPgpFingerprint
+
+
+ + + + + + + + + + +

+ Timestamp + +

+ +

The point in time when the signature was created in UTC.

+
+
+ +
+
public DateTime Timestamp { get; init; }
+
+ + + + + +

Property Value

+
+
DateTime
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Returns the signature information in the form "ValidSignature: Fingerprint (Timestamp)". Not safe for parsing!

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.WrongPassphraseException.html b/api/ZeroInstall.Store.Trust.WrongPassphraseException.html new file mode 100644 index 000000000..94abd105d --- /dev/null +++ b/api/ZeroInstall.Store.Trust.WrongPassphraseException.html @@ -0,0 +1,308 @@ + + + + + Class WrongPassphraseException | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class WrongPassphraseException +

+ +
+
Namespace
ZeroInstall.Store.Trust
+
Assembly
ZeroInstall.Store.dll
+
+ +

Indicates that an incorrect passphrase was passed to GnuPG.

+
+
+ +
+
public sealed class WrongPassphraseException : Exception, ISerializable
+
+ + + + +
+
Inheritance
+
+ + +
WrongPassphraseException
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ WrongPassphraseException() + +

+ +

Indicates that an incorrect passphrase was passed to GnuPG.

+
+
+ +
+
public WrongPassphraseException()
+
+ + + + + + + + + + + + + + + +

+ WrongPassphraseException(string) + +

+ +

Initializes a new instance of the Exception class with a specified error message.

+
+
+ +
+
public WrongPassphraseException(string message)
+
+ +

Parameters

+
+
message string
+

The message that describes the error.

+
+
+ + + + + + + + + + + + + + +

+ WrongPassphraseException(string, Exception) + +

+ +

Initializes a new instance of the Exception class with a specified error message and a reference to the inner exception that is the cause of this exception.

+
+
+ +
+
public WrongPassphraseException(string message, Exception innerException)
+
+ +

Parameters

+
+
message string
+

The error message that explains the reason for the exception.

+
+
innerException Exception
+

The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.

+
+
+ + + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.Trust.html b/api/ZeroInstall.Store.Trust.html new file mode 100644 index 000000000..94b213ed5 --- /dev/null +++ b/api/ZeroInstall.Store.Trust.html @@ -0,0 +1,236 @@ + + + + + Namespace ZeroInstall.Store.Trust | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Store.Trust

+
+

Structures and logic for OpenPGP signatures and trust (which domains the user associates with which signatures).

+
+
+
+ +

+Classes +

+
+
BadSignature
+

Represents a bad signature (i.e., the message has been tampered with).

+
+
+
+
BouncyCastle
+

Provides access to the OpenPGP signature functions of Bouncy Castle.

+
+
+
+
DomainSet
+

A set of alphabetically sorted Domains.

+
+
+
+
ErrorSignature
+

Represents a signature that could not be validated for some reason.

+
+
+
+
GnuPG
+

Provides access to the signature functions of GnuPG.

+
+
+
+
Key
+

A known OpenPGP key, trusted to sign feeds from a certain set of domains.

+
+
+
+
MissingKeySignature
+

Represents a signature that could not yet be verified because the key is missing.

+
+
+
+
OpenPgp
+

Provides IOpenPgp instances.

+
+
+
+
OpenPgpExtensions
+

Provides extension methods for IOpenPgp implementations.

+
+
+
+
OpenPgpFingerprint
+

An OpenPGP key fingerprint.

+
+
+
+
OpenPgpSecretKey
+

Represents a secret key stored in a local IOpenPgp profile.

+
+
+
+
OpenPgpSignature
+

Represents a signature checked by an IOpenPgp implementation.

+
+
+
+
OpenPgpUtils
+

Helper methods for IKeyIDContainer and IFingerprintContainer.

+
+
+
+
SignatureException
+

Indicates the IOpenPgp implementation detected a problem with a digital signature.

+
+
+
+
TrustDB
+

A database of OpenPGP signature fingerprints the users trusts to sign Feeds coming from specific domains.

+
+
+
+
ValidSignature
+

Represents a valid signature.

+
+
+
+
WrongPassphraseException
+

Indicates that an incorrect passphrase was passed to GnuPG.

+
+
+

+Structs +

+
+
Domain
+

A specific domain with feeds a Key is trusted to sign.

+
+
+

+Interfaces +

+
+
IFingerprintContainer
+

An object containing a fingerprint for an IOpenPgp public or private key.

+
+
+
+
IKeyIDContainer
+

An object containing a key ID for an IOpenPgp public or private key.

+
+
+
+
IOpenPgp
+

Provides access to an encryption/signature system compatible with the OpenPGP standard.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ViewModel.CacheNode.html b/api/ZeroInstall.Store.ViewModel.CacheNode.html new file mode 100644 index 000000000..554abfe89 --- /dev/null +++ b/api/ZeroInstall.Store.ViewModel.CacheNode.html @@ -0,0 +1,589 @@ + + + + + Class CacheNode | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CacheNode +

+ +
+
Namespace
ZeroInstall.Store.ViewModel
+
Assembly
ZeroInstall.Store.dll
+
+ +

Models information about elements in a cache for display in a UI.

+
+
+ +
+
public abstract class CacheNode : INamed, IEquatable<CacheNode>
+
+ + + + +
+
Inheritance
+
+ +
CacheNode
+
+
+ +
+
Implements
+
+ + +
+
+ +
+
Derived
+
+ + + +
+
+ +
+
Inherited Members
+
+ + + + +
+ + + + + + +

Constructors +

+ + + + +

+ CacheNode(string, long) + +

+ +

Models information about elements in a cache for display in a UI.

+
+
+ +
+
protected CacheNode(string path, long size)
+
+ +

Parameters

+
+
path string
+

The path of the directory.

+
+
size long
+

The total size of the directory in bytes.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Name + +

+ +

The full name of the node used for tree hierarchies.

+
+
+ +
+
[Browsable(false)]
+public abstract string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Path + +

+ +

The path of the directory.

+
+
+ +
+
public string Path { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Size + +

+ +

The total size of the directory in bytes.

+
+
+ +
+
[Browsable(false)]
+public long Size { get; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + + + + + + + +

+ SizeHuman + +

+ +

The total size of the directory in human-readable form.

+
+
+ +
+
public string SizeHuman { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ SuffixCounter + +

+ +

A counter that can be used to prevent naming collisions.

+
+
+ +
+
[Browsable(false)]
+public int SuffixCounter { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + +

Remarks

+

If this value is not zero it is appended to the Name.

+
+ + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ Equals(CacheNode?) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public abstract bool Equals(CacheNode? other)
+
+ +

Parameters

+
+
other CacheNode
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Remove(IFeedCache?, IImplementationStore?) + +

+ +

Removes this element from the cache it is stored in.

+
+
+ +
+
public abstract void Remove(IFeedCache? feedCache = null, IImplementationStore? implementationStore = null)
+
+ +

Parameters

+
+
feedCache IFeedCache
+
+
implementationStore IImplementationStore
+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
KeyNotFoundException
+

No matching element could be found in the cache.

+
+
IOException
+

The element could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the cache is not permitted.

+
+
+ + + + + +

+ ToString() + +

+ +

Creates string representation suitable for console output.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ViewModel.CacheNodeBuilder.html b/api/ZeroInstall.Store.ViewModel.CacheNodeBuilder.html new file mode 100644 index 000000000..6ebc98ec5 --- /dev/null +++ b/api/ZeroInstall.Store.ViewModel.CacheNodeBuilder.html @@ -0,0 +1,262 @@ + + + + + Class CacheNodeBuilder | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CacheNodeBuilder +

+ +
+
Namespace
ZeroInstall.Store.ViewModel
+
Assembly
ZeroInstall.Store.dll
+
+ +

Builds CacheNodes for Feeds and Implementations.

+
+
+ +
+
public sealed class CacheNodeBuilder
+
+ + + + +
+
Inheritance
+
+ +
CacheNodeBuilder
+
+
+ + + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ CacheNodeBuilder(ITaskHandler, IFeedCache, IImplementationStore?) + +

+ +

Creates a new cache node builder.

+
+
+ +
+
public CacheNodeBuilder(ITaskHandler handler, IFeedCache feedCache, IImplementationStore? implementationStore = null)
+
+ +

Parameters

+
+
handler ITaskHandler
+

A callback object used when the user needs to be informed about IO tasks.

+
+
feedCache IFeedCache
+

Used to get local feed files.

+
+
implementationStore IImplementationStore
+

Used to get cached implementations. Leave unset to only list feeds.

+
+
+ + + + + + + + + + + + +

Methods +

+ + + + +

+ Build() + +

+ +

Builds a list of CacheNodes for Feeds and Implementations.

+
+
+ +
+
public NamedCollection<CacheNode> Build()
+
+ + +

Returns

+
+
NamedCollection<CacheNode>
+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

A problem occurred while reading from a cache.

+
+
UnauthorizedAccessException
+

Read access to a cache is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ViewModel.FeedNode.html b/api/ZeroInstall.Store.ViewModel.FeedNode.html new file mode 100644 index 000000000..8bcf78e45 --- /dev/null +++ b/api/ZeroInstall.Store.ViewModel.FeedNode.html @@ -0,0 +1,588 @@ + + + + + Class FeedNode | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FeedNode +

+ +
+
Namespace
ZeroInstall.Store.ViewModel
+
Assembly
ZeroInstall.Store.dll
+
+ +

Models information about a Feed in the IFeedCache for display in a UI.

+
+
+ +
+
public sealed class FeedNode : CacheNode, INamed, IEquatable<CacheNode>
+
+ + + + +
+
Inheritance
+
+ + +
FeedNode
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ FeedNode(string, Feed) + +

+ +

Creates a new feed node.

+
+
+ +
+
public FeedNode(string path, Feed feed)
+
+ +

Parameters

+
+
path string
+

The path of the directory.

+
+
feed Feed
+

The parsed feed.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

The feed file could not be read.

+
+
UnauthorizedAccessException
+

Read access to the feed file is not permitted.

+
+
+ + + +

Properties +

+ + + + +

+ Categories + +

+ +

A comma-separated list of categories the applications fits into.

+
+
+ +
+
public string Categories { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Feed + +

+ +

The parsed feed.

+
+
+ +
+
[Browsable(false)]
+public Feed Feed { get; }
+
+ + + + + +

Property Value

+
+
Feed
+
+
+ + + + + + + + + + +

+ Homepage + +

+ +

The main website of the application.

+
+
+ +
+
public Uri? Homepage { get; }
+
+ + + + + +

Property Value

+
+
Uri
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The full name of the node used for tree hierarchies.

+
+
+ +
+
public override string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Summary + +

+ +

A short one-line description of the application.

+
+
+ +
+
public string? Summary { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Uri + +

+ +

The URI identifying this feed.

+
+
+ +
+
public FeedUri Uri { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(CacheNode?) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public override bool Equals(CacheNode? other)
+
+ +

Parameters

+
+
other CacheNode
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Remove(IFeedCache?, IImplementationStore?) + +

+ +

Removes this Feed from the feedCache if provided.

+
+
+ +
+
public override void Remove(IFeedCache? feedCache = null, IImplementationStore? implementationStore = null)
+
+ +

Parameters

+
+
feedCache IFeedCache
+
+
implementationStore IImplementationStore
+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

No matching feed could be found in the IFeedCache.

+
+
IOException
+

The feed could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the cache is not permitted.

+
+
+ + + + + +

+ ToString() + +

+ +

Creates string representation suitable for console output.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ViewModel.ImplementationNode.html b/api/ZeroInstall.Store.ViewModel.ImplementationNode.html new file mode 100644 index 000000000..7f99a4fbe --- /dev/null +++ b/api/ZeroInstall.Store.ViewModel.ImplementationNode.html @@ -0,0 +1,547 @@ + + + + + Class ImplementationNode | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ImplementationNode +

+ +
+
Namespace
ZeroInstall.Store.ViewModel
+
Assembly
ZeroInstall.Store.dll
+
+ +

Models information about an implementation in an IImplementationStore for display in a UI.

+
+
+ +
+
public class ImplementationNode : CacheNode, INamed, IEquatable<CacheNode>
+
+ + + + +
+
Inheritance
+
+ + +
ImplementationNode
+
+
+ +
+
Implements
+
+ + +
+
+ +
+
Derived
+
+ +
+
+ +
+
Inherited Members
+
+ + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ ImplementationNode(string, ManifestDigest) + +

+ +

Creates a new implementation node.

+
+
+ +
+
public ImplementationNode(string path, ManifestDigest digest)
+
+ +

Parameters

+
+
path string
+

The path of the directory.

+
+
digest ManifestDigest
+

The digest identifying the implementation.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

The manifest file could not be read.

+
+
UnauthorizedAccessException
+

Read access to the manifest file is not permitted.

+
+
FormatException
+

The manifest file is not valid.

+
+
+ + + +

Properties +

+ + + + +

+ Digest + +

+ +

The digest identifying the implementation in the store.

+
+
+ +
+
public string? Digest { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ FeedUri + +

+ +

The URI of the feed describing the implementation.

+
+
+ +
+
public virtual FeedUri? FeedUri { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The full name of the node used for tree hierarchies.

+
+
+ +
+
public override string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(CacheNode?) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public override bool Equals(CacheNode? other)
+
+ +

Parameters

+
+
other CacheNode
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ Remove(IFeedCache?, IImplementationStore?) + +

+ +

Removes this implementation from the implementationStore if provided.

+
+
+ +
+
public override void Remove(IFeedCache? feedCache = null, IImplementationStore? implementationStore = null)
+
+ +

Parameters

+
+
feedCache IFeedCache
+
+
implementationStore IImplementationStore
+
+
+ + + + + + + + + +

Exceptions

+
+
KeyNotFoundException
+

No matching implementation could be found in the IImplementationStore.

+
+
IOException
+

The implementation could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the store is not permitted.

+
+
+ + + + + +

+ ToString() + +

+ +

Creates string representation suitable for console output.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + + +

+ Verify(IImplementationStore) + +

+ +

Verify this implementation is undamaged.

+
+
+ +
+
public void Verify(IImplementationStore implementationStore)
+
+ +

Parameters

+
+
implementationStore IImplementationStore
+
+
+ + + + + + + + + +

Exceptions

+
+
OperationCanceledException
+

The user canceled the task.

+
+
IOException
+

The entry's directory could not be processed.

+
+
UnauthorizedAccessException
+

Read access to the entry's directory is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ViewModel.OwnedImplementationNode.html b/api/ZeroInstall.Store.ViewModel.OwnedImplementationNode.html new file mode 100644 index 000000000..ac0ef378f --- /dev/null +++ b/api/ZeroInstall.Store.ViewModel.OwnedImplementationNode.html @@ -0,0 +1,460 @@ + + + + + Class OwnedImplementationNode | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class OwnedImplementationNode +

+ +
+
Namespace
ZeroInstall.Store.ViewModel
+
Assembly
ZeroInstall.Store.dll
+
+ +

Models information about an implementation in an IImplementationStore with a known owning interface for display in a UI.

+
+
+ +
+
public sealed class OwnedImplementationNode : ImplementationNode, INamed, IEquatable<CacheNode>
+
+ + + + +
+
Inheritance
+
+ + + +
OwnedImplementationNode
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ OwnedImplementationNode(string, Implementation, FeedNode) + +

+ +

Creates a new owned implementation node.

+
+
+ +
+
public OwnedImplementationNode(string path, Implementation implementation, FeedNode parent)
+
+ +

Parameters

+
+
path string
+

The path of the directory.

+
+
implementation Implementation
+

Information about the implementation from a Feed file.

+
+
parent FeedNode
+

The node of the feed owning the implementation.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

The manifest file could not be read.

+
+
UnauthorizedAccessException
+

Read access to the manifest file is not permitted.

+
+
FormatException
+

The manifest file is not valid.

+
+
+ + + +

Properties +

+ + + + +

+ Architecture + +

+ +

The version number of the implementation.

+
+
+ +
+
[TypeConverter(typeof(StringConstructorConverter<Architecture>))]
+public Architecture Architecture { get; }
+
+ + + + + +

Property Value

+
+
Architecture
+
+
+ + + + + + + + + + +

+ FeedUri + +

+ +

The URI of the feed describing the implementation.

+
+
+ +
+
public override FeedUri FeedUri { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ ID + +

+ +

A unique identifier for the implementation. Used when storing implementation-specific user preferences.

+
+
+ +
+
public string ID { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The full name of the node used for tree hierarchies.

+
+
+ +
+
public override string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Version + +

+ +

The version number of the implementation.

+
+
+ +
+
public ImplementationVersion Version { get; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Creates string representation suitable for console output.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ViewModel.SelectionsDiffNode.html b/api/ZeroInstall.Store.ViewModel.SelectionsDiffNode.html new file mode 100644 index 000000000..9a19e6153 --- /dev/null +++ b/api/ZeroInstall.Store.ViewModel.SelectionsDiffNode.html @@ -0,0 +1,511 @@ + + + + + Class SelectionsDiffNode | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SelectionsDiffNode +

+ +
+
Namespace
ZeroInstall.Store.ViewModel
+
Assembly
ZeroInstall.Store.dll
+
+ +

Models an implementation change between two Selections documents for display in a UI.

+
+
+ +
+
[Equatable]
+public sealed class SelectionsDiffNode : IEquatable<SelectionsDiffNode>
+
+ + + + +
+
Inheritance
+
+ +
SelectionsDiffNode
+
+
+ +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + +
+ + + + + + +

Constructors +

+ + + + +

+ SelectionsDiffNode(FeedUri, ImplementationVersion?, ImplementationVersion?) + +

+ +

Creates a new selection diff.

+
+
+ +
+
public SelectionsDiffNode(FeedUri uri, ImplementationVersion? oldVersion = null, ImplementationVersion? newVersion = null)
+
+ +

Parameters

+
+
uri FeedUri
+

The interface URI of the changed implementation.

+
+
oldVersion ImplementationVersion
+

The old version of the implementation; null if the implementation did not exist in the old selection.

+
+
newVersion ImplementationVersion
+

The new version of the implementation; null if the implementation does not exist in the new selection.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ NewVersion + +

+ +

The new version of the implementation; null if the implementation does not exist in the new selection.

+
+
+ +
+
public ImplementationVersion? NewVersion { get; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + + + +

+ OldVersion + +

+ +

The old version of the implementation; null if the implementation did not exist in the old selection.

+
+
+ +
+
public ImplementationVersion? OldVersion { get; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + + + +

+ Uri + +

+ +

The interface URI of the changed implementation.

+
+
+ +
+
public FeedUri Uri { get; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Equals(object?) + +

+ +

Determines whether the specified object is equal to the current object.

+
+
+ +
+
public override bool Equals(object? obj)
+
+ +

Parameters

+
+
obj object
+

The object to compare with the current object.

+
+
+ +

Returns

+
+
bool
+

true if the specified object is equal to the current object; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + + + + + + +

+ ToString() + +

+ +

Returns a string that represents the current object.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+

A string that represents the current object.

+
+
+ + + + + + + + + + + +

Operators +

+ + + + +

+ operator ==(SelectionsDiffNode?, SelectionsDiffNode?) + +

+ +

Indicates whether the object on the left is equal to the object on the right.

+
+
+ +
+
public static bool operator ==(SelectionsDiffNode? left, SelectionsDiffNode? right)
+
+ +

Parameters

+
+
left SelectionsDiffNode
+

The left object

+
+
right SelectionsDiffNode
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are equal; otherwise, false.

+
+
+ + + + + + + + + + + + + +

+ operator !=(SelectionsDiffNode?, SelectionsDiffNode?) + +

+ +

Indicates whether the object on the left is not equal to the object on the right.

+
+
+ +
+
public static bool operator !=(SelectionsDiffNode? left, SelectionsDiffNode? right)
+
+ +

Parameters

+
+
left SelectionsDiffNode
+

The left object

+
+
right SelectionsDiffNode
+

The right object

+
+
+ +

Returns

+
+
bool
+

true if the objects are not equal; otherwise, false.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ViewModel.SelectionsTreeNode.html b/api/ZeroInstall.Store.ViewModel.SelectionsTreeNode.html new file mode 100644 index 000000000..848d96f47 --- /dev/null +++ b/api/ZeroInstall.Store.ViewModel.SelectionsTreeNode.html @@ -0,0 +1,426 @@ + + + + + Class SelectionsTreeNode | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class SelectionsTreeNode +

+ +
+
Namespace
ZeroInstall.Store.ViewModel
+
Assembly
ZeroInstall.Store.dll
+
+ +

Models an ImplementationSelection element of a Selections document for display in a tree-like UI.

+
+
+ +
+
public sealed record SelectionsTreeNode : INamed, IEquatable<SelectionsTreeNode>
+
+ + + + +
+
Inheritance
+
+ +
SelectionsTreeNode
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ SelectionsTreeNode(FeedUri, ImplementationVersion?, string?, SelectionsTreeNode?) + +

+ +

Models an ImplementationSelection element of a Selections document for display in a tree-like UI.

+
+
+ +
+
public SelectionsTreeNode(FeedUri Uri, ImplementationVersion? Version, string? Path, SelectionsTreeNode? Parent)
+
+ +

Parameters

+
+
Uri FeedUri
+

The feed URI of the selected implementation.

+
+
Version ImplementationVersion
+

The version of the selected implementation. null for a missing selection.

+
+
Path string
+

The local path of the cached implementation. null for an uncached implementation.

+
+
Parent SelectionsTreeNode
+

The parent node containing this one. null for root node.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Name + +

+ +

The full name of the node used for tree hierarchies.

+
+
+ +
+
[Browsable(false)]
+public string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Parent + +

+ +

The parent node containing this one. null for root node.

+
+
+ +
+
[Browsable(false)]
+public SelectionsTreeNode? Parent { get; init; }
+
+ + + + + +

Property Value

+
+
SelectionsTreeNode
+
+
+ + + + + + + + + + +

+ Path + +

+ +

The local path of the cached implementation. null for an uncached implementation.

+
+
+ +
+
public string? Path { get; init; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Uri + +

+ +

The feed URI of the selected implementation.

+
+
+ +
+
public FeedUri Uri { get; init; }
+
+ + + + + +

Property Value

+
+
FeedUri
+
+
+ + + + + + + + + + +

+ Version + +

+ +

The version of the selected implementation. null for a missing selection.

+
+
+ +
+
public ImplementationVersion? Version { get; init; }
+
+ + + + + +

Property Value

+
+
ImplementationVersion
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ ToString() + +

+ +

Creates string representation suitable for console output.

+
+
+ +
+
public override string ToString()
+
+ + +

Returns

+
+
string
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ViewModel.TempDirectoryNode.html b/api/ZeroInstall.Store.ViewModel.TempDirectoryNode.html new file mode 100644 index 000000000..05f8623ce --- /dev/null +++ b/api/ZeroInstall.Store.ViewModel.TempDirectoryNode.html @@ -0,0 +1,422 @@ + + + + + Class TempDirectoryNode | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TempDirectoryNode +

+ +
+
Namespace
ZeroInstall.Store.ViewModel
+
Assembly
ZeroInstall.Store.dll
+
+ +

Models information about a temporary directory in an IImplementationStore for display in a UI.

+
+
+ +
+
public sealed class TempDirectoryNode : CacheNode, INamed, IEquatable<CacheNode>
+
+ + + + +
+
Inheritance
+
+ + +
TempDirectoryNode
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ TempDirectoryNode(string) + +

+ +

Models information about a temporary directory in an IImplementationStore for display in a UI.

+
+
+ +
+
public TempDirectoryNode(string path)
+
+ +

Parameters

+
+
path string
+

The path of the directory.

+
+
+ + + + + + + + + +

Exceptions

+
+
IOException
+

The directory could not be inspected.

+
+
UnauthorizedAccessException
+

Read access to the directory is not permitted.

+
+
+ + + +

Properties +

+ + + + +

+ Name + +

+ +

The full name of the node used for tree hierarchies.

+
+
+ +
+
public override string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + +

Exceptions

+
+
IOException
+

The directory could not be inspected.

+
+
UnauthorizedAccessException
+

Read access to the directory is not permitted.

+
+
+ + + +

Methods +

+ + + + +

+ Equals(CacheNode?) + +

+ +

Indicates whether the current object is equal to another object of the same type.

+
+
+ +
+
public override bool Equals(CacheNode? other)
+
+ +

Parameters

+
+
other CacheNode
+

An object to compare with this object.

+
+
+ +

Returns

+
+
bool
+

true if the current object is equal to the other parameter; otherwise, false.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

The directory could not be inspected.

+
+
UnauthorizedAccessException
+

Read access to the directory is not permitted.

+
+
+ + + + + +

+ GetHashCode() + +

+ +

Serves as the default hash function.

+
+
+ +
+
public override int GetHashCode()
+
+ + +

Returns

+
+
int
+

A hash code for the current object.

+
+
+ + + + + + + + +

Exceptions

+
+
IOException
+

The directory could not be inspected.

+
+
UnauthorizedAccessException
+

Read access to the directory is not permitted.

+
+
+ + + + + +

+ Remove(IFeedCache?, IImplementationStore?) + +

+ +

Removes this temporary directory from the implementationStore if provided.

+
+
+ +
+
public override void Remove(IFeedCache? feedCache = null, IImplementationStore? implementationStore = null)
+
+ +

Parameters

+
+
feedCache IFeedCache
+
+
implementationStore IImplementationStore
+
+
+ + + + + + + + + +

Exceptions

+
+
DirectoryNotFoundException
+

The directory could be found in the store.

+
+
IOException
+

The directory could not be deleted.

+
+
UnauthorizedAccessException
+

Write access to the store is not permitted.

+
+
+ + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ViewModel.TrustNode.html b/api/ZeroInstall.Store.ViewModel.TrustNode.html new file mode 100644 index 000000000..bfb12348c --- /dev/null +++ b/api/ZeroInstall.Store.ViewModel.TrustNode.html @@ -0,0 +1,322 @@ + + + + + Class TrustNode | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TrustNode +

+ +
+
Namespace
ZeroInstall.Store.ViewModel
+
Assembly
ZeroInstall.Store.dll
+
+ +

Represents a Key-Domain pair in a TrustDB for display in a UI.

+
+
+ +
+
public sealed record TrustNode : INamed, IEquatable<TrustNode>
+
+ + + + +
+
Inheritance
+
+ +
TrustNode
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ + + + + + +

Constructors +

+ + + + +

+ TrustNode(string, Domain) + +

+ +

Represents a Key-Domain pair in a TrustDB for display in a UI.

+
+
+ +
+
public TrustNode(string Fingerprint, Domain Domain)
+
+ +

Parameters

+
+
Fingerprint string
+

The Fingerprint.

+
+
Domain Domain
+

The domain the fingerprint is valid for.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Domain + +

+ +

The domain the fingerprint is valid for.

+
+
+ +
+
public Domain Domain { get; init; }
+
+ + + + + +

Property Value

+
+
Domain
+
+
+ + + + + + + + + + +

+ Fingerprint + +

+ + +
+ +
+
public string Fingerprint { get; init; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The full name of the node used for tree hierarchies.

+
+
+ +
+
[Browsable(false)]
+public string Name { get; set; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ViewModel.TrustNodeExtensions.html b/api/ZeroInstall.Store.ViewModel.TrustNodeExtensions.html new file mode 100644 index 000000000..5722b8397 --- /dev/null +++ b/api/ZeroInstall.Store.ViewModel.TrustNodeExtensions.html @@ -0,0 +1,255 @@ + + + + + Class TrustNodeExtensions | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class TrustNodeExtensions +

+ +
+
Namespace
ZeroInstall.Store.ViewModel
+
Assembly
ZeroInstall.Store.dll
+
+ +

Maps between TrustDB and TrustNodes.

+
+
+ +
+
public static class TrustNodeExtensions
+
+ + + + +
+
Inheritance
+
+ +
TrustNodeExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ ToNodes(TrustDB) + +

+ +

Creates TrustNode representations for all entries in a TrustDB.

+
+
+ +
+
public static NamedCollection<TrustNode> ToNodes(this TrustDB trustDB)
+
+ +

Parameters

+
+
trustDB TrustDB
+
+
+ +

Returns

+
+
NamedCollection<TrustNode>
+
+
+ + + + + + + + + + + + + +

+ ToTrustDB(IEnumerable<TrustNode>) + +

+ +

Creates a TrustDB from TrustNodes.

+
+
+ +
+
public static TrustDB ToTrustDB(this IEnumerable<TrustNode> nodes)
+
+ +

Parameters

+
+
nodes IEnumerable<TrustNode>
+
+
+ +

Returns

+
+
TrustDB
+
+
+ + + + + + + + + + + + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.ViewModel.html b/api/ZeroInstall.Store.ViewModel.html new file mode 100644 index 000000000..03ced5b1a --- /dev/null +++ b/api/ZeroInstall.Store.ViewModel.html @@ -0,0 +1,175 @@ + + + + + Namespace ZeroInstall.Store.ViewModel | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Store.ViewModel

+
+

Models information about configuration and cache elements for display in a UI.

+
+
+
+ +

+Classes +

+
+
CacheNode
+

Models information about elements in a cache for display in a UI.

+
+
+
+
CacheNodeBuilder
+

Builds CacheNodes for Feeds and Implementations.

+
+
+
+
FeedNode
+

Models information about a Feed in the IFeedCache for display in a UI.

+
+
+
+
ImplementationNode
+

Models information about an implementation in an IImplementationStore for display in a UI.

+
+
+
+
OwnedImplementationNode
+

Models information about an implementation in an IImplementationStore with a known owning interface for display in a UI.

+
+
+
+
SelectionsDiffNode
+

Models an implementation change between two Selections documents for display in a UI.

+
+
+
+
SelectionsTreeNode
+

Models an ImplementationSelection element of a Selections document for display in a tree-like UI.

+
+
+
+
TempDirectoryNode
+

Models information about a temporary directory in an IImplementationStore for display in a UI.

+
+
+
+
TrustNode
+

Represents a Key-Domain pair in a TrustDB for display in a UI.

+
+
+
+
TrustNodeExtensions
+

Maps between TrustDB and TrustNodes.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.Store.html b/api/ZeroInstall.Store.html new file mode 100644 index 000000000..7157c840e --- /dev/null +++ b/api/ZeroInstall.Store.html @@ -0,0 +1,188 @@ + + + + + Namespace ZeroInstall.Store | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall.Store

+
+

Management of implementation caches, digital signatures, etc..

+

NuGet package: ZeroInstall.Store

+
+
+
+ +

+Namespaces +

+
+
ZeroInstall.Store.Configuration
+
+

User settings controlling network behaviour, solving, etc..

+
+
+
+
ZeroInstall.Store.Deployment
+
+

Deploying implementations to locations outside an implementation cache; mainly used to deploy Zero Install itself.

+
+
+
+
ZeroInstall.Store.Feeds
+
+

Caches for feeds.

+
+
+
+
ZeroInstall.Store.FileSystem
+
+

Interfaces and methods for building and reading File system structures.

+
+
+
+
ZeroInstall.Store.Icons
+
+

Stores icon files downloaded from the web as local files.

+
+
+
+
ZeroInstall.Store.Implementations
+
+

On-disk storage for implementations, i.e. implementation caches.

+
+
+
+
ZeroInstall.Store.Manifests
+
+

Manifests list every file, directory and symlink in the tree to allow for digest/hash calculation.

+
+
+
+
ZeroInstall.Store.Trust
+
+

Structures and logic for OpenPGP signatures and trust (which domains the user associates with which signatures).

+
+
+
+
ZeroInstall.Store.ViewModel
+
+

Models information about configuration and cache elements for display in a UI.

+
+
+

+Classes +

+
+
ManagerBase
+

Common base class for managers that need an ITaskHandler and Mutex-based locking.

+
+
+ + +
+ + + + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/ZeroInstall.html b/api/ZeroInstall.html new file mode 100644 index 000000000..a880b1adf --- /dev/null +++ b/api/ZeroInstall.html @@ -0,0 +1,178 @@ + + + + + Namespace ZeroInstall | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace ZeroInstall

+
+
+
+ +

+Namespaces +

+
+
ZeroInstall.Archives
+
+

Extracting and building archives (.zip, .tar, etc.).

+

NuGet package: ZeroInstall.Archives

+
+
+
+
ZeroInstall.Client
+
+

Client library for invoking Zero Install commands from within other applications.

+

NuGet package: ZeroInstall.Client

+
+
+
+
ZeroInstall.Commands
+
+

Command-line interface for Zero Install. Both an actual CLI and a library for building other clients.

+

NuGet package: ZeroInstall.Commands

+
+
+
+
ZeroInstall.DesktopIntegration
+
+

Integrating applications with desktop environments (creating menu entries, etc.).

+

NuGet package: ZeroInstall.DesktopIntegration

+
+
+
+
ZeroInstall.Model
+
+

Data model for the Zero Install feed format.

+

NuGet package: ZeroInstall.Model

+
+
+
+
ZeroInstall.Publish
+
+

Utilities for creating and modifying feed files.

+

NuGet package: ZeroInstall.Publish

+
+
+
+
ZeroInstall.Services
+
+

Services for solving dependencies, downloading implementations, executing apps, etc..

+

NuGet package: ZeroInstall.Services

+
+
+
+
ZeroInstall.Store
+
+

Management of implementation caches, digital signatures, etc..

+

NuGet package: ZeroInstall.Store

+
+
+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/api/toc.html b/api/toc.html new file mode 100644 index 000000000..b8a547983 --- /dev/null +++ b/api/toc.html @@ -0,0 +1,1600 @@ + +
+
+
+
+ + + +
+
+
+
+ + +
+
+
+
diff --git a/api/toc.json b/api/toc.json new file mode 100644 index 000000000..89cbe1cea --- /dev/null +++ b/api/toc.json @@ -0,0 +1,2 @@ + +{"items":[{"name":"ZeroInstall","href":"ZeroInstall.html","topicHref":"ZeroInstall.html","topicUid":"ZeroInstall","items":[{"name":"Archives","href":"ZeroInstall.Archives.html","topicHref":"ZeroInstall.Archives.html","topicUid":"ZeroInstall.Archives","items":[{"name":"Builders","href":"ZeroInstall.Archives.Builders.html","topicHref":"ZeroInstall.Archives.Builders.html","topicUid":"ZeroInstall.Archives.Builders","items":[{"name":"ArchiveBuilder","href":"ZeroInstall.Archives.Builders.ArchiveBuilder.html","topicHref":"ZeroInstall.Archives.Builders.ArchiveBuilder.html","topicUid":"ZeroInstall.Archives.Builders.ArchiveBuilder"},{"name":"IArchiveBuilder","href":"ZeroInstall.Archives.Builders.IArchiveBuilder.html","topicHref":"ZeroInstall.Archives.Builders.IArchiveBuilder.html","topicUid":"ZeroInstall.Archives.Builders.IArchiveBuilder"},{"name":"TarBuilder","href":"ZeroInstall.Archives.Builders.TarBuilder.html","topicHref":"ZeroInstall.Archives.Builders.TarBuilder.html","topicUid":"ZeroInstall.Archives.Builders.TarBuilder"},{"name":"TarBz2Builder","href":"ZeroInstall.Archives.Builders.TarBz2Builder.html","topicHref":"ZeroInstall.Archives.Builders.TarBz2Builder.html","topicUid":"ZeroInstall.Archives.Builders.TarBz2Builder"},{"name":"TarGzBuilder","href":"ZeroInstall.Archives.Builders.TarGzBuilder.html","topicHref":"ZeroInstall.Archives.Builders.TarGzBuilder.html","topicUid":"ZeroInstall.Archives.Builders.TarGzBuilder"},{"name":"TarLzipBuilder","href":"ZeroInstall.Archives.Builders.TarLzipBuilder.html","topicHref":"ZeroInstall.Archives.Builders.TarLzipBuilder.html","topicUid":"ZeroInstall.Archives.Builders.TarLzipBuilder"},{"name":"TarZstandardBuilder","href":"ZeroInstall.Archives.Builders.TarZstandardBuilder.html","topicHref":"ZeroInstall.Archives.Builders.TarZstandardBuilder.html","topicUid":"ZeroInstall.Archives.Builders.TarZstandardBuilder"},{"name":"ZipBuilder","href":"ZeroInstall.Archives.Builders.ZipBuilder.html","topicHref":"ZeroInstall.Archives.Builders.ZipBuilder.html","topicUid":"ZeroInstall.Archives.Builders.ZipBuilder"}]},{"name":"Extractors","href":"ZeroInstall.Archives.Extractors.html","topicHref":"ZeroInstall.Archives.Extractors.html","topicUid":"ZeroInstall.Archives.Extractors","items":[{"name":"ArchiveExtractor","href":"ZeroInstall.Archives.Extractors.ArchiveExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.ArchiveExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.ArchiveExtractor"},{"name":"CabExtractor","href":"ZeroInstall.Archives.Extractors.CabExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.CabExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.CabExtractor"},{"name":"DmgExtractor","href":"ZeroInstall.Archives.Extractors.DmgExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.DmgExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.DmgExtractor"},{"name":"IArchiveExtractor","href":"ZeroInstall.Archives.Extractors.IArchiveExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.IArchiveExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.IArchiveExtractor"},{"name":"MsiExtractor","href":"ZeroInstall.Archives.Extractors.MsiExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.MsiExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.MsiExtractor"},{"name":"RarExtractor","href":"ZeroInstall.Archives.Extractors.RarExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.RarExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.RarExtractor"},{"name":"RubyGemExtractor","href":"ZeroInstall.Archives.Extractors.RubyGemExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.RubyGemExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.RubyGemExtractor"},{"name":"SevenZipExtractor","href":"ZeroInstall.Archives.Extractors.SevenZipExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.SevenZipExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.SevenZipExtractor"},{"name":"TarBz2Extractor","href":"ZeroInstall.Archives.Extractors.TarBz2Extractor.html","topicHref":"ZeroInstall.Archives.Extractors.TarBz2Extractor.html","topicUid":"ZeroInstall.Archives.Extractors.TarBz2Extractor"},{"name":"TarExtractor","href":"ZeroInstall.Archives.Extractors.TarExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.TarExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.TarExtractor"},{"name":"TarGzExtractor","href":"ZeroInstall.Archives.Extractors.TarGzExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.TarGzExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.TarGzExtractor"},{"name":"TarLzipExtractor","href":"ZeroInstall.Archives.Extractors.TarLzipExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.TarLzipExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.TarLzipExtractor"},{"name":"TarLzmaExtractor","href":"ZeroInstall.Archives.Extractors.TarLzmaExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.TarLzmaExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.TarLzmaExtractor"},{"name":"TarXzExtractor","href":"ZeroInstall.Archives.Extractors.TarXzExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.TarXzExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.TarXzExtractor"},{"name":"TarZstandardExtractor","href":"ZeroInstall.Archives.Extractors.TarZstandardExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.TarZstandardExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.TarZstandardExtractor"},{"name":"ZipExtractor","href":"ZeroInstall.Archives.Extractors.ZipExtractor.html","topicHref":"ZeroInstall.Archives.Extractors.ZipExtractor.html","topicUid":"ZeroInstall.Archives.Extractors.ZipExtractor"}]},{"name":"BuilderExtensions","href":"ZeroInstall.Archives.BuilderExtensions.html","topicHref":"ZeroInstall.Archives.BuilderExtensions.html","topicUid":"ZeroInstall.Archives.BuilderExtensions"},{"name":"ImplementationServer","href":"ZeroInstall.Archives.ImplementationServer.html","topicHref":"ZeroInstall.Archives.ImplementationServer.html","topicUid":"ZeroInstall.Archives.ImplementationServer"}]},{"name":"Client","href":"ZeroInstall.Client.html","topicHref":"ZeroInstall.Client.html","topicUid":"ZeroInstall.Client","items":[{"name":"IZeroInstallClient","href":"ZeroInstall.Client.IZeroInstallClient.html","topicHref":"ZeroInstall.Client.IZeroInstallClient.html","topicUid":"ZeroInstall.Client.IZeroInstallClient"},{"name":"TemporarilyUnavailableException","href":"ZeroInstall.Client.TemporarilyUnavailableException.html","topicHref":"ZeroInstall.Client.TemporarilyUnavailableException.html","topicUid":"ZeroInstall.Client.TemporarilyUnavailableException"},{"name":"ZeroInstallClient","href":"ZeroInstall.Client.ZeroInstallClient.html","topicHref":"ZeroInstall.Client.ZeroInstallClient.html","topicUid":"ZeroInstall.Client.ZeroInstallClient"}]},{"name":"Commands","href":"ZeroInstall.Commands.html","topicHref":"ZeroInstall.Commands.html","topicUid":"ZeroInstall.Commands","items":[{"name":"Basic","href":"ZeroInstall.Commands.Basic.html","topicHref":"ZeroInstall.Commands.Basic.html","topicUid":"ZeroInstall.Commands.Basic","items":[{"name":"Exporters","href":"ZeroInstall.Commands.Basic.Exporters.html","topicHref":"ZeroInstall.Commands.Basic.Exporters.html","topicUid":"ZeroInstall.Commands.Basic.Exporters","items":[{"name":"Exporter","href":"ZeroInstall.Commands.Basic.Exporters.Exporter.html","topicHref":"ZeroInstall.Commands.Basic.Exporters.Exporter.html","topicUid":"ZeroInstall.Commands.Basic.Exporters.Exporter"},{"name":"HelpExporterBase","href":"ZeroInstall.Commands.Basic.Exporters.HelpExporterBase.html","topicHref":"ZeroInstall.Commands.Basic.Exporters.HelpExporterBase.html","topicUid":"ZeroInstall.Commands.Basic.Exporters.HelpExporterBase"},{"name":"HtmlHelpExporter","href":"ZeroInstall.Commands.Basic.Exporters.HtmlHelpExporter.html","topicHref":"ZeroInstall.Commands.Basic.Exporters.HtmlHelpExporter.html","topicUid":"ZeroInstall.Commands.Basic.Exporters.HtmlHelpExporter"}]},{"name":"AddFeed","href":"ZeroInstall.Commands.Basic.AddFeed.html","topicHref":"ZeroInstall.Commands.Basic.AddFeed.html","topicUid":"ZeroInstall.Commands.Basic.AddFeed"},{"name":"AddRemoveFeedCommand","href":"ZeroInstall.Commands.Basic.AddRemoveFeedCommand.html","topicHref":"ZeroInstall.Commands.Basic.AddRemoveFeedCommand.html","topicUid":"ZeroInstall.Commands.Basic.AddRemoveFeedCommand"},{"name":"CatalogMan","href":"ZeroInstall.Commands.Basic.CatalogMan.html","topicHref":"ZeroInstall.Commands.Basic.CatalogMan.html","topicUid":"ZeroInstall.Commands.Basic.CatalogMan"},{"name":"Configure","href":"ZeroInstall.Commands.Basic.Configure.html","topicHref":"ZeroInstall.Commands.Basic.Configure.html","topicUid":"ZeroInstall.Commands.Basic.Configure"},{"name":"DefaultCommand","href":"ZeroInstall.Commands.Basic.DefaultCommand.html","topicHref":"ZeroInstall.Commands.Basic.DefaultCommand.html","topicUid":"ZeroInstall.Commands.Basic.DefaultCommand"},{"name":"Digest","href":"ZeroInstall.Commands.Basic.Digest.html","topicHref":"ZeroInstall.Commands.Basic.Digest.html","topicUid":"ZeroInstall.Commands.Basic.Digest"},{"name":"Download","href":"ZeroInstall.Commands.Basic.Download.html","topicHref":"ZeroInstall.Commands.Basic.Download.html","topicUid":"ZeroInstall.Commands.Basic.Download"},{"name":"Export","href":"ZeroInstall.Commands.Basic.Export.html","topicHref":"ZeroInstall.Commands.Basic.Export.html","topicUid":"ZeroInstall.Commands.Basic.Export"},{"name":"ExportHelp","href":"ZeroInstall.Commands.Basic.ExportHelp.html","topicHref":"ZeroInstall.Commands.Basic.ExportHelp.html","topicUid":"ZeroInstall.Commands.Basic.ExportHelp"},{"name":"Fetch","href":"ZeroInstall.Commands.Basic.Fetch.html","topicHref":"ZeroInstall.Commands.Basic.Fetch.html","topicUid":"ZeroInstall.Commands.Basic.Fetch"},{"name":"Import","href":"ZeroInstall.Commands.Basic.Import.html","topicHref":"ZeroInstall.Commands.Basic.Import.html","topicUid":"ZeroInstall.Commands.Basic.Import"},{"name":"List","href":"ZeroInstall.Commands.Basic.List.html","topicHref":"ZeroInstall.Commands.Basic.List.html","topicUid":"ZeroInstall.Commands.Basic.List"},{"name":"ListFeeds","href":"ZeroInstall.Commands.Basic.ListFeeds.html","topicHref":"ZeroInstall.Commands.Basic.ListFeeds.html","topicUid":"ZeroInstall.Commands.Basic.ListFeeds"},{"name":"RemoveFeed","href":"ZeroInstall.Commands.Basic.RemoveFeed.html","topicHref":"ZeroInstall.Commands.Basic.RemoveFeed.html","topicUid":"ZeroInstall.Commands.Basic.RemoveFeed"},{"name":"Run","href":"ZeroInstall.Commands.Basic.Run.html","topicHref":"ZeroInstall.Commands.Basic.Run.html","topicUid":"ZeroInstall.Commands.Basic.Run"},{"name":"Search","href":"ZeroInstall.Commands.Basic.Search.html","topicHref":"ZeroInstall.Commands.Basic.Search.html","topicUid":"ZeroInstall.Commands.Basic.Search"},{"name":"Selection","href":"ZeroInstall.Commands.Basic.Selection.html","topicHref":"ZeroInstall.Commands.Basic.Selection.html","topicUid":"ZeroInstall.Commands.Basic.Selection"},{"name":"StoreMan","href":"ZeroInstall.Commands.Basic.StoreMan.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan"},{"name":"StoreMan.Add","href":"ZeroInstall.Commands.Basic.StoreMan.Add.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.Add.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.Add"},{"name":"StoreMan.Audit","href":"ZeroInstall.Commands.Basic.StoreMan.Audit.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.Audit.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.Audit"},{"name":"StoreMan.Copy","href":"ZeroInstall.Commands.Basic.StoreMan.Copy.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.Copy.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.Copy"},{"name":"StoreMan.Export","href":"ZeroInstall.Commands.Basic.StoreMan.Export.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.Export.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.Export"},{"name":"StoreMan.Find","href":"ZeroInstall.Commands.Basic.StoreMan.Find.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.Find.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.Find"},{"name":"StoreMan.List","href":"ZeroInstall.Commands.Basic.StoreMan.List.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.List.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.List"},{"name":"StoreMan.ListImplementations","href":"ZeroInstall.Commands.Basic.StoreMan.ListImplementations.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.ListImplementations.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.ListImplementations"},{"name":"StoreMan.Optimise","href":"ZeroInstall.Commands.Basic.StoreMan.Optimise.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.Optimise.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.Optimise"},{"name":"StoreMan.Purge","href":"ZeroInstall.Commands.Basic.StoreMan.Purge.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.Purge.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.Purge"},{"name":"StoreMan.Remove","href":"ZeroInstall.Commands.Basic.StoreMan.Remove.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.Remove.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.Remove"},{"name":"StoreMan.Serve","href":"ZeroInstall.Commands.Basic.StoreMan.Serve.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.Serve.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.Serve"},{"name":"StoreMan.StoreSubCommand","href":"ZeroInstall.Commands.Basic.StoreMan.StoreSubCommand.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.StoreSubCommand.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.StoreSubCommand"},{"name":"StoreMan.Verify","href":"ZeroInstall.Commands.Basic.StoreMan.Verify.html","topicHref":"ZeroInstall.Commands.Basic.StoreMan.Verify.html","topicUid":"ZeroInstall.Commands.Basic.StoreMan.Verify"},{"name":"TrustMan","href":"ZeroInstall.Commands.Basic.TrustMan.html","topicHref":"ZeroInstall.Commands.Basic.TrustMan.html","topicUid":"ZeroInstall.Commands.Basic.TrustMan"},{"name":"TrustMan.Add","href":"ZeroInstall.Commands.Basic.TrustMan.Add.html","topicHref":"ZeroInstall.Commands.Basic.TrustMan.Add.html","topicUid":"ZeroInstall.Commands.Basic.TrustMan.Add"},{"name":"TrustMan.List","href":"ZeroInstall.Commands.Basic.TrustMan.List.html","topicHref":"ZeroInstall.Commands.Basic.TrustMan.List.html","topicUid":"ZeroInstall.Commands.Basic.TrustMan.List"},{"name":"TrustMan.Remove","href":"ZeroInstall.Commands.Basic.TrustMan.Remove.html","topicHref":"ZeroInstall.Commands.Basic.TrustMan.Remove.html","topicUid":"ZeroInstall.Commands.Basic.TrustMan.Remove"},{"name":"TrustMan.TrustSubCommand","href":"ZeroInstall.Commands.Basic.TrustMan.TrustSubCommand.html","topicHref":"ZeroInstall.Commands.Basic.TrustMan.TrustSubCommand.html","topicUid":"ZeroInstall.Commands.Basic.TrustMan.TrustSubCommand"},{"name":"Update","href":"ZeroInstall.Commands.Basic.Update.html","topicHref":"ZeroInstall.Commands.Basic.Update.html","topicUid":"ZeroInstall.Commands.Basic.Update"}]},{"name":"Desktop","href":"ZeroInstall.Commands.Desktop.html","topicHref":"ZeroInstall.Commands.Desktop.html","topicUid":"ZeroInstall.Commands.Desktop","items":[{"name":"AddAlias","href":"ZeroInstall.Commands.Desktop.AddAlias.html","topicHref":"ZeroInstall.Commands.Desktop.AddAlias.html","topicUid":"ZeroInstall.Commands.Desktop.AddAlias"},{"name":"AddApp","href":"ZeroInstall.Commands.Desktop.AddApp.html","topicHref":"ZeroInstall.Commands.Desktop.AddApp.html","topicUid":"ZeroInstall.Commands.Desktop.AddApp"},{"name":"AppCommand","href":"ZeroInstall.Commands.Desktop.AppCommand.html","topicHref":"ZeroInstall.Commands.Desktop.AppCommand.html","topicUid":"ZeroInstall.Commands.Desktop.AppCommand"},{"name":"Central","href":"ZeroInstall.Commands.Desktop.Central.html","topicHref":"ZeroInstall.Commands.Desktop.Central.html","topicUid":"ZeroInstall.Commands.Desktop.Central"},{"name":"ImportApps","href":"ZeroInstall.Commands.Desktop.ImportApps.html","topicHref":"ZeroInstall.Commands.Desktop.ImportApps.html","topicUid":"ZeroInstall.Commands.Desktop.ImportApps"},{"name":"IntegrateApp","href":"ZeroInstall.Commands.Desktop.IntegrateApp.html","topicHref":"ZeroInstall.Commands.Desktop.IntegrateApp.html","topicUid":"ZeroInstall.Commands.Desktop.IntegrateApp"},{"name":"IntegrationCommand","href":"ZeroInstall.Commands.Desktop.IntegrationCommand.html","topicHref":"ZeroInstall.Commands.Desktop.IntegrationCommand.html","topicUid":"ZeroInstall.Commands.Desktop.IntegrationCommand"},{"name":"ListApps","href":"ZeroInstall.Commands.Desktop.ListApps.html","topicHref":"ZeroInstall.Commands.Desktop.ListApps.html","topicUid":"ZeroInstall.Commands.Desktop.ListApps"},{"name":"RemoveAllApps","href":"ZeroInstall.Commands.Desktop.RemoveAllApps.html","topicHref":"ZeroInstall.Commands.Desktop.RemoveAllApps.html","topicUid":"ZeroInstall.Commands.Desktop.RemoveAllApps"},{"name":"RemoveApp","href":"ZeroInstall.Commands.Desktop.RemoveApp.html","topicHref":"ZeroInstall.Commands.Desktop.RemoveApp.html","topicUid":"ZeroInstall.Commands.Desktop.RemoveApp"},{"name":"RepairApps","href":"ZeroInstall.Commands.Desktop.RepairApps.html","topicHref":"ZeroInstall.Commands.Desktop.RepairApps.html","topicUid":"ZeroInstall.Commands.Desktop.RepairApps"},{"name":"Self","href":"ZeroInstall.Commands.Desktop.Self.html","topicHref":"ZeroInstall.Commands.Desktop.Self.html","topicUid":"ZeroInstall.Commands.Desktop.Self"},{"name":"Self.Deploy","href":"ZeroInstall.Commands.Desktop.Self.Deploy.html","topicHref":"ZeroInstall.Commands.Desktop.Self.Deploy.html","topicUid":"ZeroInstall.Commands.Desktop.Self.Deploy"},{"name":"Self.Remove","href":"ZeroInstall.Commands.Desktop.Self.Remove.html","topicHref":"ZeroInstall.Commands.Desktop.Self.Remove.html","topicUid":"ZeroInstall.Commands.Desktop.Self.Remove"},{"name":"Self.RemoveSubCommandBase","href":"ZeroInstall.Commands.Desktop.Self.RemoveSubCommandBase.html","topicHref":"ZeroInstall.Commands.Desktop.Self.RemoveSubCommandBase.html","topicUid":"ZeroInstall.Commands.Desktop.Self.RemoveSubCommandBase"},{"name":"Self.SelfSubCommand","href":"ZeroInstall.Commands.Desktop.Self.SelfSubCommand.html","topicHref":"ZeroInstall.Commands.Desktop.Self.SelfSubCommand.html","topicUid":"ZeroInstall.Commands.Desktop.Self.SelfSubCommand"},{"name":"Self.Update","href":"ZeroInstall.Commands.Desktop.Self.Update.html","topicHref":"ZeroInstall.Commands.Desktop.Self.Update.html","topicUid":"ZeroInstall.Commands.Desktop.Self.Update"},{"name":"SelfManager","href":"ZeroInstall.Commands.Desktop.SelfManager.html","topicHref":"ZeroInstall.Commands.Desktop.SelfManager.html","topicUid":"ZeroInstall.Commands.Desktop.SelfManager"},{"name":"SyncApps","href":"ZeroInstall.Commands.Desktop.SyncApps.html","topicHref":"ZeroInstall.Commands.Desktop.SyncApps.html","topicUid":"ZeroInstall.Commands.Desktop.SyncApps"},{"name":"UpdateApps","href":"ZeroInstall.Commands.Desktop.UpdateApps.html","topicHref":"ZeroInstall.Commands.Desktop.UpdateApps.html","topicUid":"ZeroInstall.Commands.Desktop.UpdateApps"}]},{"name":"Properties","href":"ZeroInstall.Commands.Properties.html","topicHref":"ZeroInstall.Commands.Properties.html","topicUid":"ZeroInstall.Commands.Properties","items":[{"name":"Resources","href":"ZeroInstall.Commands.Properties.Resources.html","topicHref":"ZeroInstall.Commands.Properties.Resources.html","topicUid":"ZeroInstall.Commands.Properties.Resources"}]},{"name":"CliCommand","href":"ZeroInstall.Commands.CliCommand.html","topicHref":"ZeroInstall.Commands.CliCommand.html","topicUid":"ZeroInstall.Commands.CliCommand"},{"name":"CliCommandHandler","href":"ZeroInstall.Commands.CliCommandHandler.html","topicHref":"ZeroInstall.Commands.CliCommandHandler.html","topicUid":"ZeroInstall.Commands.CliCommandHandler"},{"name":"CliMultiCommand","href":"ZeroInstall.Commands.CliMultiCommand.html","topicHref":"ZeroInstall.Commands.CliMultiCommand.html","topicUid":"ZeroInstall.Commands.CliMultiCommand"},{"name":"EnvironmentBuilderExtensions","href":"ZeroInstall.Commands.EnvironmentBuilderExtensions.html","topicHref":"ZeroInstall.Commands.EnvironmentBuilderExtensions.html","topicUid":"ZeroInstall.Commands.EnvironmentBuilderExtensions"},{"name":"ExitCode","href":"ZeroInstall.Commands.ExitCode.html","topicHref":"ZeroInstall.Commands.ExitCode.html","topicUid":"ZeroInstall.Commands.ExitCode"},{"name":"ICliSubCommand","href":"ZeroInstall.Commands.ICliSubCommand.html","topicHref":"ZeroInstall.Commands.ICliSubCommand.html","topicUid":"ZeroInstall.Commands.ICliSubCommand"},{"name":"ICommandHandler","href":"ZeroInstall.Commands.ICommandHandler.html","topicHref":"ZeroInstall.Commands.ICommandHandler.html","topicUid":"ZeroInstall.Commands.ICommandHandler"},{"name":"NeedsGuiException","href":"ZeroInstall.Commands.NeedsGuiException.html","topicHref":"ZeroInstall.Commands.NeedsGuiException.html","topicUid":"ZeroInstall.Commands.NeedsGuiException"},{"name":"ProgramUtils","href":"ZeroInstall.Commands.ProgramUtils.html","topicHref":"ZeroInstall.Commands.ProgramUtils.html","topicUid":"ZeroInstall.Commands.ProgramUtils"},{"name":"ScopedOperation","href":"ZeroInstall.Commands.ScopedOperation.html","topicHref":"ZeroInstall.Commands.ScopedOperation.html","topicUid":"ZeroInstall.Commands.ScopedOperation"},{"name":"UnsuitableInstallBaseException","href":"ZeroInstall.Commands.UnsuitableInstallBaseException.html","topicHref":"ZeroInstall.Commands.UnsuitableInstallBaseException.html","topicUid":"ZeroInstall.Commands.UnsuitableInstallBaseException"},{"name":"ZeroInstallInstance","href":"ZeroInstall.Commands.ZeroInstallInstance.html","topicHref":"ZeroInstall.Commands.ZeroInstallInstance.html","topicUid":"ZeroInstall.Commands.ZeroInstallInstance"}]},{"name":"DesktopIntegration","href":"ZeroInstall.DesktopIntegration.html","topicHref":"ZeroInstall.DesktopIntegration.html","topicUid":"ZeroInstall.DesktopIntegration","items":[{"name":"AccessPoints","href":"ZeroInstall.DesktopIntegration.AccessPoints.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints","items":[{"name":"AccessPoint","href":"ZeroInstall.DesktopIntegration.AccessPoints.AccessPoint.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.AccessPoint.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.AccessPoint"},{"name":"AccessPointList","href":"ZeroInstall.DesktopIntegration.AccessPoints.AccessPointList.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.AccessPointList.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.AccessPointList"},{"name":"AppAlias","href":"ZeroInstall.DesktopIntegration.AccessPoints.AppAlias.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.AppAlias.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.AppAlias"},{"name":"AutoPlay","href":"ZeroInstall.DesktopIntegration.AccessPoints.AutoPlay.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.AutoPlay.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.AutoPlay"},{"name":"AutoStart","href":"ZeroInstall.DesktopIntegration.AccessPoints.AutoStart.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.AutoStart.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.AutoStart"},{"name":"CapabilityRegistration","href":"ZeroInstall.DesktopIntegration.AccessPoints.CapabilityRegistration.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.CapabilityRegistration.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.CapabilityRegistration"},{"name":"CommandAccessPoint","href":"ZeroInstall.DesktopIntegration.AccessPoints.CommandAccessPoint.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.CommandAccessPoint.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.CommandAccessPoint"},{"name":"ContextMenu","href":"ZeroInstall.DesktopIntegration.AccessPoints.ContextMenu.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.ContextMenu.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.ContextMenu"},{"name":"DefaultAccessPoint","href":"ZeroInstall.DesktopIntegration.AccessPoints.DefaultAccessPoint.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.DefaultAccessPoint.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.DefaultAccessPoint"},{"name":"DefaultProgram","href":"ZeroInstall.DesktopIntegration.AccessPoints.DefaultProgram.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.DefaultProgram.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.DefaultProgram"},{"name":"DesktopIcon","href":"ZeroInstall.DesktopIntegration.AccessPoints.DesktopIcon.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.DesktopIcon.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.DesktopIcon"},{"name":"FileType","href":"ZeroInstall.DesktopIntegration.AccessPoints.FileType.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.FileType.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.FileType"},{"name":"IconAccessPoint","href":"ZeroInstall.DesktopIntegration.AccessPoints.IconAccessPoint.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.IconAccessPoint.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.IconAccessPoint"},{"name":"MenuEntry","href":"ZeroInstall.DesktopIntegration.AccessPoints.MenuEntry.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.MenuEntry.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.MenuEntry"},{"name":"MockAccessPoint","href":"ZeroInstall.DesktopIntegration.AccessPoints.MockAccessPoint.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.MockAccessPoint.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.MockAccessPoint"},{"name":"QuickLaunch","href":"ZeroInstall.DesktopIntegration.AccessPoints.QuickLaunch.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.QuickLaunch.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.QuickLaunch"},{"name":"SendTo","href":"ZeroInstall.DesktopIntegration.AccessPoints.SendTo.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.SendTo.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.SendTo"},{"name":"UrlProtocol","href":"ZeroInstall.DesktopIntegration.AccessPoints.UrlProtocol.html","topicHref":"ZeroInstall.DesktopIntegration.AccessPoints.UrlProtocol.html","topicUid":"ZeroInstall.DesktopIntegration.AccessPoints.UrlProtocol"}]},{"name":"Unix","href":"ZeroInstall.DesktopIntegration.Unix.html","topicHref":"ZeroInstall.DesktopIntegration.Unix.html","topicUid":"ZeroInstall.DesktopIntegration.Unix","items":[{"name":"AppAlias","href":"ZeroInstall.DesktopIntegration.Unix.AppAlias.html","topicHref":"ZeroInstall.DesktopIntegration.Unix.AppAlias.html","topicUid":"ZeroInstall.DesktopIntegration.Unix.AppAlias"},{"name":"ContextMenu","href":"ZeroInstall.DesktopIntegration.Unix.ContextMenu.html","topicHref":"ZeroInstall.DesktopIntegration.Unix.ContextMenu.html","topicUid":"ZeroInstall.DesktopIntegration.Unix.ContextMenu"},{"name":"DefaultProgram","href":"ZeroInstall.DesktopIntegration.Unix.DefaultProgram.html","topicHref":"ZeroInstall.DesktopIntegration.Unix.DefaultProgram.html","topicUid":"ZeroInstall.DesktopIntegration.Unix.DefaultProgram"},{"name":"FileType","href":"ZeroInstall.DesktopIntegration.Unix.FileType.html","topicHref":"ZeroInstall.DesktopIntegration.Unix.FileType.html","topicUid":"ZeroInstall.DesktopIntegration.Unix.FileType"},{"name":"FreeDesktop","href":"ZeroInstall.DesktopIntegration.Unix.FreeDesktop.html","topicHref":"ZeroInstall.DesktopIntegration.Unix.FreeDesktop.html","topicUid":"ZeroInstall.DesktopIntegration.Unix.FreeDesktop"},{"name":"UrlProtocol","href":"ZeroInstall.DesktopIntegration.Unix.UrlProtocol.html","topicHref":"ZeroInstall.DesktopIntegration.Unix.UrlProtocol.html","topicUid":"ZeroInstall.DesktopIntegration.Unix.UrlProtocol"}]},{"name":"ViewModel","href":"ZeroInstall.DesktopIntegration.ViewModel.html","topicHref":"ZeroInstall.DesktopIntegration.ViewModel.html","topicUid":"ZeroInstall.DesktopIntegration.ViewModel","items":[{"name":"AutoPlayModel","href":"ZeroInstall.DesktopIntegration.ViewModel.AutoPlayModel.html","topicHref":"ZeroInstall.DesktopIntegration.ViewModel.AutoPlayModel.html","topicUid":"ZeroInstall.DesktopIntegration.ViewModel.AutoPlayModel"},{"name":"CapabilityModel","href":"ZeroInstall.DesktopIntegration.ViewModel.CapabilityModel.html","topicHref":"ZeroInstall.DesktopIntegration.ViewModel.CapabilityModel.html","topicUid":"ZeroInstall.DesktopIntegration.ViewModel.CapabilityModel"},{"name":"CapabilityModelExtensions","href":"ZeroInstall.DesktopIntegration.ViewModel.CapabilityModelExtensions.html","topicHref":"ZeroInstall.DesktopIntegration.ViewModel.CapabilityModelExtensions.html","topicUid":"ZeroInstall.DesktopIntegration.ViewModel.CapabilityModelExtensions"},{"name":"ContextMenuModel","href":"ZeroInstall.DesktopIntegration.ViewModel.ContextMenuModel.html","topicHref":"ZeroInstall.DesktopIntegration.ViewModel.ContextMenuModel.html","topicUid":"ZeroInstall.DesktopIntegration.ViewModel.ContextMenuModel"},{"name":"DefaultProgramModel","href":"ZeroInstall.DesktopIntegration.ViewModel.DefaultProgramModel.html","topicHref":"ZeroInstall.DesktopIntegration.ViewModel.DefaultProgramModel.html","topicUid":"ZeroInstall.DesktopIntegration.ViewModel.DefaultProgramModel"},{"name":"FileTypeModel","href":"ZeroInstall.DesktopIntegration.ViewModel.FileTypeModel.html","topicHref":"ZeroInstall.DesktopIntegration.ViewModel.FileTypeModel.html","topicUid":"ZeroInstall.DesktopIntegration.ViewModel.FileTypeModel"},{"name":"IconCapabilityModel","href":"ZeroInstall.DesktopIntegration.ViewModel.IconCapabilityModel.html","topicHref":"ZeroInstall.DesktopIntegration.ViewModel.IconCapabilityModel.html","topicUid":"ZeroInstall.DesktopIntegration.ViewModel.IconCapabilityModel"},{"name":"IntegrationState","href":"ZeroInstall.DesktopIntegration.ViewModel.IntegrationState.html","topicHref":"ZeroInstall.DesktopIntegration.ViewModel.IntegrationState.html","topicUid":"ZeroInstall.DesktopIntegration.ViewModel.IntegrationState"},{"name":"UrlProtocolModel","href":"ZeroInstall.DesktopIntegration.ViewModel.UrlProtocolModel.html","topicHref":"ZeroInstall.DesktopIntegration.ViewModel.UrlProtocolModel.html","topicUid":"ZeroInstall.DesktopIntegration.ViewModel.UrlProtocolModel"}]},{"name":"Windows","href":"ZeroInstall.DesktopIntegration.Windows.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.html","topicUid":"ZeroInstall.DesktopIntegration.Windows","items":[{"name":"AppAlias","href":"ZeroInstall.DesktopIntegration.Windows.AppAlias.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.AppAlias.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.AppAlias"},{"name":"AppRegistration","href":"ZeroInstall.DesktopIntegration.Windows.AppRegistration.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.AppRegistration.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.AppRegistration"},{"name":"AutoPlay","href":"ZeroInstall.DesktopIntegration.Windows.AutoPlay.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.AutoPlay.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.AutoPlay"},{"name":"ComServer","href":"ZeroInstall.DesktopIntegration.Windows.ComServer.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.ComServer.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.ComServer"},{"name":"ContextMenu","href":"ZeroInstall.DesktopIntegration.Windows.ContextMenu.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.ContextMenu.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.ContextMenu"},{"name":"DefaultProgram","href":"ZeroInstall.DesktopIntegration.Windows.DefaultProgram.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.DefaultProgram.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.DefaultProgram"},{"name":"FileType","href":"ZeroInstall.DesktopIntegration.Windows.FileType.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.FileType.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.FileType"},{"name":"PathEnv","href":"ZeroInstall.DesktopIntegration.Windows.PathEnv.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.PathEnv.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.PathEnv"},{"name":"Shortcut","href":"ZeroInstall.DesktopIntegration.Windows.Shortcut.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.Shortcut.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.Shortcut"},{"name":"StubBuilder","href":"ZeroInstall.DesktopIntegration.Windows.StubBuilder.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.StubBuilder.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.StubBuilder"},{"name":"UninstallEntry","href":"ZeroInstall.DesktopIntegration.Windows.UninstallEntry.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.UninstallEntry.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.UninstallEntry"},{"name":"UrlProtocol","href":"ZeroInstall.DesktopIntegration.Windows.UrlProtocol.html","topicHref":"ZeroInstall.DesktopIntegration.Windows.UrlProtocol.html","topicUid":"ZeroInstall.DesktopIntegration.Windows.UrlProtocol"}]},{"name":"AppEntry","href":"ZeroInstall.DesktopIntegration.AppEntry.html","topicHref":"ZeroInstall.DesktopIntegration.AppEntry.html","topicUid":"ZeroInstall.DesktopIntegration.AppEntry"},{"name":"AppList","href":"ZeroInstall.DesktopIntegration.AppList.html","topicHref":"ZeroInstall.DesktopIntegration.AppList.html","topicUid":"ZeroInstall.DesktopIntegration.AppList"},{"name":"CapabilityExtensions","href":"ZeroInstall.DesktopIntegration.CapabilityExtensions.html","topicHref":"ZeroInstall.DesktopIntegration.CapabilityExtensions.html","topicUid":"ZeroInstall.DesktopIntegration.CapabilityExtensions"},{"name":"CategoryIntegrationManager","href":"ZeroInstall.DesktopIntegration.CategoryIntegrationManager.html","topicHref":"ZeroInstall.DesktopIntegration.CategoryIntegrationManager.html","topicUid":"ZeroInstall.DesktopIntegration.CategoryIntegrationManager"},{"name":"ConflictData","href":"ZeroInstall.DesktopIntegration.ConflictData.html","topicHref":"ZeroInstall.DesktopIntegration.ConflictData.html","topicUid":"ZeroInstall.DesktopIntegration.ConflictData"},{"name":"ConflictDataUtils","href":"ZeroInstall.DesktopIntegration.ConflictDataUtils.html","topicHref":"ZeroInstall.DesktopIntegration.ConflictDataUtils.html","topicUid":"ZeroInstall.DesktopIntegration.ConflictDataUtils"},{"name":"ConflictException","href":"ZeroInstall.DesktopIntegration.ConflictException.html","topicHref":"ZeroInstall.DesktopIntegration.ConflictException.html","topicUid":"ZeroInstall.DesktopIntegration.ConflictException"},{"name":"ICategoryIntegrationManager","href":"ZeroInstall.DesktopIntegration.ICategoryIntegrationManager.html","topicHref":"ZeroInstall.DesktopIntegration.ICategoryIntegrationManager.html","topicUid":"ZeroInstall.DesktopIntegration.ICategoryIntegrationManager"},{"name":"IIntegrationManager","href":"ZeroInstall.DesktopIntegration.IIntegrationManager.html","topicHref":"ZeroInstall.DesktopIntegration.IIntegrationManager.html","topicUid":"ZeroInstall.DesktopIntegration.IIntegrationManager"},{"name":"IconStores","href":"ZeroInstall.DesktopIntegration.IconStores.html","topicHref":"ZeroInstall.DesktopIntegration.IconStores.html","topicUid":"ZeroInstall.DesktopIntegration.IconStores"},{"name":"IntegrationManager","href":"ZeroInstall.DesktopIntegration.IntegrationManager.html","topicHref":"ZeroInstall.DesktopIntegration.IntegrationManager.html","topicUid":"ZeroInstall.DesktopIntegration.IntegrationManager"},{"name":"IntegrationManagerBase","href":"ZeroInstall.DesktopIntegration.IntegrationManagerBase.html","topicHref":"ZeroInstall.DesktopIntegration.IntegrationManagerBase.html","topicUid":"ZeroInstall.DesktopIntegration.IntegrationManagerBase"},{"name":"Suggest","href":"ZeroInstall.DesktopIntegration.Suggest.html","topicHref":"ZeroInstall.DesktopIntegration.Suggest.html","topicUid":"ZeroInstall.DesktopIntegration.Suggest"},{"name":"SyncIntegrationManager","href":"ZeroInstall.DesktopIntegration.SyncIntegrationManager.html","topicHref":"ZeroInstall.DesktopIntegration.SyncIntegrationManager.html","topicUid":"ZeroInstall.DesktopIntegration.SyncIntegrationManager"},{"name":"SyncRaceException","href":"ZeroInstall.DesktopIntegration.SyncRaceException.html","topicHref":"ZeroInstall.DesktopIntegration.SyncRaceException.html","topicUid":"ZeroInstall.DesktopIntegration.SyncRaceException"},{"name":"SyncResetMode","href":"ZeroInstall.DesktopIntegration.SyncResetMode.html","topicHref":"ZeroInstall.DesktopIntegration.SyncResetMode.html","topicUid":"ZeroInstall.DesktopIntegration.SyncResetMode"}]},{"name":"Model","href":"ZeroInstall.Model.html","topicHref":"ZeroInstall.Model.html","topicUid":"ZeroInstall.Model","items":[{"name":"Capabilities","href":"ZeroInstall.Model.Capabilities.html","topicHref":"ZeroInstall.Model.Capabilities.html","topicUid":"ZeroInstall.Model.Capabilities","items":[{"name":"AppRegistration","href":"ZeroInstall.Model.Capabilities.AppRegistration.html","topicHref":"ZeroInstall.Model.Capabilities.AppRegistration.html","topicUid":"ZeroInstall.Model.Capabilities.AppRegistration"},{"name":"AutoPlay","href":"ZeroInstall.Model.Capabilities.AutoPlay.html","topicHref":"ZeroInstall.Model.Capabilities.AutoPlay.html","topicUid":"ZeroInstall.Model.Capabilities.AutoPlay"},{"name":"AutoPlayEvent","href":"ZeroInstall.Model.Capabilities.AutoPlayEvent.html","topicHref":"ZeroInstall.Model.Capabilities.AutoPlayEvent.html","topicUid":"ZeroInstall.Model.Capabilities.AutoPlayEvent"},{"name":"Capability","href":"ZeroInstall.Model.Capabilities.Capability.html","topicHref":"ZeroInstall.Model.Capabilities.Capability.html","topicUid":"ZeroInstall.Model.Capabilities.Capability"},{"name":"CapabilityList","href":"ZeroInstall.Model.Capabilities.CapabilityList.html","topicHref":"ZeroInstall.Model.Capabilities.CapabilityList.html","topicUid":"ZeroInstall.Model.Capabilities.CapabilityList"},{"name":"CapabilityListExtensions","href":"ZeroInstall.Model.Capabilities.CapabilityListExtensions.html","topicHref":"ZeroInstall.Model.Capabilities.CapabilityListExtensions.html","topicUid":"ZeroInstall.Model.Capabilities.CapabilityListExtensions"},{"name":"ComServer","href":"ZeroInstall.Model.Capabilities.ComServer.html","topicHref":"ZeroInstall.Model.Capabilities.ComServer.html","topicUid":"ZeroInstall.Model.Capabilities.ComServer"},{"name":"ContextMenu","href":"ZeroInstall.Model.Capabilities.ContextMenu.html","topicHref":"ZeroInstall.Model.Capabilities.ContextMenu.html","topicUid":"ZeroInstall.Model.Capabilities.ContextMenu"},{"name":"ContextMenuTarget","href":"ZeroInstall.Model.Capabilities.ContextMenuTarget.html","topicHref":"ZeroInstall.Model.Capabilities.ContextMenuTarget.html","topicUid":"ZeroInstall.Model.Capabilities.ContextMenuTarget"},{"name":"DefaultCapability","href":"ZeroInstall.Model.Capabilities.DefaultCapability.html","topicHref":"ZeroInstall.Model.Capabilities.DefaultCapability.html","topicUid":"ZeroInstall.Model.Capabilities.DefaultCapability"},{"name":"DefaultProgram","href":"ZeroInstall.Model.Capabilities.DefaultProgram.html","topicHref":"ZeroInstall.Model.Capabilities.DefaultProgram.html","topicUid":"ZeroInstall.Model.Capabilities.DefaultProgram"},{"name":"FileType","href":"ZeroInstall.Model.Capabilities.FileType.html","topicHref":"ZeroInstall.Model.Capabilities.FileType.html","topicUid":"ZeroInstall.Model.Capabilities.FileType"},{"name":"FileTypeExtension","href":"ZeroInstall.Model.Capabilities.FileTypeExtension.html","topicHref":"ZeroInstall.Model.Capabilities.FileTypeExtension.html","topicUid":"ZeroInstall.Model.Capabilities.FileTypeExtension"},{"name":"IconCapability","href":"ZeroInstall.Model.Capabilities.IconCapability.html","topicHref":"ZeroInstall.Model.Capabilities.IconCapability.html","topicUid":"ZeroInstall.Model.Capabilities.IconCapability"},{"name":"InstallCommands","href":"ZeroInstall.Model.Capabilities.InstallCommands.html","topicHref":"ZeroInstall.Model.Capabilities.InstallCommands.html","topicUid":"ZeroInstall.Model.Capabilities.InstallCommands"},{"name":"KnownProtocolPrefix","href":"ZeroInstall.Model.Capabilities.KnownProtocolPrefix.html","topicHref":"ZeroInstall.Model.Capabilities.KnownProtocolPrefix.html","topicUid":"ZeroInstall.Model.Capabilities.KnownProtocolPrefix"},{"name":"RemoveHook","href":"ZeroInstall.Model.Capabilities.RemoveHook.html","topicHref":"ZeroInstall.Model.Capabilities.RemoveHook.html","topicUid":"ZeroInstall.Model.Capabilities.RemoveHook"},{"name":"UrlProtocol","href":"ZeroInstall.Model.Capabilities.UrlProtocol.html","topicHref":"ZeroInstall.Model.Capabilities.UrlProtocol.html","topicUid":"ZeroInstall.Model.Capabilities.UrlProtocol"},{"name":"Verb","href":"ZeroInstall.Model.Capabilities.Verb.html","topicHref":"ZeroInstall.Model.Capabilities.Verb.html","topicUid":"ZeroInstall.Model.Capabilities.Verb"},{"name":"VerbCapability","href":"ZeroInstall.Model.Capabilities.VerbCapability.html","topicHref":"ZeroInstall.Model.Capabilities.VerbCapability.html","topicUid":"ZeroInstall.Model.Capabilities.VerbCapability"}]},{"name":"Design","href":"ZeroInstall.Model.Design.html","topicHref":"ZeroInstall.Model.Design.html","topicUid":"ZeroInstall.Model.Design","items":[{"name":"ArgBaseConverter","href":"ZeroInstall.Model.Design.ArgBaseConverter.html","topicHref":"ZeroInstall.Model.Design.ArgBaseConverter.html","topicUid":"ZeroInstall.Model.Design.ArgBaseConverter"},{"name":"CategoryNameConverter","href":"ZeroInstall.Model.Design.CategoryNameConverter.html","topicHref":"ZeroInstall.Model.Design.CategoryNameConverter.html","topicUid":"ZeroInstall.Model.Design.CategoryNameConverter"}]},{"name":"Preferences","href":"ZeroInstall.Model.Preferences.html","topicHref":"ZeroInstall.Model.Preferences.html","topicUid":"ZeroInstall.Model.Preferences","items":[{"name":"FeedPreferences","href":"ZeroInstall.Model.Preferences.FeedPreferences.html","topicHref":"ZeroInstall.Model.Preferences.FeedPreferences.html","topicUid":"ZeroInstall.Model.Preferences.FeedPreferences"},{"name":"ImplementationPreferences","href":"ZeroInstall.Model.Preferences.ImplementationPreferences.html","topicHref":"ZeroInstall.Model.Preferences.ImplementationPreferences.html","topicUid":"ZeroInstall.Model.Preferences.ImplementationPreferences"},{"name":"InterfacePreferences","href":"ZeroInstall.Model.Preferences.InterfacePreferences.html","topicHref":"ZeroInstall.Model.Preferences.InterfacePreferences.html","topicUid":"ZeroInstall.Model.Preferences.InterfacePreferences"}]},{"name":"Selection","href":"ZeroInstall.Model.Selection.html","topicHref":"ZeroInstall.Model.Selection.html","topicUid":"ZeroInstall.Model.Selection","items":[{"name":"ImplementationSelection","href":"ZeroInstall.Model.Selection.ImplementationSelection.html","topicHref":"ZeroInstall.Model.Selection.ImplementationSelection.html","topicUid":"ZeroInstall.Model.Selection.ImplementationSelection"},{"name":"SelectionCandidate","href":"ZeroInstall.Model.Selection.SelectionCandidate.html","topicHref":"ZeroInstall.Model.Selection.SelectionCandidate.html","topicUid":"ZeroInstall.Model.Selection.SelectionCandidate"},{"name":"SelectionCandidateExtensions","href":"ZeroInstall.Model.Selection.SelectionCandidateExtensions.html","topicHref":"ZeroInstall.Model.Selection.SelectionCandidateExtensions.html","topicUid":"ZeroInstall.Model.Selection.SelectionCandidateExtensions"},{"name":"Selections","href":"ZeroInstall.Model.Selection.Selections.html","topicHref":"ZeroInstall.Model.Selection.Selections.html","topicUid":"ZeroInstall.Model.Selection.Selections"},{"name":"TestCase","href":"ZeroInstall.Model.Selection.TestCase.html","topicHref":"ZeroInstall.Model.Selection.TestCase.html","topicUid":"ZeroInstall.Model.Selection.TestCase"},{"name":"TestCaseSet","href":"ZeroInstall.Model.Selection.TestCaseSet.html","topicHref":"ZeroInstall.Model.Selection.TestCaseSet.html","topicUid":"ZeroInstall.Model.Selection.TestCaseSet"}]},{"name":"Architecture","href":"ZeroInstall.Model.Architecture.html","topicHref":"ZeroInstall.Model.Architecture.html","topicUid":"ZeroInstall.Model.Architecture"},{"name":"ArchitectureExtensions","href":"ZeroInstall.Model.ArchitectureExtensions.html","topicHref":"ZeroInstall.Model.ArchitectureExtensions.html","topicUid":"ZeroInstall.Model.ArchitectureExtensions"},{"name":"Archive","href":"ZeroInstall.Model.Archive.html","topicHref":"ZeroInstall.Model.Archive.html","topicUid":"ZeroInstall.Model.Archive"},{"name":"Arg","href":"ZeroInstall.Model.Arg.html","topicHref":"ZeroInstall.Model.Arg.html","topicUid":"ZeroInstall.Model.Arg"},{"name":"ArgBase","href":"ZeroInstall.Model.ArgBase.html","topicHref":"ZeroInstall.Model.ArgBase.html","topicUid":"ZeroInstall.Model.ArgBase"},{"name":"Binding","href":"ZeroInstall.Model.Binding.html","topicHref":"ZeroInstall.Model.Binding.html","topicUid":"ZeroInstall.Model.Binding"},{"name":"Catalog","href":"ZeroInstall.Model.Catalog.html","topicHref":"ZeroInstall.Model.Catalog.html","topicUid":"ZeroInstall.Model.Catalog"},{"name":"Category","href":"ZeroInstall.Model.Category.html","topicHref":"ZeroInstall.Model.Category.html","topicUid":"ZeroInstall.Model.Category"},{"name":"Command","href":"ZeroInstall.Model.Command.html","topicHref":"ZeroInstall.Model.Command.html","topicUid":"ZeroInstall.Model.Command"},{"name":"Constraint","href":"ZeroInstall.Model.Constraint.html","topicHref":"ZeroInstall.Model.Constraint.html","topicUid":"ZeroInstall.Model.Constraint"},{"name":"CopyFromStep","href":"ZeroInstall.Model.CopyFromStep.html","topicHref":"ZeroInstall.Model.CopyFromStep.html","topicUid":"ZeroInstall.Model.CopyFromStep"},{"name":"Cpu","href":"ZeroInstall.Model.Cpu.html","topicHref":"ZeroInstall.Model.Cpu.html","topicUid":"ZeroInstall.Model.Cpu"},{"name":"Dependency","href":"ZeroInstall.Model.Dependency.html","topicHref":"ZeroInstall.Model.Dependency.html","topicUid":"ZeroInstall.Model.Dependency"},{"name":"DependencyContainerExtensions","href":"ZeroInstall.Model.DependencyContainerExtensions.html","topicHref":"ZeroInstall.Model.DependencyContainerExtensions.html","topicUid":"ZeroInstall.Model.DependencyContainerExtensions"},{"name":"DownloadRetrievalMethod","href":"ZeroInstall.Model.DownloadRetrievalMethod.html","topicHref":"ZeroInstall.Model.DownloadRetrievalMethod.html","topicUid":"ZeroInstall.Model.DownloadRetrievalMethod"},{"name":"Element","href":"ZeroInstall.Model.Element.html","topicHref":"ZeroInstall.Model.Element.html","topicUid":"ZeroInstall.Model.Element"},{"name":"ElementCollectionExtensions","href":"ZeroInstall.Model.ElementCollectionExtensions.html","topicHref":"ZeroInstall.Model.ElementCollectionExtensions.html","topicUid":"ZeroInstall.Model.ElementCollectionExtensions"},{"name":"EntryPoint","href":"ZeroInstall.Model.EntryPoint.html","topicHref":"ZeroInstall.Model.EntryPoint.html","topicUid":"ZeroInstall.Model.EntryPoint"},{"name":"EnvironmentBinding","href":"ZeroInstall.Model.EnvironmentBinding.html","topicHref":"ZeroInstall.Model.EnvironmentBinding.html","topicUid":"ZeroInstall.Model.EnvironmentBinding"},{"name":"EnvironmentMode","href":"ZeroInstall.Model.EnvironmentMode.html","topicHref":"ZeroInstall.Model.EnvironmentMode.html","topicUid":"ZeroInstall.Model.EnvironmentMode"},{"name":"ExecutableInBinding","href":"ZeroInstall.Model.ExecutableInBinding.html","topicHref":"ZeroInstall.Model.ExecutableInBinding.html","topicUid":"ZeroInstall.Model.ExecutableInBinding"},{"name":"ExecutableInPath","href":"ZeroInstall.Model.ExecutableInPath.html","topicHref":"ZeroInstall.Model.ExecutableInPath.html","topicUid":"ZeroInstall.Model.ExecutableInPath"},{"name":"ExecutableInVar","href":"ZeroInstall.Model.ExecutableInVar.html","topicHref":"ZeroInstall.Model.ExecutableInVar.html","topicUid":"ZeroInstall.Model.ExecutableInVar"},{"name":"Feed","href":"ZeroInstall.Model.Feed.html","topicHref":"ZeroInstall.Model.Feed.html","topicUid":"ZeroInstall.Model.Feed"},{"name":"FeedElement","href":"ZeroInstall.Model.FeedElement.html","topicHref":"ZeroInstall.Model.FeedElement.html","topicUid":"ZeroInstall.Model.FeedElement"},{"name":"FeedReference","href":"ZeroInstall.Model.FeedReference.html","topicHref":"ZeroInstall.Model.FeedReference.html","topicUid":"ZeroInstall.Model.FeedReference"},{"name":"FeedTarget","href":"ZeroInstall.Model.FeedTarget.html","topicHref":"ZeroInstall.Model.FeedTarget.html","topicUid":"ZeroInstall.Model.FeedTarget"},{"name":"FeedUri","href":"ZeroInstall.Model.FeedUri.html","topicHref":"ZeroInstall.Model.FeedUri.html","topicUid":"ZeroInstall.Model.FeedUri"},{"name":"ForEachArgs","href":"ZeroInstall.Model.ForEachArgs.html","topicHref":"ZeroInstall.Model.ForEachArgs.html","topicUid":"ZeroInstall.Model.ForEachArgs"},{"name":"GenericBinding","href":"ZeroInstall.Model.GenericBinding.html","topicHref":"ZeroInstall.Model.GenericBinding.html","topicUid":"ZeroInstall.Model.GenericBinding"},{"name":"Group","href":"ZeroInstall.Model.Group.html","topicHref":"ZeroInstall.Model.Group.html","topicUid":"ZeroInstall.Model.Group"},{"name":"IArgBaseContainer","href":"ZeroInstall.Model.IArgBaseContainer.html","topicHref":"ZeroInstall.Model.IArgBaseContainer.html","topicUid":"ZeroInstall.Model.IArgBaseContainer"},{"name":"IBindingContainer","href":"ZeroInstall.Model.IBindingContainer.html","topicHref":"ZeroInstall.Model.IBindingContainer.html","topicUid":"ZeroInstall.Model.IBindingContainer"},{"name":"IDependencyContainer","href":"ZeroInstall.Model.IDependencyContainer.html","topicHref":"ZeroInstall.Model.IDependencyContainer.html","topicUid":"ZeroInstall.Model.IDependencyContainer"},{"name":"IDescriptionContainer","href":"ZeroInstall.Model.IDescriptionContainer.html","topicHref":"ZeroInstall.Model.IDescriptionContainer.html","topicUid":"ZeroInstall.Model.IDescriptionContainer"},{"name":"IElementContainer","href":"ZeroInstall.Model.IElementContainer.html","topicHref":"ZeroInstall.Model.IElementContainer.html","topicUid":"ZeroInstall.Model.IElementContainer"},{"name":"IIconContainer","href":"ZeroInstall.Model.IIconContainer.html","topicHref":"ZeroInstall.Model.IIconContainer.html","topicUid":"ZeroInstall.Model.IIconContainer"},{"name":"IInterfaceUri","href":"ZeroInstall.Model.IInterfaceUri.html","topicHref":"ZeroInstall.Model.IInterfaceUri.html","topicUid":"ZeroInstall.Model.IInterfaceUri"},{"name":"IInterfaceUriBindingContainer","href":"ZeroInstall.Model.IInterfaceUriBindingContainer.html","topicHref":"ZeroInstall.Model.IInterfaceUriBindingContainer.html","topicUid":"ZeroInstall.Model.IInterfaceUriBindingContainer"},{"name":"IRecipeStep","href":"ZeroInstall.Model.IRecipeStep.html","topicHref":"ZeroInstall.Model.IRecipeStep.html","topicUid":"ZeroInstall.Model.IRecipeStep"},{"name":"ISummaryContainer","href":"ZeroInstall.Model.ISummaryContainer.html","topicHref":"ZeroInstall.Model.ISummaryContainer.html","topicUid":"ZeroInstall.Model.ISummaryContainer"},{"name":"Icon","href":"ZeroInstall.Model.Icon.html","topicHref":"ZeroInstall.Model.Icon.html","topicUid":"ZeroInstall.Model.Icon"},{"name":"IconExtensions","href":"ZeroInstall.Model.IconExtensions.html","topicHref":"ZeroInstall.Model.IconExtensions.html","topicUid":"ZeroInstall.Model.IconExtensions"},{"name":"Implementation","href":"ZeroInstall.Model.Implementation.html","topicHref":"ZeroInstall.Model.Implementation.html","topicUid":"ZeroInstall.Model.Implementation"},{"name":"ImplementationBase","href":"ZeroInstall.Model.ImplementationBase.html","topicHref":"ZeroInstall.Model.ImplementationBase.html","topicUid":"ZeroInstall.Model.ImplementationBase"},{"name":"ImplementationVersion","href":"ZeroInstall.Model.ImplementationVersion.html","topicHref":"ZeroInstall.Model.ImplementationVersion.html","topicUid":"ZeroInstall.Model.ImplementationVersion"},{"name":"Importance","href":"ZeroInstall.Model.Importance.html","topicHref":"ZeroInstall.Model.Importance.html","topicUid":"ZeroInstall.Model.Importance"},{"name":"InterfaceReference","href":"ZeroInstall.Model.InterfaceReference.html","topicHref":"ZeroInstall.Model.InterfaceReference.html","topicUid":"ZeroInstall.Model.InterfaceReference"},{"name":"ManifestDigest","href":"ZeroInstall.Model.ManifestDigest.html","topicHref":"ZeroInstall.Model.ManifestDigest.html","topicUid":"ZeroInstall.Model.ManifestDigest"},{"name":"ManifestDigestPartialEqualityComparer","href":"ZeroInstall.Model.ManifestDigestPartialEqualityComparer.html","topicHref":"ZeroInstall.Model.ManifestDigestPartialEqualityComparer.html","topicUid":"ZeroInstall.Model.ManifestDigestPartialEqualityComparer"},{"name":"ManifestDigestPartialEqualityComparer","href":"ZeroInstall.Model.ManifestDigestPartialEqualityComparer-1.html","topicHref":"ZeroInstall.Model.ManifestDigestPartialEqualityComparer-1.html","topicUid":"ZeroInstall.Model.ManifestDigestPartialEqualityComparer`1"},{"name":"ModelUtils","href":"ZeroInstall.Model.ModelUtils.html","topicHref":"ZeroInstall.Model.ModelUtils.html","topicUid":"ZeroInstall.Model.ModelUtils"},{"name":"OS","href":"ZeroInstall.Model.OS.html","topicHref":"ZeroInstall.Model.OS.html","topicUid":"ZeroInstall.Model.OS"},{"name":"OverlayBinding","href":"ZeroInstall.Model.OverlayBinding.html","topicHref":"ZeroInstall.Model.OverlayBinding.html","topicUid":"ZeroInstall.Model.OverlayBinding"},{"name":"PackageImplementation","href":"ZeroInstall.Model.PackageImplementation.html","topicHref":"ZeroInstall.Model.PackageImplementation.html","topicUid":"ZeroInstall.Model.PackageImplementation"},{"name":"Recipe","href":"ZeroInstall.Model.Recipe.html","topicHref":"ZeroInstall.Model.Recipe.html","topicUid":"ZeroInstall.Model.Recipe"},{"name":"RemoveStep","href":"ZeroInstall.Model.RemoveStep.html","topicHref":"ZeroInstall.Model.RemoveStep.html","topicUid":"ZeroInstall.Model.RemoveStep"},{"name":"RenameStep","href":"ZeroInstall.Model.RenameStep.html","topicHref":"ZeroInstall.Model.RenameStep.html","topicUid":"ZeroInstall.Model.RenameStep"},{"name":"Requirements","href":"ZeroInstall.Model.Requirements.html","topicHref":"ZeroInstall.Model.Requirements.html","topicUid":"ZeroInstall.Model.Requirements"},{"name":"Restriction","href":"ZeroInstall.Model.Restriction.html","topicHref":"ZeroInstall.Model.Restriction.html","topicUid":"ZeroInstall.Model.Restriction"},{"name":"RetrievalMethod","href":"ZeroInstall.Model.RetrievalMethod.html","topicHref":"ZeroInstall.Model.RetrievalMethod.html","topicUid":"ZeroInstall.Model.RetrievalMethod"},{"name":"Runner","href":"ZeroInstall.Model.Runner.html","topicHref":"ZeroInstall.Model.Runner.html","topicUid":"ZeroInstall.Model.Runner"},{"name":"SingleFile","href":"ZeroInstall.Model.SingleFile.html","topicHref":"ZeroInstall.Model.SingleFile.html","topicUid":"ZeroInstall.Model.SingleFile"},{"name":"Stability","href":"ZeroInstall.Model.Stability.html","topicHref":"ZeroInstall.Model.Stability.html","topicUid":"ZeroInstall.Model.Stability"},{"name":"TargetBase","href":"ZeroInstall.Model.TargetBase.html","topicHref":"ZeroInstall.Model.TargetBase.html","topicUid":"ZeroInstall.Model.TargetBase"},{"name":"VersionDottedList","href":"ZeroInstall.Model.VersionDottedList.html","topicHref":"ZeroInstall.Model.VersionDottedList.html","topicUid":"ZeroInstall.Model.VersionDottedList"},{"name":"VersionModifier","href":"ZeroInstall.Model.VersionModifier.html","topicHref":"ZeroInstall.Model.VersionModifier.html","topicUid":"ZeroInstall.Model.VersionModifier"},{"name":"VersionPart","href":"ZeroInstall.Model.VersionPart.html","topicHref":"ZeroInstall.Model.VersionPart.html","topicUid":"ZeroInstall.Model.VersionPart"},{"name":"VersionRange","href":"ZeroInstall.Model.VersionRange.html","topicHref":"ZeroInstall.Model.VersionRange.html","topicUid":"ZeroInstall.Model.VersionRange"},{"name":"VersionRangePart","href":"ZeroInstall.Model.VersionRangePart.html","topicHref":"ZeroInstall.Model.VersionRangePart.html","topicUid":"ZeroInstall.Model.VersionRangePart"},{"name":"VersionRangePartExact","href":"ZeroInstall.Model.VersionRangePartExact.html","topicHref":"ZeroInstall.Model.VersionRangePartExact.html","topicUid":"ZeroInstall.Model.VersionRangePartExact"},{"name":"VersionRangePartExclude","href":"ZeroInstall.Model.VersionRangePartExclude.html","topicHref":"ZeroInstall.Model.VersionRangePartExclude.html","topicUid":"ZeroInstall.Model.VersionRangePartExclude"},{"name":"VersionRangePartRange","href":"ZeroInstall.Model.VersionRangePartRange.html","topicHref":"ZeroInstall.Model.VersionRangePartRange.html","topicUid":"ZeroInstall.Model.VersionRangePartRange"},{"name":"WorkingDir","href":"ZeroInstall.Model.WorkingDir.html","topicHref":"ZeroInstall.Model.WorkingDir.html","topicUid":"ZeroInstall.Model.WorkingDir"},{"name":"XmlUnknown","href":"ZeroInstall.Model.XmlUnknown.html","topicHref":"ZeroInstall.Model.XmlUnknown.html","topicUid":"ZeroInstall.Model.XmlUnknown"},{"name":"ZeroInstallDeployment","href":"ZeroInstall.Model.ZeroInstallDeployment.html","topicHref":"ZeroInstall.Model.ZeroInstallDeployment.html","topicUid":"ZeroInstall.Model.ZeroInstallDeployment"},{"name":"ZeroInstallEnvironment","href":"ZeroInstall.Model.ZeroInstallEnvironment.html","topicHref":"ZeroInstall.Model.ZeroInstallEnvironment.html","topicUid":"ZeroInstall.Model.ZeroInstallEnvironment"}]},{"name":"Publish","href":"ZeroInstall.Publish.html","topicHref":"ZeroInstall.Publish.html","topicUid":"ZeroInstall.Publish","items":[{"name":"Capture","href":"ZeroInstall.Publish.Capture.html","topicHref":"ZeroInstall.Publish.Capture.html","topicUid":"ZeroInstall.Publish.Capture","items":[{"name":"CaptureSession","href":"ZeroInstall.Publish.Capture.CaptureSession.html","topicHref":"ZeroInstall.Publish.Capture.CaptureSession.html","topicUid":"ZeroInstall.Publish.Capture.CaptureSession"},{"name":"CommandMapper","href":"ZeroInstall.Publish.Capture.CommandMapper.html","topicHref":"ZeroInstall.Publish.Capture.CommandMapper.html","topicUid":"ZeroInstall.Publish.Capture.CommandMapper"},{"name":"Snapshot","href":"ZeroInstall.Publish.Capture.Snapshot.html","topicHref":"ZeroInstall.Publish.Capture.Snapshot.html","topicUid":"ZeroInstall.Publish.Capture.Snapshot"},{"name":"SnapshotDiff","href":"ZeroInstall.Publish.Capture.SnapshotDiff.html","topicHref":"ZeroInstall.Publish.Capture.SnapshotDiff.html","topicUid":"ZeroInstall.Publish.Capture.SnapshotDiff"}]},{"name":"EntryPoints","href":"ZeroInstall.Publish.EntryPoints.html","topicHref":"ZeroInstall.Publish.EntryPoints.html","topicUid":"ZeroInstall.Publish.EntryPoints","items":[{"name":"BashScript","href":"ZeroInstall.Publish.EntryPoints.BashScript.html","topicHref":"ZeroInstall.Publish.EntryPoints.BashScript.html","topicUid":"ZeroInstall.Publish.EntryPoints.BashScript"},{"name":"Candidate","href":"ZeroInstall.Publish.EntryPoints.Candidate.html","topicHref":"ZeroInstall.Publish.EntryPoints.Candidate.html","topicUid":"ZeroInstall.Publish.EntryPoints.Candidate"},{"name":"DetectCandidates","href":"ZeroInstall.Publish.EntryPoints.DetectCandidates.html","topicHref":"ZeroInstall.Publish.EntryPoints.DetectCandidates.html","topicUid":"ZeroInstall.Publish.EntryPoints.DetectCandidates"},{"name":"DotNetDll","href":"ZeroInstall.Publish.EntryPoints.DotNetDll.html","topicHref":"ZeroInstall.Publish.EntryPoints.DotNetDll.html","topicUid":"ZeroInstall.Publish.EntryPoints.DotNetDll"},{"name":"DotNetExe","href":"ZeroInstall.Publish.EntryPoints.DotNetExe.html","topicHref":"ZeroInstall.Publish.EntryPoints.DotNetExe.html","topicUid":"ZeroInstall.Publish.EntryPoints.DotNetExe"},{"name":"DotNetFrameworkExe","href":"ZeroInstall.Publish.EntryPoints.DotNetFrameworkExe.html","topicHref":"ZeroInstall.Publish.EntryPoints.DotNetFrameworkExe.html","topicUid":"ZeroInstall.Publish.EntryPoints.DotNetFrameworkExe"},{"name":"DotNetRuntimeType","href":"ZeroInstall.Publish.EntryPoints.DotNetRuntimeType.html","topicHref":"ZeroInstall.Publish.EntryPoints.DotNetRuntimeType.html","topicUid":"ZeroInstall.Publish.EntryPoints.DotNetRuntimeType"},{"name":"IIconContainer","href":"ZeroInstall.Publish.EntryPoints.IIconContainer.html","topicHref":"ZeroInstall.Publish.EntryPoints.IIconContainer.html","topicUid":"ZeroInstall.Publish.EntryPoints.IIconContainer"},{"name":"InterpretedScript","href":"ZeroInstall.Publish.EntryPoints.InterpretedScript.html","topicHref":"ZeroInstall.Publish.EntryPoints.InterpretedScript.html","topicUid":"ZeroInstall.Publish.EntryPoints.InterpretedScript"},{"name":"Java","href":"ZeroInstall.Publish.EntryPoints.Java.html","topicHref":"ZeroInstall.Publish.EntryPoints.Java.html","topicUid":"ZeroInstall.Publish.EntryPoints.Java"},{"name":"JavaClass","href":"ZeroInstall.Publish.EntryPoints.JavaClass.html","topicHref":"ZeroInstall.Publish.EntryPoints.JavaClass.html","topicUid":"ZeroInstall.Publish.EntryPoints.JavaClass"},{"name":"JavaJar","href":"ZeroInstall.Publish.EntryPoints.JavaJar.html","topicHref":"ZeroInstall.Publish.EntryPoints.JavaJar.html","topicUid":"ZeroInstall.Publish.EntryPoints.JavaJar"},{"name":"MacOSApp","href":"ZeroInstall.Publish.EntryPoints.MacOSApp.html","topicHref":"ZeroInstall.Publish.EntryPoints.MacOSApp.html","topicUid":"ZeroInstall.Publish.EntryPoints.MacOSApp"},{"name":"NativeExecutable","href":"ZeroInstall.Publish.EntryPoints.NativeExecutable.html","topicHref":"ZeroInstall.Publish.EntryPoints.NativeExecutable.html","topicUid":"ZeroInstall.Publish.EntryPoints.NativeExecutable"},{"name":"PEHeader","href":"ZeroInstall.Publish.EntryPoints.PEHeader.html","topicHref":"ZeroInstall.Publish.EntryPoints.PEHeader.html","topicUid":"ZeroInstall.Publish.EntryPoints.PEHeader"},{"name":"PEHeader.ImageDataDirectory","href":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageDataDirectory.html","topicHref":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageDataDirectory.html","topicUid":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageDataDirectory"},{"name":"PEHeader.ImageDosHeader","href":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageDosHeader.html","topicHref":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageDosHeader.html","topicUid":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageDosHeader"},{"name":"PEHeader.ImageFileHeader","href":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageFileHeader.html","topicHref":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageFileHeader.html","topicUid":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageFileHeader"},{"name":"PEHeader.ImageOptionalHeader32","href":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader32.html","topicHref":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader32.html","topicUid":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader32"},{"name":"PEHeader.ImageOptionalHeader64","href":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader64.html","topicHref":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader64.html","topicUid":"ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader64"},{"name":"PEMachineType","href":"ZeroInstall.Publish.EntryPoints.PEMachineType.html","topicHref":"ZeroInstall.Publish.EntryPoints.PEMachineType.html","topicUid":"ZeroInstall.Publish.EntryPoints.PEMachineType"},{"name":"PESubsystem","href":"ZeroInstall.Publish.EntryPoints.PESubsystem.html","topicHref":"ZeroInstall.Publish.EntryPoints.PESubsystem.html","topicUid":"ZeroInstall.Publish.EntryPoints.PESubsystem"},{"name":"PerlScript","href":"ZeroInstall.Publish.EntryPoints.PerlScript.html","topicHref":"ZeroInstall.Publish.EntryPoints.PerlScript.html","topicUid":"ZeroInstall.Publish.EntryPoints.PerlScript"},{"name":"PhpScript","href":"ZeroInstall.Publish.EntryPoints.PhpScript.html","topicHref":"ZeroInstall.Publish.EntryPoints.PhpScript.html","topicUid":"ZeroInstall.Publish.EntryPoints.PhpScript"},{"name":"PosixBinary","href":"ZeroInstall.Publish.EntryPoints.PosixBinary.html","topicHref":"ZeroInstall.Publish.EntryPoints.PosixBinary.html","topicUid":"ZeroInstall.Publish.EntryPoints.PosixBinary"},{"name":"PosixExecutable","href":"ZeroInstall.Publish.EntryPoints.PosixExecutable.html","topicHref":"ZeroInstall.Publish.EntryPoints.PosixExecutable.html","topicUid":"ZeroInstall.Publish.EntryPoints.PosixExecutable"},{"name":"PosixScript","href":"ZeroInstall.Publish.EntryPoints.PosixScript.html","topicHref":"ZeroInstall.Publish.EntryPoints.PosixScript.html","topicUid":"ZeroInstall.Publish.EntryPoints.PosixScript"},{"name":"PowerShellScript","href":"ZeroInstall.Publish.EntryPoints.PowerShellScript.html","topicHref":"ZeroInstall.Publish.EntryPoints.PowerShellScript.html","topicUid":"ZeroInstall.Publish.EntryPoints.PowerShellScript"},{"name":"PowerShellType","href":"ZeroInstall.Publish.EntryPoints.PowerShellType.html","topicHref":"ZeroInstall.Publish.EntryPoints.PowerShellType.html","topicUid":"ZeroInstall.Publish.EntryPoints.PowerShellType"},{"name":"PythonScript","href":"ZeroInstall.Publish.EntryPoints.PythonScript.html","topicHref":"ZeroInstall.Publish.EntryPoints.PythonScript.html","topicUid":"ZeroInstall.Publish.EntryPoints.PythonScript"},{"name":"RubyScript","href":"ZeroInstall.Publish.EntryPoints.RubyScript.html","topicHref":"ZeroInstall.Publish.EntryPoints.RubyScript.html","topicUid":"ZeroInstall.Publish.EntryPoints.RubyScript"},{"name":"WindowsBatch","href":"ZeroInstall.Publish.EntryPoints.WindowsBatch.html","topicHref":"ZeroInstall.Publish.EntryPoints.WindowsBatch.html","topicUid":"ZeroInstall.Publish.EntryPoints.WindowsBatch"},{"name":"WindowsExe","href":"ZeroInstall.Publish.EntryPoints.WindowsExe.html","topicHref":"ZeroInstall.Publish.EntryPoints.WindowsExe.html","topicUid":"ZeroInstall.Publish.EntryPoints.WindowsExe"}]},{"name":"BuilderExtensions","href":"ZeroInstall.Publish.BuilderExtensions.html","topicHref":"ZeroInstall.Publish.BuilderExtensions.html","topicUid":"ZeroInstall.Publish.BuilderExtensions"},{"name":"FeedBuilder","href":"ZeroInstall.Publish.FeedBuilder.html","topicHref":"ZeroInstall.Publish.FeedBuilder.html","topicUid":"ZeroInstall.Publish.FeedBuilder"},{"name":"FeedEditing","href":"ZeroInstall.Publish.FeedEditing.html","topicHref":"ZeroInstall.Publish.FeedEditing.html","topicUid":"ZeroInstall.Publish.FeedEditing"},{"name":"FeedUtils","href":"ZeroInstall.Publish.FeedUtils.html","topicHref":"ZeroInstall.Publish.FeedUtils.html","topicUid":"ZeroInstall.Publish.FeedUtils"},{"name":"ImplementationExtensions","href":"ZeroInstall.Publish.ImplementationExtensions.html","topicHref":"ZeroInstall.Publish.ImplementationExtensions.html","topicUid":"ZeroInstall.Publish.ImplementationExtensions"},{"name":"RetrievalMethodExtensions","href":"ZeroInstall.Publish.RetrievalMethodExtensions.html","topicHref":"ZeroInstall.Publish.RetrievalMethodExtensions.html","topicUid":"ZeroInstall.Publish.RetrievalMethodExtensions"},{"name":"SignedCatalog","href":"ZeroInstall.Publish.SignedCatalog.html","topicHref":"ZeroInstall.Publish.SignedCatalog.html","topicUid":"ZeroInstall.Publish.SignedCatalog"},{"name":"SignedFeed","href":"ZeroInstall.Publish.SignedFeed.html","topicHref":"ZeroInstall.Publish.SignedFeed.html","topicUid":"ZeroInstall.Publish.SignedFeed"}]},{"name":"Services","href":"ZeroInstall.Services.html","topicHref":"ZeroInstall.Services.html","topicUid":"ZeroInstall.Services","items":[{"name":"Executors","href":"ZeroInstall.Services.Executors.html","topicHref":"ZeroInstall.Services.Executors.html","topicUid":"ZeroInstall.Services.Executors","items":[{"name":"EnvironmentBuilder","href":"ZeroInstall.Services.Executors.EnvironmentBuilder.html","topicHref":"ZeroInstall.Services.Executors.EnvironmentBuilder.html","topicUid":"ZeroInstall.Services.Executors.EnvironmentBuilder"},{"name":"Executor","href":"ZeroInstall.Services.Executors.Executor.html","topicHref":"ZeroInstall.Services.Executors.Executor.html","topicUid":"ZeroInstall.Services.Executors.Executor"},{"name":"ExecutorException","href":"ZeroInstall.Services.Executors.ExecutorException.html","topicHref":"ZeroInstall.Services.Executors.ExecutorException.html","topicUid":"ZeroInstall.Services.Executors.ExecutorException"},{"name":"IEnvironmentBuilder","href":"ZeroInstall.Services.Executors.IEnvironmentBuilder.html","topicHref":"ZeroInstall.Services.Executors.IEnvironmentBuilder.html","topicUid":"ZeroInstall.Services.Executors.IEnvironmentBuilder"},{"name":"IExecutor","href":"ZeroInstall.Services.Executors.IExecutor.html","topicHref":"ZeroInstall.Services.Executors.IExecutor.html","topicUid":"ZeroInstall.Services.Executors.IExecutor"}]},{"name":"Feeds","href":"ZeroInstall.Services.Feeds.html","topicHref":"ZeroInstall.Services.Feeds.html","topicUid":"ZeroInstall.Services.Feeds","items":[{"name":"CatalogManager","href":"ZeroInstall.Services.Feeds.CatalogManager.html","topicHref":"ZeroInstall.Services.Feeds.CatalogManager.html","topicUid":"ZeroInstall.Services.Feeds.CatalogManager"},{"name":"CatalogManagerExtensions","href":"ZeroInstall.Services.Feeds.CatalogManagerExtensions.html","topicHref":"ZeroInstall.Services.Feeds.CatalogManagerExtensions.html","topicUid":"ZeroInstall.Services.Feeds.CatalogManagerExtensions"},{"name":"FeedManager","href":"ZeroInstall.Services.Feeds.FeedManager.html","topicHref":"ZeroInstall.Services.Feeds.FeedManager.html","topicUid":"ZeroInstall.Services.Feeds.FeedManager"},{"name":"FeedManagerExtensions","href":"ZeroInstall.Services.Feeds.FeedManagerExtensions.html","topicHref":"ZeroInstall.Services.Feeds.FeedManagerExtensions.html","topicUid":"ZeroInstall.Services.Feeds.FeedManagerExtensions"},{"name":"ICatalogManager","href":"ZeroInstall.Services.Feeds.ICatalogManager.html","topicHref":"ZeroInstall.Services.Feeds.ICatalogManager.html","topicUid":"ZeroInstall.Services.Feeds.ICatalogManager"},{"name":"IFeedManager","href":"ZeroInstall.Services.Feeds.IFeedManager.html","topicHref":"ZeroInstall.Services.Feeds.IFeedManager.html","topicUid":"ZeroInstall.Services.Feeds.IFeedManager"},{"name":"ITrustManager","href":"ZeroInstall.Services.Feeds.ITrustManager.html","topicHref":"ZeroInstall.Services.Feeds.ITrustManager.html","topicUid":"ZeroInstall.Services.Feeds.ITrustManager"},{"name":"OpenPgpKeyCallback","href":"ZeroInstall.Services.Feeds.OpenPgpKeyCallback.html","topicHref":"ZeroInstall.Services.Feeds.OpenPgpKeyCallback.html","topicUid":"ZeroInstall.Services.Feeds.OpenPgpKeyCallback"},{"name":"ReplayAttackException","href":"ZeroInstall.Services.Feeds.ReplayAttackException.html","topicHref":"ZeroInstall.Services.Feeds.ReplayAttackException.html","topicUid":"ZeroInstall.Services.Feeds.ReplayAttackException"},{"name":"TrustManager","href":"ZeroInstall.Services.Feeds.TrustManager.html","topicHref":"ZeroInstall.Services.Feeds.TrustManager.html","topicUid":"ZeroInstall.Services.Feeds.TrustManager"}]},{"name":"Fetchers","href":"ZeroInstall.Services.Fetchers.html","topicHref":"ZeroInstall.Services.Fetchers.html","topicUid":"ZeroInstall.Services.Fetchers","items":[{"name":"Fetcher","href":"ZeroInstall.Services.Fetchers.Fetcher.html","topicHref":"ZeroInstall.Services.Fetchers.Fetcher.html","topicUid":"ZeroInstall.Services.Fetchers.Fetcher"},{"name":"IFetcher","href":"ZeroInstall.Services.Fetchers.IFetcher.html","topicHref":"ZeroInstall.Services.Fetchers.IFetcher.html","topicUid":"ZeroInstall.Services.Fetchers.IFetcher"},{"name":"IImplementationDiscovery","href":"ZeroInstall.Services.Fetchers.IImplementationDiscovery.html","topicHref":"ZeroInstall.Services.Fetchers.IImplementationDiscovery.html","topicUid":"ZeroInstall.Services.Fetchers.IImplementationDiscovery"},{"name":"ImplementationDiscovery","href":"ZeroInstall.Services.Fetchers.ImplementationDiscovery.html","topicHref":"ZeroInstall.Services.Fetchers.ImplementationDiscovery.html","topicUid":"ZeroInstall.Services.Fetchers.ImplementationDiscovery"},{"name":"ImplementationDiscoveryExtensions","href":"ZeroInstall.Services.Fetchers.ImplementationDiscoveryExtensions.html","topicHref":"ZeroInstall.Services.Fetchers.ImplementationDiscoveryExtensions.html","topicUid":"ZeroInstall.Services.Fetchers.ImplementationDiscoveryExtensions"},{"name":"RetrievalMethodRanker","href":"ZeroInstall.Services.Fetchers.RetrievalMethodRanker.html","topicHref":"ZeroInstall.Services.Fetchers.RetrievalMethodRanker.html","topicUid":"ZeroInstall.Services.Fetchers.RetrievalMethodRanker"}]},{"name":"Native","href":"ZeroInstall.Services.Native.html","topicHref":"ZeroInstall.Services.Native.html","topicUid":"ZeroInstall.Services.Native","items":[{"name":"CompositePackageManager","href":"ZeroInstall.Services.Native.CompositePackageManager.html","topicHref":"ZeroInstall.Services.Native.CompositePackageManager.html","topicUid":"ZeroInstall.Services.Native.CompositePackageManager"},{"name":"ExternalImplementation","href":"ZeroInstall.Services.Native.ExternalImplementation.html","topicHref":"ZeroInstall.Services.Native.ExternalImplementation.html","topicUid":"ZeroInstall.Services.Native.ExternalImplementation"},{"name":"ExternalRetrievalMethod","href":"ZeroInstall.Services.Native.ExternalRetrievalMethod.html","topicHref":"ZeroInstall.Services.Native.ExternalRetrievalMethod.html","topicUid":"ZeroInstall.Services.Native.ExternalRetrievalMethod"},{"name":"IPackageManager","href":"ZeroInstall.Services.Native.IPackageManager.html","topicHref":"ZeroInstall.Services.Native.IPackageManager.html","topicUid":"ZeroInstall.Services.Native.IPackageManager"},{"name":"PackageManagerBase","href":"ZeroInstall.Services.Native.PackageManagerBase.html","topicHref":"ZeroInstall.Services.Native.PackageManagerBase.html","topicUid":"ZeroInstall.Services.Native.PackageManagerBase"},{"name":"PackageManagers","href":"ZeroInstall.Services.Native.PackageManagers.html","topicHref":"ZeroInstall.Services.Native.PackageManagers.html","topicUid":"ZeroInstall.Services.Native.PackageManagers"},{"name":"WindowsPackageManager","href":"ZeroInstall.Services.Native.WindowsPackageManager.html","topicHref":"ZeroInstall.Services.Native.WindowsPackageManager.html","topicUid":"ZeroInstall.Services.Native.WindowsPackageManager"}]},{"name":"Solvers","href":"ZeroInstall.Services.Solvers.html","topicHref":"ZeroInstall.Services.Solvers.html","topicUid":"ZeroInstall.Services.Solvers","items":[{"name":"BacktrackingSolver","href":"ZeroInstall.Services.Solvers.BacktrackingSolver.html","topicHref":"ZeroInstall.Services.Solvers.BacktrackingSolver.html","topicUid":"ZeroInstall.Services.Solvers.BacktrackingSolver"},{"name":"ExternalSolver","href":"ZeroInstall.Services.Solvers.ExternalSolver.html","topicHref":"ZeroInstall.Services.Solvers.ExternalSolver.html","topicUid":"ZeroInstall.Services.Solvers.ExternalSolver"},{"name":"FallbackSolver","href":"ZeroInstall.Services.Solvers.FallbackSolver.html","topicHref":"ZeroInstall.Services.Solvers.FallbackSolver.html","topicUid":"ZeroInstall.Services.Solvers.FallbackSolver"},{"name":"ISelectionCandidateProvider","href":"ZeroInstall.Services.Solvers.ISelectionCandidateProvider.html","topicHref":"ZeroInstall.Services.Solvers.ISelectionCandidateProvider.html","topicUid":"ZeroInstall.Services.Solvers.ISelectionCandidateProvider"},{"name":"ISolver","href":"ZeroInstall.Services.Solvers.ISolver.html","topicHref":"ZeroInstall.Services.Solvers.ISolver.html","topicUid":"ZeroInstall.Services.Solvers.ISolver"},{"name":"SelectionCandidateComparer","href":"ZeroInstall.Services.Solvers.SelectionCandidateComparer.html","topicHref":"ZeroInstall.Services.Solvers.SelectionCandidateComparer.html","topicUid":"ZeroInstall.Services.Solvers.SelectionCandidateComparer"},{"name":"SelectionCandidateProvider","href":"ZeroInstall.Services.Solvers.SelectionCandidateProvider.html","topicHref":"ZeroInstall.Services.Solvers.SelectionCandidateProvider.html","topicUid":"ZeroInstall.Services.Solvers.SelectionCandidateProvider"},{"name":"SolverDemand","href":"ZeroInstall.Services.Solvers.SolverDemand.html","topicHref":"ZeroInstall.Services.Solvers.SolverDemand.html","topicUid":"ZeroInstall.Services.Solvers.SolverDemand"},{"name":"SolverException","href":"ZeroInstall.Services.Solvers.SolverException.html","topicHref":"ZeroInstall.Services.Solvers.SolverException.html","topicUid":"ZeroInstall.Services.Solvers.SolverException"},{"name":"SolverExtensions","href":"ZeroInstall.Services.Solvers.SolverExtensions.html","topicHref":"ZeroInstall.Services.Solvers.SolverExtensions.html","topicUid":"ZeroInstall.Services.Solvers.SolverExtensions"},{"name":"SolverRunBase","href":"ZeroInstall.Services.Solvers.SolverRunBase.html","topicHref":"ZeroInstall.Services.Solvers.SolverRunBase.html","topicUid":"ZeroInstall.Services.Solvers.SolverRunBase"},{"name":"SolverUtils","href":"ZeroInstall.Services.Solvers.SolverUtils.html","topicHref":"ZeroInstall.Services.Solvers.SolverUtils.html","topicUid":"ZeroInstall.Services.Solvers.SolverUtils"}]},{"name":"ISelectionsManager","href":"ZeroInstall.Services.ISelectionsManager.html","topicHref":"ZeroInstall.Services.ISelectionsManager.html","topicUid":"ZeroInstall.Services.ISelectionsManager"},{"name":"SelectionsManager","href":"ZeroInstall.Services.SelectionsManager.html","topicHref":"ZeroInstall.Services.SelectionsManager.html","topicUid":"ZeroInstall.Services.SelectionsManager"},{"name":"SelectionsManagerExtensions","href":"ZeroInstall.Services.SelectionsManagerExtensions.html","topicHref":"ZeroInstall.Services.SelectionsManagerExtensions.html","topicUid":"ZeroInstall.Services.SelectionsManagerExtensions"},{"name":"ServiceCollectionExtensions","href":"ZeroInstall.Services.ServiceCollectionExtensions.html","topicHref":"ZeroInstall.Services.ServiceCollectionExtensions.html","topicUid":"ZeroInstall.Services.ServiceCollectionExtensions"},{"name":"ServiceProvider","href":"ZeroInstall.Services.ServiceProvider.html","topicHref":"ZeroInstall.Services.ServiceProvider.html","topicUid":"ZeroInstall.Services.ServiceProvider"},{"name":"WebExceptionExtensions","href":"ZeroInstall.Services.WebExceptionExtensions.html","topicHref":"ZeroInstall.Services.WebExceptionExtensions.html","topicUid":"ZeroInstall.Services.WebExceptionExtensions"}]},{"name":"Store","href":"ZeroInstall.Store.html","topicHref":"ZeroInstall.Store.html","topicUid":"ZeroInstall.Store","items":[{"name":"Configuration","href":"ZeroInstall.Store.Configuration.html","topicHref":"ZeroInstall.Store.Configuration.html","topicUid":"ZeroInstall.Store.Configuration","items":[{"name":"Config","href":"ZeroInstall.Store.Configuration.Config.html","topicHref":"ZeroInstall.Store.Configuration.Config.html","topicUid":"ZeroInstall.Store.Configuration.Config"},{"name":"ConfigTab","href":"ZeroInstall.Store.Configuration.ConfigTab.html","topicHref":"ZeroInstall.Store.Configuration.ConfigTab.html","topicUid":"ZeroInstall.Store.Configuration.ConfigTab"},{"name":"NetworkLevel","href":"ZeroInstall.Store.Configuration.NetworkLevel.html","topicHref":"ZeroInstall.Store.Configuration.NetworkLevel.html","topicUid":"ZeroInstall.Store.Configuration.NetworkLevel"}]},{"name":"Deployment","href":"ZeroInstall.Store.Deployment.html","topicHref":"ZeroInstall.Store.Deployment.html","topicUid":"ZeroInstall.Store.Deployment","items":[{"name":"ClearDirectory","href":"ZeroInstall.Store.Deployment.ClearDirectory.html","topicHref":"ZeroInstall.Store.Deployment.ClearDirectory.html","topicUid":"ZeroInstall.Store.Deployment.ClearDirectory"},{"name":"DeployDirectory","href":"ZeroInstall.Store.Deployment.DeployDirectory.html","topicHref":"ZeroInstall.Store.Deployment.DeployDirectory.html","topicUid":"ZeroInstall.Store.Deployment.DeployDirectory"},{"name":"DirectoryOperation","href":"ZeroInstall.Store.Deployment.DirectoryOperation.html","topicHref":"ZeroInstall.Store.Deployment.DirectoryOperation.html","topicUid":"ZeroInstall.Store.Deployment.DirectoryOperation"}]},{"name":"Feeds","href":"ZeroInstall.Store.Feeds.html","topicHref":"ZeroInstall.Store.Feeds.html","topicUid":"ZeroInstall.Store.Feeds","items":[{"name":"FeedCache","href":"ZeroInstall.Store.Feeds.FeedCache.html","topicHref":"ZeroInstall.Store.Feeds.FeedCache.html","topicUid":"ZeroInstall.Store.Feeds.FeedCache"},{"name":"FeedCaches","href":"ZeroInstall.Store.Feeds.FeedCaches.html","topicHref":"ZeroInstall.Store.Feeds.FeedCaches.html","topicUid":"ZeroInstall.Store.Feeds.FeedCaches"},{"name":"FeedUtils","href":"ZeroInstall.Store.Feeds.FeedUtils.html","topicHref":"ZeroInstall.Store.Feeds.FeedUtils.html","topicUid":"ZeroInstall.Store.Feeds.FeedUtils"},{"name":"IFeedCache","href":"ZeroInstall.Store.Feeds.IFeedCache.html","topicHref":"ZeroInstall.Store.Feeds.IFeedCache.html","topicUid":"ZeroInstall.Store.Feeds.IFeedCache"},{"name":"SearchResult","href":"ZeroInstall.Store.Feeds.SearchResult.html","topicHref":"ZeroInstall.Store.Feeds.SearchResult.html","topicUid":"ZeroInstall.Store.Feeds.SearchResult"},{"name":"SearchResults","href":"ZeroInstall.Store.Feeds.SearchResults.html","topicHref":"ZeroInstall.Store.Feeds.SearchResults.html","topicUid":"ZeroInstall.Store.Feeds.SearchResults"}]},{"name":"FileSystem","href":"ZeroInstall.Store.FileSystem.html","topicHref":"ZeroInstall.Store.FileSystem.html","topicUid":"ZeroInstall.Store.FileSystem","items":[{"name":"BuilderExtensions","href":"ZeroInstall.Store.FileSystem.BuilderExtensions.html","topicHref":"ZeroInstall.Store.FileSystem.BuilderExtensions.html","topicUid":"ZeroInstall.Store.FileSystem.BuilderExtensions"},{"name":"DirectoryBuilder","href":"ZeroInstall.Store.FileSystem.DirectoryBuilder.html","topicHref":"ZeroInstall.Store.FileSystem.DirectoryBuilder.html","topicUid":"ZeroInstall.Store.FileSystem.DirectoryBuilder"},{"name":"IBuilder","href":"ZeroInstall.Store.FileSystem.IBuilder.html","topicHref":"ZeroInstall.Store.FileSystem.IBuilder.html","topicUid":"ZeroInstall.Store.FileSystem.IBuilder"},{"name":"IForwardOnlyBuilder","href":"ZeroInstall.Store.FileSystem.IForwardOnlyBuilder.html","topicHref":"ZeroInstall.Store.FileSystem.IForwardOnlyBuilder.html","topicUid":"ZeroInstall.Store.FileSystem.IForwardOnlyBuilder"},{"name":"ImplFileUtils","href":"ZeroInstall.Store.FileSystem.ImplFileUtils.html","topicHref":"ZeroInstall.Store.FileSystem.ImplFileUtils.html","topicUid":"ZeroInstall.Store.FileSystem.ImplFileUtils"},{"name":"PrefixBuilder","href":"ZeroInstall.Store.FileSystem.PrefixBuilder.html","topicHref":"ZeroInstall.Store.FileSystem.PrefixBuilder.html","topicUid":"ZeroInstall.Store.FileSystem.PrefixBuilder"},{"name":"ReadDirectory","href":"ZeroInstall.Store.FileSystem.ReadDirectory.html","topicHref":"ZeroInstall.Store.FileSystem.ReadDirectory.html","topicUid":"ZeroInstall.Store.FileSystem.ReadDirectory"}]},{"name":"Icons","href":"ZeroInstall.Store.Icons.html","topicHref":"ZeroInstall.Store.Icons.html","topicUid":"ZeroInstall.Store.Icons","items":[{"name":"IIconStore","href":"ZeroInstall.Store.Icons.IIconStore.html","topicHref":"ZeroInstall.Store.Icons.IIconStore.html","topicUid":"ZeroInstall.Store.Icons.IIconStore"},{"name":"IconStore","href":"ZeroInstall.Store.Icons.IconStore.html","topicHref":"ZeroInstall.Store.Icons.IconStore.html","topicUid":"ZeroInstall.Store.Icons.IconStore"},{"name":"IconStoreExtensions","href":"ZeroInstall.Store.Icons.IconStoreExtensions.html","topicHref":"ZeroInstall.Store.Icons.IconStoreExtensions.html","topicUid":"ZeroInstall.Store.Icons.IconStoreExtensions"}]},{"name":"Implementations","href":"ZeroInstall.Store.Implementations.html","topicHref":"ZeroInstall.Store.Implementations.html","topicUid":"ZeroInstall.Store.Implementations","items":[{"name":"CompositeImplementationSink","href":"ZeroInstall.Store.Implementations.CompositeImplementationSink.html","topicHref":"ZeroInstall.Store.Implementations.CompositeImplementationSink.html","topicUid":"ZeroInstall.Store.Implementations.CompositeImplementationSink"},{"name":"CompositeImplementationStore","href":"ZeroInstall.Store.Implementations.CompositeImplementationStore.html","topicHref":"ZeroInstall.Store.Implementations.CompositeImplementationStore.html","topicUid":"ZeroInstall.Store.Implementations.CompositeImplementationStore"},{"name":"DigestMismatchException","href":"ZeroInstall.Store.Implementations.DigestMismatchException.html","topicHref":"ZeroInstall.Store.Implementations.DigestMismatchException.html","topicUid":"ZeroInstall.Store.Implementations.DigestMismatchException"},{"name":"IImplementationSink","href":"ZeroInstall.Store.Implementations.IImplementationSink.html","topicHref":"ZeroInstall.Store.Implementations.IImplementationSink.html","topicUid":"ZeroInstall.Store.Implementations.IImplementationSink"},{"name":"IImplementationStore","href":"ZeroInstall.Store.Implementations.IImplementationStore.html","topicHref":"ZeroInstall.Store.Implementations.IImplementationStore.html","topicUid":"ZeroInstall.Store.Implementations.IImplementationStore"},{"name":"ImplementationAlreadyInStoreException","href":"ZeroInstall.Store.Implementations.ImplementationAlreadyInStoreException.html","topicHref":"ZeroInstall.Store.Implementations.ImplementationAlreadyInStoreException.html","topicUid":"ZeroInstall.Store.Implementations.ImplementationAlreadyInStoreException"},{"name":"ImplementationNotFoundException","href":"ZeroInstall.Store.Implementations.ImplementationNotFoundException.html","topicHref":"ZeroInstall.Store.Implementations.ImplementationNotFoundException.html","topicUid":"ZeroInstall.Store.Implementations.ImplementationNotFoundException"},{"name":"ImplementationSink","href":"ZeroInstall.Store.Implementations.ImplementationSink.html","topicHref":"ZeroInstall.Store.Implementations.ImplementationSink.html","topicUid":"ZeroInstall.Store.Implementations.ImplementationSink"},{"name":"ImplementationStore","href":"ZeroInstall.Store.Implementations.ImplementationStore.html","topicHref":"ZeroInstall.Store.Implementations.ImplementationStore.html","topicUid":"ZeroInstall.Store.Implementations.ImplementationStore"},{"name":"ImplementationStoreKind","href":"ZeroInstall.Store.Implementations.ImplementationStoreKind.html","topicHref":"ZeroInstall.Store.Implementations.ImplementationStoreKind.html","topicUid":"ZeroInstall.Store.Implementations.ImplementationStoreKind"},{"name":"ImplementationStoreUtils","href":"ZeroInstall.Store.Implementations.ImplementationStoreUtils.html","topicHref":"ZeroInstall.Store.Implementations.ImplementationStoreUtils.html","topicUid":"ZeroInstall.Store.Implementations.ImplementationStoreUtils"},{"name":"ImplementationStores","href":"ZeroInstall.Store.Implementations.ImplementationStores.html","topicHref":"ZeroInstall.Store.Implementations.ImplementationStores.html","topicUid":"ZeroInstall.Store.Implementations.ImplementationStores"}]},{"name":"Manifests","href":"ZeroInstall.Store.Manifests.html","topicHref":"ZeroInstall.Store.Manifests.html","topicUid":"ZeroInstall.Store.Manifests","items":[{"name":"Manifest","href":"ZeroInstall.Store.Manifests.Manifest.html","topicHref":"ZeroInstall.Store.Manifests.Manifest.html","topicUid":"ZeroInstall.Store.Manifests.Manifest"},{"name":"ManifestBuilder","href":"ZeroInstall.Store.Manifests.ManifestBuilder.html","topicHref":"ZeroInstall.Store.Manifests.ManifestBuilder.html","topicUid":"ZeroInstall.Store.Manifests.ManifestBuilder"},{"name":"ManifestElement","href":"ZeroInstall.Store.Manifests.ManifestElement.html","topicHref":"ZeroInstall.Store.Manifests.ManifestElement.html","topicUid":"ZeroInstall.Store.Manifests.ManifestElement"},{"name":"ManifestExecutableFile","href":"ZeroInstall.Store.Manifests.ManifestExecutableFile.html","topicHref":"ZeroInstall.Store.Manifests.ManifestExecutableFile.html","topicUid":"ZeroInstall.Store.Manifests.ManifestExecutableFile"},{"name":"ManifestFile","href":"ZeroInstall.Store.Manifests.ManifestFile.html","topicHref":"ZeroInstall.Store.Manifests.ManifestFile.html","topicUid":"ZeroInstall.Store.Manifests.ManifestFile"},{"name":"ManifestFormat","href":"ZeroInstall.Store.Manifests.ManifestFormat.html","topicHref":"ZeroInstall.Store.Manifests.ManifestFormat.html","topicUid":"ZeroInstall.Store.Manifests.ManifestFormat"},{"name":"ManifestNormalFile","href":"ZeroInstall.Store.Manifests.ManifestNormalFile.html","topicHref":"ZeroInstall.Store.Manifests.ManifestNormalFile.html","topicUid":"ZeroInstall.Store.Manifests.ManifestNormalFile"},{"name":"ManifestSymlink","href":"ZeroInstall.Store.Manifests.ManifestSymlink.html","topicHref":"ZeroInstall.Store.Manifests.ManifestSymlink.html","topicUid":"ZeroInstall.Store.Manifests.ManifestSymlink"}]},{"name":"Trust","href":"ZeroInstall.Store.Trust.html","topicHref":"ZeroInstall.Store.Trust.html","topicUid":"ZeroInstall.Store.Trust","items":[{"name":"BadSignature","href":"ZeroInstall.Store.Trust.BadSignature.html","topicHref":"ZeroInstall.Store.Trust.BadSignature.html","topicUid":"ZeroInstall.Store.Trust.BadSignature"},{"name":"BouncyCastle","href":"ZeroInstall.Store.Trust.BouncyCastle.html","topicHref":"ZeroInstall.Store.Trust.BouncyCastle.html","topicUid":"ZeroInstall.Store.Trust.BouncyCastle"},{"name":"Domain","href":"ZeroInstall.Store.Trust.Domain.html","topicHref":"ZeroInstall.Store.Trust.Domain.html","topicUid":"ZeroInstall.Store.Trust.Domain"},{"name":"DomainSet","href":"ZeroInstall.Store.Trust.DomainSet.html","topicHref":"ZeroInstall.Store.Trust.DomainSet.html","topicUid":"ZeroInstall.Store.Trust.DomainSet"},{"name":"ErrorSignature","href":"ZeroInstall.Store.Trust.ErrorSignature.html","topicHref":"ZeroInstall.Store.Trust.ErrorSignature.html","topicUid":"ZeroInstall.Store.Trust.ErrorSignature"},{"name":"GnuPG","href":"ZeroInstall.Store.Trust.GnuPG.html","topicHref":"ZeroInstall.Store.Trust.GnuPG.html","topicUid":"ZeroInstall.Store.Trust.GnuPG"},{"name":"IFingerprintContainer","href":"ZeroInstall.Store.Trust.IFingerprintContainer.html","topicHref":"ZeroInstall.Store.Trust.IFingerprintContainer.html","topicUid":"ZeroInstall.Store.Trust.IFingerprintContainer"},{"name":"IKeyIDContainer","href":"ZeroInstall.Store.Trust.IKeyIDContainer.html","topicHref":"ZeroInstall.Store.Trust.IKeyIDContainer.html","topicUid":"ZeroInstall.Store.Trust.IKeyIDContainer"},{"name":"IOpenPgp","href":"ZeroInstall.Store.Trust.IOpenPgp.html","topicHref":"ZeroInstall.Store.Trust.IOpenPgp.html","topicUid":"ZeroInstall.Store.Trust.IOpenPgp"},{"name":"Key","href":"ZeroInstall.Store.Trust.Key.html","topicHref":"ZeroInstall.Store.Trust.Key.html","topicUid":"ZeroInstall.Store.Trust.Key"},{"name":"MissingKeySignature","href":"ZeroInstall.Store.Trust.MissingKeySignature.html","topicHref":"ZeroInstall.Store.Trust.MissingKeySignature.html","topicUid":"ZeroInstall.Store.Trust.MissingKeySignature"},{"name":"OpenPgp","href":"ZeroInstall.Store.Trust.OpenPgp.html","topicHref":"ZeroInstall.Store.Trust.OpenPgp.html","topicUid":"ZeroInstall.Store.Trust.OpenPgp"},{"name":"OpenPgpExtensions","href":"ZeroInstall.Store.Trust.OpenPgpExtensions.html","topicHref":"ZeroInstall.Store.Trust.OpenPgpExtensions.html","topicUid":"ZeroInstall.Store.Trust.OpenPgpExtensions"},{"name":"OpenPgpFingerprint","href":"ZeroInstall.Store.Trust.OpenPgpFingerprint.html","topicHref":"ZeroInstall.Store.Trust.OpenPgpFingerprint.html","topicUid":"ZeroInstall.Store.Trust.OpenPgpFingerprint"},{"name":"OpenPgpSecretKey","href":"ZeroInstall.Store.Trust.OpenPgpSecretKey.html","topicHref":"ZeroInstall.Store.Trust.OpenPgpSecretKey.html","topicUid":"ZeroInstall.Store.Trust.OpenPgpSecretKey"},{"name":"OpenPgpSignature","href":"ZeroInstall.Store.Trust.OpenPgpSignature.html","topicHref":"ZeroInstall.Store.Trust.OpenPgpSignature.html","topicUid":"ZeroInstall.Store.Trust.OpenPgpSignature"},{"name":"OpenPgpUtils","href":"ZeroInstall.Store.Trust.OpenPgpUtils.html","topicHref":"ZeroInstall.Store.Trust.OpenPgpUtils.html","topicUid":"ZeroInstall.Store.Trust.OpenPgpUtils"},{"name":"SignatureException","href":"ZeroInstall.Store.Trust.SignatureException.html","topicHref":"ZeroInstall.Store.Trust.SignatureException.html","topicUid":"ZeroInstall.Store.Trust.SignatureException"},{"name":"TrustDB","href":"ZeroInstall.Store.Trust.TrustDB.html","topicHref":"ZeroInstall.Store.Trust.TrustDB.html","topicUid":"ZeroInstall.Store.Trust.TrustDB"},{"name":"ValidSignature","href":"ZeroInstall.Store.Trust.ValidSignature.html","topicHref":"ZeroInstall.Store.Trust.ValidSignature.html","topicUid":"ZeroInstall.Store.Trust.ValidSignature"},{"name":"WrongPassphraseException","href":"ZeroInstall.Store.Trust.WrongPassphraseException.html","topicHref":"ZeroInstall.Store.Trust.WrongPassphraseException.html","topicUid":"ZeroInstall.Store.Trust.WrongPassphraseException"}]},{"name":"ViewModel","href":"ZeroInstall.Store.ViewModel.html","topicHref":"ZeroInstall.Store.ViewModel.html","topicUid":"ZeroInstall.Store.ViewModel","items":[{"name":"CacheNode","href":"ZeroInstall.Store.ViewModel.CacheNode.html","topicHref":"ZeroInstall.Store.ViewModel.CacheNode.html","topicUid":"ZeroInstall.Store.ViewModel.CacheNode"},{"name":"CacheNodeBuilder","href":"ZeroInstall.Store.ViewModel.CacheNodeBuilder.html","topicHref":"ZeroInstall.Store.ViewModel.CacheNodeBuilder.html","topicUid":"ZeroInstall.Store.ViewModel.CacheNodeBuilder"},{"name":"FeedNode","href":"ZeroInstall.Store.ViewModel.FeedNode.html","topicHref":"ZeroInstall.Store.ViewModel.FeedNode.html","topicUid":"ZeroInstall.Store.ViewModel.FeedNode"},{"name":"ImplementationNode","href":"ZeroInstall.Store.ViewModel.ImplementationNode.html","topicHref":"ZeroInstall.Store.ViewModel.ImplementationNode.html","topicUid":"ZeroInstall.Store.ViewModel.ImplementationNode"},{"name":"OwnedImplementationNode","href":"ZeroInstall.Store.ViewModel.OwnedImplementationNode.html","topicHref":"ZeroInstall.Store.ViewModel.OwnedImplementationNode.html","topicUid":"ZeroInstall.Store.ViewModel.OwnedImplementationNode"},{"name":"SelectionsDiffNode","href":"ZeroInstall.Store.ViewModel.SelectionsDiffNode.html","topicHref":"ZeroInstall.Store.ViewModel.SelectionsDiffNode.html","topicUid":"ZeroInstall.Store.ViewModel.SelectionsDiffNode"},{"name":"SelectionsTreeNode","href":"ZeroInstall.Store.ViewModel.SelectionsTreeNode.html","topicHref":"ZeroInstall.Store.ViewModel.SelectionsTreeNode.html","topicUid":"ZeroInstall.Store.ViewModel.SelectionsTreeNode"},{"name":"TempDirectoryNode","href":"ZeroInstall.Store.ViewModel.TempDirectoryNode.html","topicHref":"ZeroInstall.Store.ViewModel.TempDirectoryNode.html","topicUid":"ZeroInstall.Store.ViewModel.TempDirectoryNode"},{"name":"TrustNode","href":"ZeroInstall.Store.ViewModel.TrustNode.html","topicHref":"ZeroInstall.Store.ViewModel.TrustNode.html","topicUid":"ZeroInstall.Store.ViewModel.TrustNode"},{"name":"TrustNodeExtensions","href":"ZeroInstall.Store.ViewModel.TrustNodeExtensions.html","topicHref":"ZeroInstall.Store.ViewModel.TrustNodeExtensions.html","topicUid":"ZeroInstall.Store.ViewModel.TrustNodeExtensions"}]},{"name":"ManagerBase","href":"ZeroInstall.Store.ManagerBase.html","topicHref":"ZeroInstall.Store.ManagerBase.html","topicUid":"ZeroInstall.Store.ManagerBase"}]}]}],"memberLayout":"SamePage"} diff --git a/cli.html b/cli.html new file mode 100644 index 000000000..95e403fc3 --- /dev/null +++ b/cli.html @@ -0,0 +1,124 @@ + + + + + Command-line interface | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+

Command-line interface

+ +

The ZeroInstall.Commands namespace provides a command-line interface for Zero Install. This both implements an actual command-line executable and provides a library for building other clients.

+

Processing arguments

+

ProgramUtils.Init() should be called by all clients right after startup to initialize process-wide state.

+

Afterwards ProgramUtils.Run() can be called with the command-line arguments to be parsed along with an ICommandHandler. ICommandHandler extends the ITaskHandler interface with various UI interactions that commands can use to display intermediate results, ask for user input, etc..

+

ProgramUtils.Run() parses the provided command-line arguments and selects the appropriate CliCommand to handle them.

+

Inheritance hierarchy

+

Each command (e.g., 0install run) is represented by a class derived from CliCommand (e.g., Run).

+

CliCommand derives from ScopedOperation. This provides a more basic starting point, for any operation that requires scoped dependency resolution. It provides this by itself deriving from ServiceProvider.

+ +
+ + + + + +
+ +
+ +
+
+ +
+ +
+
+
+ Copyright Bastian Eicher et al +
+
+
+ + diff --git a/client.html b/client.html new file mode 100644 index 000000000..78bbdbbf2 --- /dev/null +++ b/client.html @@ -0,0 +1,146 @@ + + + + + Client library | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+

Client library

+ +

The ZeroInstall.Client namespace allows you to invoke Zero Install commands from within other applications.

+

Use Detect to automatically discover the locations of the 0install and/or 0install-win executables. This gives you an instance of IZeroInstallClient, which enables easy programmatic access to a subset of the Command-line interface.

+

Samples

+

Detect 0install location and the feed URI used to launch the app:

+
var zeroInstall = ZeroInstallClient.Detect;
+var feedUri = ZeroInstallEnvironment.FeedUri ?? new FeedUri("https://example.com/your-feed.xml");
+
+

Download updates if available:

+
if (await zeroInstall.UpdateAsync(feedUri))
+    NotifyUpdateAvailable();
+
+

Restart the app to run the latest version:

+
zeroInstall.Run(feedUri);
+Environment.Exit(0);
+
+

Toggle the app's auto start desktop integration:

+
bool isAutoStartEnabled = (await zeroInstall.GetIntegrationAsync(feedUri)).Contains("auto-start");
+if (isAutoStartEnabled)
+    await zeroInstall.IntegrateAsync(feedUri, remove: new[] {"auto-start"});
+else
+    await zeroInstall.IntegrateAsync(feedUri, add: new[] {"auto-start"});
+
+

Error handling

+

The client library maps 0install's exit codes to exceptions. Your code should be ready to catch:

+ + +
+ + + + + +
+ +
+ +
+
+ +
+ +
+
+
+ Copyright Bastian Eicher et al +
+
+
+ + diff --git a/docs/toc.html b/docs/toc.html new file mode 100644 index 000000000..4878482c5 --- /dev/null +++ b/docs/toc.html @@ -0,0 +1,40 @@ + +
+
+
+
+ + + +
+
+
+
+ + +
+
+
+
diff --git a/docs/toc.json b/docs/toc.json new file mode 100644 index 000000000..d44e08584 --- /dev/null +++ b/docs/toc.json @@ -0,0 +1,2 @@ + +{"items":[{"name":"Overview","href":"../index.html","topicHref":"../index.html"},{"name":"Services","href":"../services.html","topicHref":"../services.html"},{"name":"Data model","href":"../model.html","topicHref":"../model.html"},{"name":"Publishing","href":"../publish.html","topicHref":"../publish.html"},{"name":"File system","href":"../file-system.html","topicHref":"../file-system.html"},{"name":"Command-line interface","href":"../cli.html","topicHref":"../cli.html"},{"name":"Client library","href":"../client.html","topicHref":"../client.html"}]} diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..71570f61efd250abdc3bffd77a96c6986109bb85 GIT binary patch literal 99678 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 IhS>=GA3>?ZjsO4v literal 0 HcmV?d00001 diff --git a/file-system.html b/file-system.html new file mode 100644 index 000000000..986a95973 --- /dev/null +++ b/file-system.html @@ -0,0 +1,136 @@ + + + + + File system | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+

File system

+ +

The ZeroInstall.Store.FileSystem namespace provides interfaces and methods for building and reading file system structures.

+

The IBuilder interface represents a implementation directory being constructed.
+IForwardOnlyBuilder is a more limited subset, that only allows the addition of files but not the modification of files that have already been added.

+

There are various implementations of IBuilder:

+ +

Implementation store

+

When adding an implementation to an IImplementationStore the caller is provided an IBuilder via a callback:

+
store.Add(manifestDigest, builder =>
+{
+    builder.AddFile(...);
+    builder.AddFile(...);
+});
+
+

This allows the implementation store to control how and where the implementation gets constructed (usually via a composite of a DirectoryBuilder and a ManifestBuilder).

+

Retrieval methods

+

BuilderExtensions and BuilderExtensions provide extension methods for applying RetrievalMethods to an IBuilder. These methods internally pass the IBuilder to ReadDirectory, ZeroInstall.Archives.Extractors, etc..

+ +
+ + + + + +
+ +
+ +
+
+ +
+ +
+
+
+ Copyright Bastian Eicher et al +
+
+
+ + diff --git a/index.html b/index.html new file mode 100644 index 000000000..a891c4137 --- /dev/null +++ b/index.html @@ -0,0 +1,184 @@ + + + + + Overview | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+

Zero Install .NET API

+ +

Zero Install is a decentralized cross-platform software installation system. You can learn more at 0install.net.

+

This website documents the Zero Install .NET API. You can use this to integrate Zero Install features into your own application.

+

NuGet packages

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageNamespaceDescription
ZeroInstall.ModelZeroInstall.ModelData model for the Zero Install feed format.
ZeroInstall.ClientZeroInstall.ClientClient library for invoking Zero Install commands from within other applications.
ZeroInstall.StoreZeroInstall.StoreManagement of implementation caches, digital signatures, etc..
ZeroInstall.ArchivesZeroInstall.ArchivesExtracting and building archives (.zip, .tar, etc.).
ZeroInstall.ServicesZeroInstall.ServicesServices for solving dependencies, downloading implementations, executing apps, etc..
ZeroInstall.DesktopIntegrationZeroInstall.DesktopIntegrationIntegrating applications with desktop environments (creating menu entries, etc.).
ZeroInstall.CommandsZeroInstall.CommandsCommand-line interface for Zero Install. The binary in this package serves both as an actual CLI and a library for building other clients.
ZeroInstall.PublishZeroInstall.PublishUtilities for creating and modifying feed files.
+

Dependencies

+
flowchart TD
+    commands[ZeroInstall.Commands] --> services
+    commands --> desktop_integration
+    publish[ZeroInstall.Publish] --> client
+    publish --> archives
+    publish --> desktop_integration
+    services[ZeroInstall.Services] --> archives
+    archives[ZeroInstall.Archives] --> store
+    desktop_integration[ZeroInstall.DesktopIntegration] --> store
+    client[ZeroInstall.Client] --> model
+    store[ZeroInstall.Store] --> model
+    model[ZeroInstall.Model]
+
+ +
+ + + + + +
+ +
+ +
+
+ +
+ +
+
+
+ Copyright Bastian Eicher et al +
+
+
+ + diff --git a/index.json b/index.json new file mode 100644 index 000000000..b591fe2fa --- /dev/null +++ b/index.json @@ -0,0 +1,2412 @@ +{ + "api/ZeroInstall.Archives.BuilderExtensions.html": { + "href": "api/ZeroInstall.Archives.BuilderExtensions.html", + "title": "Class BuilderExtensions | Zero Install .NET API", + "keywords": "Class BuilderExtensions Namespace ZeroInstall.Archives Assembly ZeroInstall.Archives.dll Helpers for adding Archives to IBuilders. public static class BuilderExtensions Inheritance object BuilderExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Add(IBuilder, DownloadRetrievalMethod, Stream, ITaskHandler, object?) Adds a downloaded file to the implementation. public static void Add(this IBuilder builder, DownloadRetrievalMethod retrievalMethod, Stream stream, ITaskHandler handler, object? tag = null) Parameters builder IBuilder The builder. retrievalMethod DownloadRetrievalMethod The metadata of the file. stream Stream The contents of the file. handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. tag object A Tag used to group progress bars. Usually Best. Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed. AddArchive(IBuilder, Archive, Stream, ITaskHandler, object?) Adds an archive to the implementation. public static void AddArchive(this IBuilder builder, Archive archive, Stream stream, ITaskHandler handler, object? tag = null) Parameters builder IBuilder The builder. archive Archive The metadata of the archive. stream Stream The archive data to be extracted. handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. tag object A Tag used to group progress bars. Usually Best. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Builders.ArchiveBuilder.html": { + "href": "api/ZeroInstall.Archives.Builders.ArchiveBuilder.html", + "title": "Class ArchiveBuilder | Zero Install .NET API", + "keywords": "Class ArchiveBuilder Namespace ZeroInstall.Archives.Builders Assembly ZeroInstall.Archives.dll Builds implementation archive files. public static class ArchiveBuilder Inheritance object ArchiveBuilder Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields SupportedMimeTypes All supported MIME types for creating archives. This is a subset of KnownMimeTypes public static readonly string[] SupportedMimeTypes Field Value string[] Methods Create(Stream, string, bool) Creates a new ArchiveBuilder for creating an archive and writing it to a stream. [MustDisposeResource] public static IArchiveBuilder Create(Stream stream, string mimeType, bool fast = false) Parameters stream Stream The stream to write the archive to. Will be disposed when the builder is disposed. mimeType string The MIME type of archive format to create. fast bool The compression operation should complete as quickly as possible, even if the resulting file is not optimally compressed. Returns IArchiveBuilder Exceptions NotSupportedException The mimeType doesn't belong to a known and supported archive type. Create(string, string, bool) Creates a new ArchiveBuilder for creating an archive and writing it to a file. [MustDisposeResource] public static IArchiveBuilder Create(string path, string mimeType, bool fast = false) Parameters path string The path of the archive file to create. mimeType string The MIME type of archive format to create. fast bool The compression operation should complete as quickly as possible, even if the resulting file is not optimally compressed. Returns IArchiveBuilder Exceptions NotSupportedException The mimeType doesn't belong to a known and supported archive type. IOException Failed to create the archive file. UnauthorizedAccessException Write access to the archive file was denied. RunForDirectory(string, string, string, ITaskHandler) Create an an archive from a directory and writes it to a file. public static void RunForDirectory(string sourcePath, string archivePath, string mimeType, ITaskHandler handler) Parameters sourcePath string The path of the directory to read. archivePath string The path of the archive file to create. mimeType string The MIME type of archive format to create. handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Exceptions NotSupportedException The mimeType doesn't belong to a known and supported archive type. IOException Failed to read the directory or create the archive file. UnauthorizedAccessException Read access to the directory or write access to the archive file was denied." + }, + "api/ZeroInstall.Archives.Builders.IArchiveBuilder.html": { + "href": "api/ZeroInstall.Archives.Builders.IArchiveBuilder.html", + "title": "Interface IArchiveBuilder | Zero Install .NET API", + "keywords": "Interface IArchiveBuilder Namespace ZeroInstall.Archives.Builders Assembly ZeroInstall.Archives.dll Builds an implementation archive file. public interface IArchiveBuilder : IForwardOnlyBuilder, IDisposable Inherited Members IForwardOnlyBuilder.AddDirectory(string) IForwardOnlyBuilder.AddFile(string, Stream, UnixTime, bool) IForwardOnlyBuilder.AddSymlink(string, string) IForwardOnlyBuilder.AddHardlink(string, string, bool) IDisposable.Dispose()" + }, + "api/ZeroInstall.Archives.Builders.TarBuilder.html": { + "href": "api/ZeroInstall.Archives.Builders.TarBuilder.html", + "title": "Class TarBuilder | Zero Install .NET API", + "keywords": "Class TarBuilder Namespace ZeroInstall.Archives.Builders Assembly ZeroInstall.Archives.dll Builds a TAR archive (.tar). [MustDisposeResource] public class TarBuilder : IArchiveBuilder, IForwardOnlyBuilder, IDisposable Inheritance object TarBuilder Implements IArchiveBuilder IForwardOnlyBuilder IDisposable Derived TarBz2Builder TarGzBuilder TarLzipBuilder TarZstandardBuilder Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors TarBuilder(Stream) Builds a TAR archive (.tar). public TarBuilder(Stream stream) Parameters stream Stream The stream to write the archive to. Will be disposed when the builder is disposed. Methods AddDirectory(string) Adds a subdirectory to the implementation. public void AddDirectory(string path) Parameters path string The path of the directory to create relative to the implementation root. Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed. AddFile(string, Stream, UnixTime, bool) Adds a file to the implementation. public void AddFile(string path, Stream stream, UnixTime modifiedTime, bool executable = false) Parameters path string The path of the file to create relative to the implementation root. stream Stream The contents of the file. modifiedTime UnixTime The last write time to set for the file. executable bool true if the file's executable bit is to be set; false otherwise. Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed. AddHardlink(string, string, bool) Adds a hardlink to the implementation. public void AddHardlink(string path, string target, bool executable = false) Parameters path string The path of the hardlink to create relative to the implementation root. target string The path of the existing file the hardlink shall be based on relative to the implementation root. Must point executable bool true if the executable bit of the hardlink is set; false otherwise. Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed. NotSupportedException The currently platform or builder does not support hardlinks. Use AddFile(string, Stream, UnixTime, bool) instead. AddSymlink(string, string) Adds a symbolic link to the implementation. public void AddSymlink(string path, string target) Parameters path string The path of the symlink to create relative to the implementation root. target string The target the symbolic link shall point to relative to path. May use non-native path separators. Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public virtual void Dispose()" + }, + "api/ZeroInstall.Archives.Builders.TarBz2Builder.html": { + "href": "api/ZeroInstall.Archives.Builders.TarBz2Builder.html", + "title": "Class TarBz2Builder | Zero Install .NET API", + "keywords": "Class TarBz2Builder Namespace ZeroInstall.Archives.Builders Assembly ZeroInstall.Archives.dll Builds a BZip2-compressed TAR archive (.tar.bz2). [MustDisposeResource] public class TarBz2Builder : TarBuilder, IArchiveBuilder, IForwardOnlyBuilder, IDisposable Inheritance object TarBuilder TarBz2Builder Implements IArchiveBuilder IForwardOnlyBuilder IDisposable Inherited Members TarBuilder.Dispose() TarBuilder.AddDirectory(string) TarBuilder.AddFile(string, Stream, UnixTime, bool) TarBuilder.AddSymlink(string, string) TarBuilder.AddHardlink(string, string, bool) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors TarBz2Builder(Stream, bool) Builds a BZip2-compressed TAR archive (.tar.bz2). public TarBz2Builder(Stream stream, bool fast = false) Parameters stream Stream The stream to write the archive to. Will be disposed when the builder is disposed. fast bool The compression operation should complete as quickly as possible, even if the resulting file is not optimally compressed." + }, + "api/ZeroInstall.Archives.Builders.TarGzBuilder.html": { + "href": "api/ZeroInstall.Archives.Builders.TarGzBuilder.html", + "title": "Class TarGzBuilder | Zero Install .NET API", + "keywords": "Class TarGzBuilder Namespace ZeroInstall.Archives.Builders Assembly ZeroInstall.Archives.dll Builds a GZip-compressed TAR archive (.tar.gz). [MustDisposeResource] public class TarGzBuilder : TarBuilder, IArchiveBuilder, IForwardOnlyBuilder, IDisposable Inheritance object TarBuilder TarGzBuilder Implements IArchiveBuilder IForwardOnlyBuilder IDisposable Inherited Members TarBuilder.Dispose() TarBuilder.AddDirectory(string) TarBuilder.AddFile(string, Stream, UnixTime, bool) TarBuilder.AddSymlink(string, string) TarBuilder.AddHardlink(string, string, bool) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors TarGzBuilder(Stream, bool) Builds a GZip-compressed TAR archive (.tar.gz). public TarGzBuilder(Stream stream, bool fast = false) Parameters stream Stream The stream to write the archive to. Will be disposed when the builder is disposed. fast bool The compression operation should complete as quickly as possible, even if the resulting file is not optimally compressed." + }, + "api/ZeroInstall.Archives.Builders.TarLzipBuilder.html": { + "href": "api/ZeroInstall.Archives.Builders.TarLzipBuilder.html", + "title": "Class TarLzipBuilder | Zero Install .NET API", + "keywords": "Class TarLzipBuilder Namespace ZeroInstall.Archives.Builders Assembly ZeroInstall.Archives.dll Builds a Lzip-compressed TAR archive (.tar.lz). [MustDisposeResource] public class TarLzipBuilder : TarBuilder, IArchiveBuilder, IForwardOnlyBuilder, IDisposable Inheritance object TarBuilder TarLzipBuilder Implements IArchiveBuilder IForwardOnlyBuilder IDisposable Inherited Members TarBuilder.Dispose() TarBuilder.AddDirectory(string) TarBuilder.AddFile(string, Stream, UnixTime, bool) TarBuilder.AddSymlink(string, string) TarBuilder.AddHardlink(string, string, bool) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors TarLzipBuilder(Stream) Builds a Lzip-compressed TAR archive (.tar.lz). public TarLzipBuilder(Stream stream) Parameters stream Stream The stream to write the archive to. Will be disposed when the builder is disposed." + }, + "api/ZeroInstall.Archives.Builders.TarZstandardBuilder.html": { + "href": "api/ZeroInstall.Archives.Builders.TarZstandardBuilder.html", + "title": "Class TarZstandardBuilder | Zero Install .NET API", + "keywords": "Class TarZstandardBuilder Namespace ZeroInstall.Archives.Builders Assembly ZeroInstall.Archives.dll Builds a Zstandard-compressed TAR archive (tar.zst). [MustDisposeResource] public class TarZstandardBuilder : TarBuilder, IArchiveBuilder, IForwardOnlyBuilder, IDisposable Inheritance object TarBuilder TarZstandardBuilder Implements IArchiveBuilder IForwardOnlyBuilder IDisposable Inherited Members TarBuilder.AddDirectory(string) TarBuilder.AddFile(string, Stream, UnixTime, bool) TarBuilder.AddSymlink(string, string) TarBuilder.AddHardlink(string, string, bool) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors TarZstandardBuilder(Stream, bool) Builds a Zstandard-compressed TAR archive (tar.zst). public TarZstandardBuilder(Stream stream, bool fast = false) Parameters stream Stream The stream to write the archive to. Will be disposed when the builder is disposed. fast bool The compression operation should complete as quickly as possible, even if the resulting file is not optimally compressed. Methods Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public override void Dispose()" + }, + "api/ZeroInstall.Archives.Builders.ZipBuilder.html": { + "href": "api/ZeroInstall.Archives.Builders.ZipBuilder.html", + "title": "Class ZipBuilder | Zero Install .NET API", + "keywords": "Class ZipBuilder Namespace ZeroInstall.Archives.Builders Assembly ZeroInstall.Archives.dll Builds a ZIP archive (.zip). [MustDisposeResource] public class ZipBuilder : IArchiveBuilder, IForwardOnlyBuilder, IDisposable Inheritance object ZipBuilder Implements IArchiveBuilder IForwardOnlyBuilder IDisposable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ZipBuilder(Stream) Builds a ZIP archive (.zip). public ZipBuilder(Stream stream) Parameters stream Stream The stream to write the archive to. Will be disposed when the builder is disposed. Methods AddDirectory(string) Adds a subdirectory to the implementation. public void AddDirectory(string path) Parameters path string The path of the directory to create relative to the implementation root. Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed. AddFile(string, Stream, UnixTime, bool) Adds a file to the implementation. public void AddFile(string path, Stream stream, UnixTime modifiedTime, bool executable = false) Parameters path string The path of the file to create relative to the implementation root. stream Stream The contents of the file. modifiedTime UnixTime The last write time to set for the file. executable bool true if the file's executable bit is to be set; false otherwise. Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed. AddHardlink(string, string, bool) Adds a hardlink to the implementation. public void AddHardlink(string path, string target, bool executable = false) Parameters path string The path of the hardlink to create relative to the implementation root. target string The path of the existing file the hardlink shall be based on relative to the implementation root. Must point executable bool true if the executable bit of the hardlink is set; false otherwise. Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed. NotSupportedException The currently platform or builder does not support hardlinks. Use AddFile(string, Stream, UnixTime, bool) instead. AddSymlink(string, string) Adds a symbolic link to the implementation. public void AddSymlink(string path, string target) Parameters path string The path of the symlink to create relative to the implementation root. target string The target the symbolic link shall point to relative to path. May use non-native path separators. Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose()" + }, + "api/ZeroInstall.Archives.Builders.html": { + "href": "api/ZeroInstall.Archives.Builders.html", + "title": "Namespace ZeroInstall.Archives.Builders | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Archives.Builders Building archives (.zip, .tar, etc.). Classes ArchiveBuilder Builds implementation archive files. TarBuilder Builds a TAR archive (.tar). TarBz2Builder Builds a BZip2-compressed TAR archive (.tar.bz2). TarGzBuilder Builds a GZip-compressed TAR archive (.tar.gz). TarLzipBuilder Builds a Lzip-compressed TAR archive (.tar.lz). TarZstandardBuilder Builds a Zstandard-compressed TAR archive (tar.zst). ZipBuilder Builds a ZIP archive (.zip). Interfaces IArchiveBuilder Builds an implementation archive file." + }, + "api/ZeroInstall.Archives.Extractors.ArchiveExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.ArchiveExtractor.html", + "title": "Class ArchiveExtractor | Zero Install .NET API", + "keywords": "Class ArchiveExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts implementation archives. public abstract class ArchiveExtractor : IArchiveExtractor Inheritance object ArchiveExtractor Implements IArchiveExtractor Derived CabExtractor DmgExtractor MsiExtractor RarExtractor SevenZipExtractor TarExtractor ZipExtractor Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ArchiveExtractor(ITaskHandler) Extracts implementation archives. protected ArchiveExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Fields Handler A callback object used when the user needs to be informed about IO tasks. protected readonly ITaskHandler Handler Field Value ITaskHandler Properties Tag A Tag to set for see cref=\"ITask\"/>s spawned by this extractor; can be null. public object? Tag { get; set; } Property Value object Methods EnsureFile(Stream, Action) Ensures that a Stream represents an on-disk file, creating a temporary on-disk copy if necessary. protected static void EnsureFile(Stream stream, Action callback) Parameters stream Stream The stream to read. May be Close()d. callback Action Called with the file path. EnsureSeekable(Stream, Action) Ensures that a Stream is fully seekable, creating a temporary on-disk copy if necessary. protected void EnsureSeekable(Stream stream, Action callback) Parameters stream Stream The stream to read. callback Action Called with the original stream or a temporary seekable copy. Extract(IBuilder, Stream, string?) Extracts an archive. public abstract void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive. For(string, ITaskHandler) Creates a new IArchiveExtractor for a specific type of archive. public static IArchiveExtractor For(string mimeType, ITaskHandler handler) Parameters mimeType string The MIME type of archive format to extract. handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Returns IArchiveExtractor Exceptions NotSupportedException No extractor registered for mimeType. NormalizePath(string?, string?) Normalizes the path of an archive entry. protected static string? NormalizePath(string? path, string? subDir) Parameters path string The Unix-style path of the archive entry relative to the archive's root. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Returns string The relative path without the subDir; null if the path doesn't lie within the subDir. Register(string, Func) Registers an additional IArchiveExtractor. public static void Register(string mimeType, Func factory) Parameters mimeType string The MIME type of archive format the extractor handles. factory Func Callback providing instances of the extractor." + }, + "api/ZeroInstall.Archives.Extractors.CabExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.CabExtractor.html", + "title": "Class CabExtractor | Zero Install .NET API", + "keywords": "Class CabExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts MS Cabinets (.cab). public class CabExtractor : ArchiveExtractor, IArchiveExtractor Inheritance object ArchiveExtractor CabExtractor Implements IArchiveExtractor Inherited Members ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors CabExtractor(ITaskHandler) Extracts MS Cabinets (.cab). public CabExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Exceptions PlatformNotSupportedException The current platform is not Windows. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.DmgExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.DmgExtractor.html", + "title": "Class DmgExtractor | Zero Install .NET API", + "keywords": "Class DmgExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts Apple Disk images (.dmg). public class DmgExtractor : ArchiveExtractor, IArchiveExtractor Inheritance object ArchiveExtractor DmgExtractor Implements IArchiveExtractor Inherited Members ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors DmgExtractor(ITaskHandler) Extracts Apple Disk images (.dmg). public DmgExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Exceptions PlatformNotSupportedException The current platform is not macOS. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.IArchiveExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.IArchiveExtractor.html", + "title": "Interface IArchiveExtractor | Zero Install .NET API", + "keywords": "Interface IArchiveExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts implementation archives. public interface IArchiveExtractor Remarks Implementations of this interface are immutable and thread-safe. Properties Tag A Tag to set for see cref=\"ITask\"/>s spawned by this extractor; can be null. object? Tag { get; set; } Property Value object Methods Extract(IBuilder, Stream, string?) Extracts an archive. void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.MsiExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.MsiExtractor.html", + "title": "Class MsiExtractor | Zero Install .NET API", + "keywords": "Class MsiExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts Windows Installer packages (.msi) with one or more embedded CAB archives. public class MsiExtractor : ArchiveExtractor, IArchiveExtractor Inheritance object ArchiveExtractor MsiExtractor Implements IArchiveExtractor Inherited Members ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors MsiExtractor(ITaskHandler) Extracts Windows Installer packages (.msi) with one or more embedded CAB archives. public MsiExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Exceptions PlatformNotSupportedException The current platform is not Windows. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.RarExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.RarExtractor.html", + "title": "Class RarExtractor | Zero Install .NET API", + "keywords": "Class RarExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts RAR archives (.rar). public class RarExtractor : ArchiveExtractor, IArchiveExtractor Inheritance object ArchiveExtractor RarExtractor Implements IArchiveExtractor Inherited Members ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors RarExtractor(ITaskHandler) Extracts RAR archives (.rar). public RarExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.RubyGemExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.RubyGemExtractor.html", + "title": "Class RubyGemExtractor | Zero Install .NET API", + "keywords": "Class RubyGemExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts Ruby Gem archives (.gem). public class RubyGemExtractor : TarGzExtractor, IArchiveExtractor Inheritance object ArchiveExtractor TarExtractor TarGzExtractor RubyGemExtractor Implements IArchiveExtractor Inherited Members TarExtractor.DefaultMode TarExtractor.ExecuteMode ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors RubyGemExtractor(ITaskHandler) Extracts Ruby Gem archives (.gem). public RubyGemExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.SevenZipExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.SevenZipExtractor.html", + "title": "Class SevenZipExtractor | Zero Install .NET API", + "keywords": "Class SevenZipExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts 7-zip archives (.7z). public class SevenZipExtractor : ArchiveExtractor, IArchiveExtractor Inheritance object ArchiveExtractor SevenZipExtractor Implements IArchiveExtractor Inherited Members ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors SevenZipExtractor(ITaskHandler) Extracts 7-zip archives (.7z). public SevenZipExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.TarBz2Extractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.TarBz2Extractor.html", + "title": "Class TarBz2Extractor | Zero Install .NET API", + "keywords": "Class TarBz2Extractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts BZip2-compressed TAR archives (.tar.bz2). public class TarBz2Extractor : TarExtractor, IArchiveExtractor Inheritance object ArchiveExtractor TarExtractor TarBz2Extractor Implements IArchiveExtractor Inherited Members TarExtractor.DefaultMode TarExtractor.ExecuteMode ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors TarBz2Extractor(ITaskHandler) Extracts BZip2-compressed TAR archives (.tar.bz2). public TarBz2Extractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.TarExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.TarExtractor.html", + "title": "Class TarExtractor | Zero Install .NET API", + "keywords": "Class TarExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts TAR archives (.tar). public class TarExtractor : ArchiveExtractor, IArchiveExtractor Inheritance object ArchiveExtractor TarExtractor Implements IArchiveExtractor Derived TarBz2Extractor TarGzExtractor TarLzipExtractor TarLzmaExtractor TarXzExtractor TarZstandardExtractor Inherited Members ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors TarExtractor(ITaskHandler) Extracts TAR archives (.tar). public TarExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Fields DefaultMode The default Mode. public const int DefaultMode = 420 Field Value int ExecuteMode The Mode that indicate a TAR entry is an executable. public const int ExecuteMode = 73 Field Value int Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.TarGzExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.TarGzExtractor.html", + "title": "Class TarGzExtractor | Zero Install .NET API", + "keywords": "Class TarGzExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts GZip-compressed TAR archives (.tar.gz). public class TarGzExtractor : TarExtractor, IArchiveExtractor Inheritance object ArchiveExtractor TarExtractor TarGzExtractor Implements IArchiveExtractor Derived RubyGemExtractor Inherited Members TarExtractor.DefaultMode TarExtractor.ExecuteMode ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors TarGzExtractor(ITaskHandler) Extracts GZip-compressed TAR archives (.tar.gz). public TarGzExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.TarLzipExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.TarLzipExtractor.html", + "title": "Class TarLzipExtractor | Zero Install .NET API", + "keywords": "Class TarLzipExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts Lzip-compressed TAR archives (.tar.lz). public class TarLzipExtractor : TarExtractor, IArchiveExtractor Inheritance object ArchiveExtractor TarExtractor TarLzipExtractor Implements IArchiveExtractor Inherited Members TarExtractor.DefaultMode TarExtractor.ExecuteMode ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors TarLzipExtractor(ITaskHandler) Extracts Lzip-compressed TAR archives (.tar.lz). public TarLzipExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.TarLzmaExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.TarLzmaExtractor.html", + "title": "Class TarLzmaExtractor | Zero Install .NET API", + "keywords": "Class TarLzmaExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts LZMA-compressed TAR archives (.tar.lzma). public class TarLzmaExtractor : TarExtractor, IArchiveExtractor Inheritance object ArchiveExtractor TarExtractor TarLzmaExtractor Implements IArchiveExtractor Inherited Members TarExtractor.DefaultMode TarExtractor.ExecuteMode ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors TarLzmaExtractor(ITaskHandler) Extracts LZMA-compressed TAR archives (.tar.lzma). public TarLzmaExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.TarXzExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.TarXzExtractor.html", + "title": "Class TarXzExtractor | Zero Install .NET API", + "keywords": "Class TarXzExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts XZ-compressed TAR archives (tar.xz). public class TarXzExtractor : TarExtractor, IArchiveExtractor Inheritance object ArchiveExtractor TarExtractor TarXzExtractor Implements IArchiveExtractor Inherited Members TarExtractor.DefaultMode TarExtractor.ExecuteMode ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors TarXzExtractor(ITaskHandler) Extracts XZ-compressed TAR archives (tar.xz). public TarXzExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.TarZstandardExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.TarZstandardExtractor.html", + "title": "Class TarZstandardExtractor | Zero Install .NET API", + "keywords": "Class TarZstandardExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts Zstandard-compressed TAR archives (tar.zst). public class TarZstandardExtractor : TarExtractor, IArchiveExtractor Inheritance object ArchiveExtractor TarExtractor TarZstandardExtractor Implements IArchiveExtractor Inherited Members TarExtractor.DefaultMode TarExtractor.ExecuteMode ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors TarZstandardExtractor(ITaskHandler) Extracts Zstandard-compressed TAR archives (tar.zst). public TarZstandardExtractor(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks This class is immutable and thread-safe. Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.ZipExtractor.html": { + "href": "api/ZeroInstall.Archives.Extractors.ZipExtractor.html", + "title": "Class ZipExtractor | Zero Install .NET API", + "keywords": "Class ZipExtractor Namespace ZeroInstall.Archives.Extractors Assembly ZeroInstall.Archives.dll Extracts ZIP archives (.zip). public class ZipExtractor : ArchiveExtractor, IArchiveExtractor Inheritance object ArchiveExtractor ZipExtractor Implements IArchiveExtractor Inherited Members ArchiveExtractor.Register(string, Func) ArchiveExtractor.For(string, ITaskHandler) ArchiveExtractor.Handler ArchiveExtractor.Tag ArchiveExtractor.EnsureSeekable(Stream, Action) ArchiveExtractor.EnsureFile(Stream, Action) ArchiveExtractor.NormalizePath(string, string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ZipExtractor(ITaskHandler) Extracts ZIP archives (.zip). public ZipExtractor(ITaskHandler handler) Parameters handler ITaskHandler Fields DefaultAttributes The default ExternalFileAttributes. public const int DefaultAttributes = 27525120 Field Value int ExecuteAttributes The ExternalFileAttributes that indicate a ZIP entry is an executable file. public const int ExecuteAttributes = 4784128 Field Value int SymlinkAttributes The ExternalFileAttributes that indicate a ZIP entry is a symlink. public const int SymlinkAttributes = 536870912 Field Value int Methods Extract(IBuilder, Stream, string?) Extracts an archive. public override void Extract(IBuilder builder, Stream stream, string? subDir = null) Parameters builder IBuilder The builder receiving the extracted files. stream Stream The archive data to be extracted. subDir string The Unix-style path of the subdirectory in the archive to extract; null to extract entire archive. Exceptions OperationCanceledException The operation was canceled. IOException A problem occurred while extracting the archive." + }, + "api/ZeroInstall.Archives.Extractors.html": { + "href": "api/ZeroInstall.Archives.Extractors.html", + "title": "Namespace ZeroInstall.Archives.Extractors | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Archives.Extractors Extracting archives (.zip, .tar, etc.). Classes ArchiveExtractor Extracts implementation archives. CabExtractor Extracts MS Cabinets (.cab). DmgExtractor Extracts Apple Disk images (.dmg). MsiExtractor Extracts Windows Installer packages (.msi) with one or more embedded CAB archives. RarExtractor Extracts RAR archives (.rar). RubyGemExtractor Extracts Ruby Gem archives (.gem). SevenZipExtractor Extracts 7-zip archives (.7z). TarBz2Extractor Extracts BZip2-compressed TAR archives (.tar.bz2). TarExtractor Extracts TAR archives (.tar). TarGzExtractor Extracts GZip-compressed TAR archives (.tar.gz). TarLzipExtractor Extracts Lzip-compressed TAR archives (.tar.lz). TarLzmaExtractor Extracts LZMA-compressed TAR archives (.tar.lzma). TarXzExtractor Extracts XZ-compressed TAR archives (tar.xz). TarZstandardExtractor Extracts Zstandard-compressed TAR archives (tar.zst). ZipExtractor Extracts ZIP archives (.zip). Interfaces IArchiveExtractor Extracts implementation archives." + }, + "api/ZeroInstall.Archives.ImplementationServer.html": { + "href": "api/ZeroInstall.Archives.ImplementationServer.html", + "title": "Class ImplementationServer | Zero Install .NET API", + "keywords": "Class ImplementationServer Namespace ZeroInstall.Archives Assembly ZeroInstall.Archives.dll Simple HTTP web server that serves implementations as on-demand generated archives. public sealed class ImplementationServer : HttpServer, IDisposable Inheritance object HttpServer ImplementationServer Implements IDisposable Inherited Members HttpServer.Port object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Constructors ImplementationServer(IImplementationStore, ushort, bool) Starts serving implementations as archives via HTTP. public ImplementationServer(IImplementationStore implementationStore, ushort port = 0, bool localOnly = false) Parameters implementationStore IImplementationStore The implementation store to serve implementations from. port ushort The TCP port to listen on; 0 to automatically pick free port. localOnly bool true to only respond to requests from the local machine instead of the network. Useful for unit tests. Exceptions WebException Unable to serve on the specified port. NotAdminException Needs admin rights to serve HTTP requests. Fields DnsServiceName DNS name for discovering Zero Install implementation stores. public const string DnsServiceName = \"_0install-store._tcp\" Field Value string Methods Dispose() Stops serving implementations. public override void Dispose() HandleRequest(HttpListenerContext) Handles a single HTTP request. protected override void HandleRequest(HttpListenerContext context) Parameters context HttpListenerContext" + }, + "api/ZeroInstall.Archives.html": { + "href": "api/ZeroInstall.Archives.html", + "title": "Namespace ZeroInstall.Archives | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Archives Extracting and building archives (.zip, .tar, etc.). NuGet package: ZeroInstall.Archives Namespaces ZeroInstall.Archives.Builders Building archives (.zip, .tar, etc.). ZeroInstall.Archives.Extractors Extracting archives (.zip, .tar, etc.). Classes BuilderExtensions Helpers for adding Archives to IBuilders. ImplementationServer Simple HTTP web server that serves implementations as on-demand generated archives." + }, + "api/ZeroInstall.Client.IZeroInstallClient.html": { + "href": "api/ZeroInstall.Client.IZeroInstallClient.html", + "title": "Interface IZeroInstallClient | Zero Install .NET API", + "keywords": "Interface IZeroInstallClient Namespace ZeroInstall.Client Assembly ZeroInstall.Client.dll Client for invoking Zero Install commands from within other applications. public interface IZeroInstallClient Methods DownloadAsync(Requirements, bool) Downloads a program and compatible versions of all of its dependencies. Task DownloadAsync(Requirements requirements, bool refresh = false) Parameters requirements Requirements The requirements describing the program. refresh bool Fetch fresh copies of all used feeds. Returns Task The downloaded implementations. Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file, an invalid signature or digest mismatch. InvalidOperationException 0install reported a solver error. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. FetchAsync(Implementation) Downloads a set of Implementations. Task FetchAsync(Implementation implementation) Parameters implementation Implementation The implementations to download. Returns Task Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file, an invalid signature or digest mismatch. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. GetIntegration(FeedUri, bool) Returns the desktop integration categories that are currently applied for a specific feed. ISet GetIntegration(FeedUri uri, bool machineWide = false) Parameters uri FeedUri The feed URI of the application. machineWide bool Get machine-wide desktop integration instead of just for the current user. Returns ISet The access point categories (e.g., capability-registration, menu-entry, desktop-icon). Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. GetRunStartInfo(Requirements, bool, bool, params string[]) Provides a ProcessStartInfo for running a program via Zero Install. This allows you to wait for the program to exit and/or to capture its output. ProcessStartInfo GetRunStartInfo(Requirements requirements, bool refresh = false, bool needsTerminal = false, params string[] arguments) Parameters requirements Requirements The requirements describing the program. refresh bool Fetch fresh copies of all used feeds. needsTerminal bool Indicates that the program requires a terminal in order to run. arguments string[] Additional arguments to pass to the program. Returns ProcessStartInfo IntegrateAsync(FeedUri, IEnumerable?, IEnumerable?, bool) Adds an application to the application list (if missing) and integrates it into the desktop environment. Task IntegrateAsync(FeedUri uri, IEnumerable? add = null, IEnumerable? remove = null, bool machineWide = false) Parameters uri FeedUri The feed URI of the application. add IEnumerable The access point categories to add (e.g., capability-registration, menu-entry, desktop-icon). remove IEnumerable The access point categories to remove (e.g., capability-registration, menu-entry, desktop-icon). machineWide bool Apply the operation machine-wide instead of just for the current user. Returns Task Exceptions NotAdminException machineWide was set but the current process is not running with admin rights. IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file or an invalid signature. InvalidOperationException 0install reported a conflict with existing desktop integration. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. Remove(FeedUri, bool) Removes an application from the application list and undoes any desktop environment integration. void Remove(FeedUri uri, bool machineWide = false) Parameters uri FeedUri The feed URI of the application. machineWide bool Apply the operation machine-wide instead of just for the current user. Exceptions NotAdminException machineWide was set but the current process is not running with admin rights. IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. Run(Requirements, bool, bool, params string[]) Runs a program via Zero Install. Does not wait for the program to exit. void Run(Requirements requirements, bool refresh = false, bool needsTerminal = false, params string[] arguments) Parameters requirements Requirements The requirements describing the program. refresh bool Fetch fresh copies of all used feeds. needsTerminal bool Indicates that the program requires a terminal in order to run. arguments string[] Additional arguments to pass to the program. Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file, an invalid signature or digest mismatch. InvalidOperationException 0install reported a solver or executor error. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install or the target program returned an error. SelectAsync(Requirements, bool, bool) Selects a program and compatible versions of all of its dependencies. Task SelectAsync(Requirements requirements, bool refresh = false, bool offline = false) Parameters requirements Requirements The requirements describing the program. refresh bool Fetch fresh copies of all used feeds. offline bool Do not refresh feeds even if they are out-of-date and don't select newer versions of programs for downloading even if they are already known. Returns Task The selected implementations. Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file or an invalid signature. InvalidOperationException 0install reported a solver error. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. TrustKey(string, string) Trusts feeds from a specific domain when signed with a specific key. void TrustKey(string fingerprint, string domain) Parameters fingerprint string The fingerprint of the key to trust. domain string The domain the key should be trusted for. UpdateAsync(Requirements) Checks for updates to a program and downloads them if found. Task UpdateAsync(Requirements requirements) Parameters requirements Requirements The requirements describing the program. Returns Task true if updates where found and downloaded; false if no updates where found. Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file, an invalid signature or digest mismatch. InvalidOperationException 0install reported a solver error. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error." + }, + "api/ZeroInstall.Client.TemporarilyUnavailableException.html": { + "href": "api/ZeroInstall.Client.TemporarilyUnavailableException.html", + "title": "Class TemporarilyUnavailableException | Zero Install .NET API", + "keywords": "Class TemporarilyUnavailableException Namespace ZeroInstall.Client Assembly ZeroInstall.Client.dll Zero Install is temporarily unavailable. Try again in a few seconds. public class TemporarilyUnavailableException : Exception, ISerializable Inheritance object Exception TemporarilyUnavailableException Implements ISerializable Inherited Members Exception.GetBaseException() Exception.GetType() Exception.ToString() Exception.Data Exception.HelpLink Exception.HResult Exception.InnerException Exception.Message Exception.Source Exception.StackTrace Exception.TargetSite Exception.SerializeObjectState object.Equals(object) object.Equals(object, object) object.GetHashCode() object.MemberwiseClone() object.ReferenceEquals(object, object) Constructors TemporarilyUnavailableException() public TemporarilyUnavailableException()" + }, + "api/ZeroInstall.Client.ZeroInstallClient.html": { + "href": "api/ZeroInstall.Client.ZeroInstallClient.html", + "title": "Class ZeroInstallClient | Zero Install .NET API", + "keywords": "Class ZeroInstallClient Namespace ZeroInstall.Client Assembly ZeroInstall.Client.dll Client for invoking Zero Install commands from within other applications. public class ZeroInstallClient : IZeroInstallClient Inheritance object ZeroInstallClient Implements IZeroInstallClient Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ZeroInstallClient(IProcessLauncher, IProcessLauncher?) Client for invoking Zero Install commands from within other applications. public ZeroInstallClient(IProcessLauncher launcher, IProcessLauncher? guiLauncher = null) Parameters launcher IProcessLauncher Used to launch 0install as a child process. guiLauncher IProcessLauncher Used to launch 0install-win as a child process. ZeroInstallClient(string, string?) Creates a new Zero Install client. public ZeroInstallClient(string commandLine, string? guiCommandLine = null) Parameters commandLine string The command-line used to launch 0install. Whitespace must be properly escaped. guiCommandLine string The optional command-line used to launch 0install-win. Whitespace must be properly escaped. Properties Detect Creates a Zero Install client by detecting the location of 0install using environment variables or the Windows registry. public static IZeroInstallClient Detect { get; } Property Value IZeroInstallClient Methods DownloadAsync(Requirements, bool) Downloads a program and compatible versions of all of its dependencies. public Task DownloadAsync(Requirements requirements, bool refresh = false) Parameters requirements Requirements The requirements describing the program. refresh bool Fetch fresh copies of all used feeds. Returns Task The downloaded implementations. Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file, an invalid signature or digest mismatch. InvalidOperationException 0install reported a solver error. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. FetchAsync(Implementation) Downloads a set of Implementations. public Task FetchAsync(Implementation implementation) Parameters implementation Implementation The implementations to download. Returns Task Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file, an invalid signature or digest mismatch. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. GetIntegration(FeedUri, bool) Returns the desktop integration categories that are currently applied for a specific feed. public ISet GetIntegration(FeedUri uri, bool machineWide = false) Parameters uri FeedUri The feed URI of the application. machineWide bool Get machine-wide desktop integration instead of just for the current user. Returns ISet The access point categories (e.g., capability-registration, menu-entry, desktop-icon). Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. GetRunStartInfo(Requirements, bool, bool, params string[]) Provides a ProcessStartInfo for running a program via Zero Install. This allows you to wait for the program to exit and/or to capture its output. public ProcessStartInfo GetRunStartInfo(Requirements requirements, bool refresh = false, bool needsTerminal = false, params string[] arguments) Parameters requirements Requirements The requirements describing the program. refresh bool Fetch fresh copies of all used feeds. needsTerminal bool Indicates that the program requires a terminal in order to run. arguments string[] Additional arguments to pass to the program. Returns ProcessStartInfo IntegrateAsync(FeedUri, IEnumerable?, IEnumerable?, bool) Adds an application to the application list (if missing) and integrates it into the desktop environment. public Task IntegrateAsync(FeedUri uri, IEnumerable? add = null, IEnumerable? remove = null, bool machineWide = false) Parameters uri FeedUri The feed URI of the application. add IEnumerable The access point categories to add (e.g., capability-registration, menu-entry, desktop-icon). remove IEnumerable The access point categories to remove (e.g., capability-registration, menu-entry, desktop-icon). machineWide bool Apply the operation machine-wide instead of just for the current user. Returns Task Exceptions NotAdminException machineWide was set but the current process is not running with admin rights. IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file or an invalid signature. InvalidOperationException 0install reported a conflict with existing desktop integration. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. Remove(FeedUri, bool) Removes an application from the application list and undoes any desktop environment integration. public void Remove(FeedUri uri, bool machineWide = false) Parameters uri FeedUri The feed URI of the application. machineWide bool Apply the operation machine-wide instead of just for the current user. Exceptions NotAdminException machineWide was set but the current process is not running with admin rights. IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. Run(Requirements, bool, bool, params string[]) Runs a program via Zero Install. Does not wait for the program to exit. public void Run(Requirements requirements, bool refresh = false, bool needsTerminal = false, params string[] arguments) Parameters requirements Requirements The requirements describing the program. refresh bool Fetch fresh copies of all used feeds. needsTerminal bool Indicates that the program requires a terminal in order to run. arguments string[] Additional arguments to pass to the program. Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file, an invalid signature or digest mismatch. InvalidOperationException 0install reported a solver or executor error. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install or the target program returned an error. SelectAsync(Requirements, bool, bool) Selects a program and compatible versions of all of its dependencies. public Task SelectAsync(Requirements requirements, bool refresh = false, bool offline = false) Parameters requirements Requirements The requirements describing the program. refresh bool Fetch fresh copies of all used feeds. offline bool Do not refresh feeds even if they are out-of-date and don't select newer versions of programs for downloading even if they are already known. Returns Task The selected implementations. Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file or an invalid signature. InvalidOperationException 0install reported a solver error. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error. TrustKey(string, string) Trusts feeds from a specific domain when signed with a specific key. public void TrustKey(string fingerprint, string domain) Parameters fingerprint string The fingerprint of the key to trust. domain string The domain the key should be trusted for. UpdateAsync(Requirements) Checks for updates to a program and downloads them if found. public Task UpdateAsync(Requirements requirements) Parameters requirements Requirements The requirements describing the program. Returns Task true if updates where found and downloaded; false if no updates where found. Exceptions IOException 0install could not be launched or reported a problem accessing the filesystem. UnauthorizedAccessException 0install reported that access to a resource was denied. WebException 0install reported a problem downloading a file. InvalidDataException 0install reported a problem parsing a file, an invalid signature or digest mismatch. InvalidOperationException 0install reported a solver error. OperationCanceledException The user canceled the operation. TemporarilyUnavailableException 0install is temporarily unavailable. Try again in a few seconds. ExitCodeException 0install returned another error." + }, + "api/ZeroInstall.Client.html": { + "href": "api/ZeroInstall.Client.html", + "title": "Namespace ZeroInstall.Client | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Client Client library for invoking Zero Install commands from within other applications. NuGet package: ZeroInstall.Client Classes TemporarilyUnavailableException Zero Install is temporarily unavailable. Try again in a few seconds. ZeroInstallClient Client for invoking Zero Install commands from within other applications. Interfaces IZeroInstallClient Client for invoking Zero Install commands from within other applications." + }, + "api/ZeroInstall.Commands.Basic.AddFeed.html": { + "href": "api/ZeroInstall.Commands.Basic.AddFeed.html", + "title": "Class AddFeed | Zero Install .NET API", + "keywords": "Class AddFeed Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Register an additional source of implementations (versions) of a program. public class AddFeed : AddRemoveFeedCommand Inheritance object ServiceProvider ScopedOperation CliCommand AddRemoveFeedCommand AddFeed Inherited Members AddRemoveFeedCommand.Usage AddRemoveFeedCommand.AdditionalArgsMin AddRemoveFeedCommand.AdditionalArgsMax AddRemoveFeedCommand.Execute() CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors AddFeed(ICommandHandler) Register an additional source of implementations (versions) of a program. public AddFeed(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"add-feed\" Field Value string Properties Description A short description of what this command does. public override string Description { get; } Property Value string Methods ExecuteHelper(IEnumerable, FeedReference, Stability) Registers or unregisters an additional feed source for a set of interfaces. protected override ExitCode ExecuteHelper(IEnumerable interfaces, FeedReference source, Stability suggestedStabilityPolicy) Parameters interfaces IEnumerable The set of interface URIs to register the feed source for. source FeedReference The feed reference to register for the interfaces. suggestedStabilityPolicy Stability The suggested value for StabilityPolicy. Will be Unset unless there is exactly one Implementation in the Feed. Returns ExitCode" + }, + "api/ZeroInstall.Commands.Basic.AddRemoveFeedCommand.html": { + "href": "api/ZeroInstall.Commands.Basic.AddRemoveFeedCommand.html", + "title": "Class AddRemoveFeedCommand | Zero Install .NET API", + "keywords": "Class AddRemoveFeedCommand Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Common base class for AddFeed and RemoveFeed. public abstract class AddRemoveFeedCommand : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand AddRemoveFeedCommand Derived AddFeed RemoveFeed Inherited Members CliCommand.FullName CliCommand.Description CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors AddRemoveFeedCommand(ICommandHandler) Creates a new command. protected AddRemoveFeedCommand(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections. ExecuteHelper(IEnumerable, FeedReference, Stability) Registers or unregisters an additional feed source for a set of interfaces. protected abstract ExitCode ExecuteHelper(IEnumerable interfaces, FeedReference source, Stability suggestedStabilityPolicy) Parameters interfaces IEnumerable The set of interface URIs to register the feed source for. source FeedReference The feed reference to register for the interfaces. suggestedStabilityPolicy Stability The suggested value for StabilityPolicy. Will be Unset unless there is exactly one Implementation in the Feed. Returns ExitCode" + }, + "api/ZeroInstall.Commands.Basic.CatalogMan.html": { + "href": "api/ZeroInstall.Commands.Basic.CatalogMan.html", + "title": "Class CatalogMan | Zero Install .NET API", + "keywords": "Class CatalogMan Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Manages the Catalogs provided by the ICatalogManager. public sealed class CatalogMan : CliMultiCommand Inheritance object ServiceProvider ScopedOperation CliCommand CliMultiCommand CatalogMan Inherited Members CliMultiCommand.Description CliMultiCommand.Usage CliMultiCommand.Parse(IReadOnlyList) CliMultiCommand.Execute() CliCommand.FullName CliCommand.Handler CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Constructors CatalogMan(ICommandHandler) Manages the Catalogs provided by the ICatalogManager. public CatalogMan(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"catalog\" Field Value string Properties SubCommandNames A list of sub-command names (without alternatives) as used in command-line arguments in lower-case. public override IEnumerable SubCommandNames { get; } Property Value IEnumerable Methods GetCommand(string) Creates a new sub-CliCommand based on a name. public override CliCommand GetCommand(string commandName) Parameters commandName string The command name to look for; case-insensitive. Returns CliCommand The requested sub-CliCommand. Exceptions OptionException commandName is an unknown command. IOException There was a problem accessing a configuration file or one of the stores. UnauthorizedAccessException Access to a configuration file or one of the stores was not permitted. InvalidDataException A configuration file is damaged." + }, + "api/ZeroInstall.Commands.Basic.Configure.html": { + "href": "api/ZeroInstall.Commands.Basic.Configure.html", + "title": "Class Configure | Zero Install .NET API", + "keywords": "Class Configure Namespace ZeroInstall.Commands.Basic Assembly 0install.dll View or change Config. public class Configure : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand Configure Inherited Members CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Configure(ICommandHandler) Creates a new command. public Configure(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields Name public const string Name = \"config\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.DefaultCommand.html": { + "href": "api/ZeroInstall.Commands.Basic.DefaultCommand.html", + "title": "Class DefaultCommand | Zero Install .NET API", + "keywords": "Class DefaultCommand Namespace ZeroInstall.Commands.Basic Assembly 0install.dll The default command used when no command is explicitly specified. public class DefaultCommand : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand DefaultCommand Inherited Members CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors DefaultCommand(ICommandHandler) Creates a new command. public DefaultCommand(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.Digest.html": { + "href": "api/ZeroInstall.Commands.Basic.Digest.html", + "title": "Class Digest | Zero Install .NET API", + "keywords": "Class Digest Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Calculate the manifest digest of a directory or archive. public class Digest : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand Digest Inherited Members CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Digest(ICommandHandler) Creates a new command. public Digest(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields Name public const string Name = \"digest\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.Download.html": { + "href": "api/ZeroInstall.Commands.Basic.Download.html", + "title": "Class Download | Zero Install .NET API", + "keywords": "Class Download Namespace ZeroInstall.Commands.Basic Assembly 0install.dll This behaves similarly to Selection, except that it also downloads the selected versions if they are not already cached. public class Download : Selection Inheritance object ServiceProvider ScopedOperation CliCommand Selection Download Derived Export Run Update Self.Update Inherited Members Selection.Usage Selection.AdditionalArgsMin Selection.AdditionalArgsMax Selection.Requirements Selection.SelectionsDocument Selection.CustomizeSelections Selection.ShowXml Selection.Parse(IReadOnlyList) Selection.SetInterfaceUri(FeedUri) Selection.Selections Selection.RefreshSolve() Selection.ShowSelections() CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Download(ICommandHandler) Creates a new download command. public Download(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Download(ICommandHandler, bool, bool, bool) Creates a new download command. protected Download(ICommandHandler handler, bool outputOptions = true, bool refreshOptions = true, bool customizeOptions = true) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. outputOptions bool Whether to add command-line options controlling output. refreshOptions bool Whether to add command-line options controlling refresh behavior. customizeOptions bool Whether to add command-line options for customizing selected implementations. Fields Name public const string Name = \"download\" Field Value string UncachedImplementations Implementations referenced in Selections that are not available in the IImplementationStore. protected List? UncachedImplementations Field Value List Properties Description A short description of what this command does. public override string Description { get; } Property Value string MinimumNetworkUseForBackgroundSelfUpdate The minimum EffectiveNetworkUse at which BackgroundSelfUpdate() will consider an update check. protected override NetworkLevel MinimumNetworkUseForBackgroundSelfUpdate { get; } Property Value NetworkLevel Methods BackgroundSelfUpdateAndClean() Automatically updates Zero Install itself in a background process. If no update check is due and we are in IsLibraryMode instead removes outdated implementations in a background process. protected void BackgroundSelfUpdateAndClean() DownloadUncachedImplementations() Downloads any Implementations in Selection that are missing from IImplementationStore. protected void DownloadUncachedImplementations() Remarks Makes sure ISolver ran with up-to-date feeds before downloading any implementations. Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections. ShowOutput() protected override ExitCode ShowOutput() Returns ExitCode Solve() Runs Solve(Requirements) (unless SelectionsDocument is true) and stores the result in Selections. protected override void Solve() Exceptions OperationCanceledException The user canceled the task. WebException A file could not be downloaded from the internet. IOException An external application or file required by the solver could not be accessed. SolverException The ISolver was unable to provide Selections that fulfill the Requirements." + }, + "api/ZeroInstall.Commands.Basic.Export.html": { + "href": "api/ZeroInstall.Commands.Basic.Export.html", + "title": "Class Export | Zero Install .NET API", + "keywords": "Class Export Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Exports all feeds and implementations required to launch the program specified by URI. public sealed class Export : Download Inheritance object ServiceProvider ScopedOperation CliCommand Selection Download Export Inherited Members CliCommand.FullName CliCommand.Handler CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Constructors Export(ICommandHandler) Creates a new export command. public Export(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields Name public const string Name = \"export\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections. Parse(IReadOnlyList) Parses command-line arguments and stores the result in the command. public override void Parse(IReadOnlyList args) Parameters args IReadOnlyList The command-line arguments to be parsed. Exceptions OperationCanceledException The user asked to see help information, version information, etc.. OptionException args contains unknown options. IOException An IO operation failed. UnauthorizedAccessException More privileges are required. UriFormatException The URI or local path specified is invalid. ShowOutput() protected override ExitCode ShowOutput() Returns ExitCode Solve() Runs Solve(Requirements) (unless SelectionsDocument is true) and stores the result in Selections. protected override void Solve() Exceptions OperationCanceledException The user canceled the task. WebException A file could not be downloaded from the internet. IOException An external application or file required by the solver could not be accessed. SolverException The ISolver was unable to provide Selections that fulfill the Requirements." + }, + "api/ZeroInstall.Commands.Basic.ExportHelp.html": { + "href": "api/ZeroInstall.Commands.Basic.ExportHelp.html", + "title": "Class ExportHelp | Zero Install .NET API", + "keywords": "Class ExportHelp Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Exports all CliCommand help texts as HTML. public class ExportHelp : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand ExportHelp Inherited Members CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ExportHelp(ICommandHandler) Exports all CliCommand help texts as HTML. public ExportHelp(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"export-help\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.Exporters.Exporter.html": { + "href": "api/ZeroInstall.Commands.Basic.Exporters.Exporter.html", + "title": "Class Exporter | Zero Install .NET API", + "keywords": "Class Exporter Namespace ZeroInstall.Commands.Basic.Exporters Assembly 0install.dll Exports feeds and implementations listed in a Selections document. public class Exporter Inheritance object Exporter Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Exporter(Selections, Architecture, string) Creates a new exporter. public Exporter(Selections selections, Architecture architecture, string destination) Parameters selections Selections A list of ImplementationSelections to check for referenced feeds. architecture Architecture The Architecture the Selections were generated for. destination string The path of the directory to export to. Exceptions IOException The directory destination could not be created. UnauthorizedAccessException Creating the directory destination is not permitted. Methods DeployImportScript() Deploys a script for importing exported feeds and implementations. public void DeployImportScript() Exceptions IOException A problem occurred while writing the script. UnauthorizedAccessException Write access to the script is not permitted. ExportFeeds(IFeedCache, IOpenPgp) Exports all feeds listed in a Selections document along with any OpenPGP public key files required for validation. public void ExportFeeds(IFeedCache feedCache, IOpenPgp openPgp) Parameters feedCache IFeedCache Used to get local feed files. openPgp IOpenPgp Used to get export keys feeds were signed with. Exceptions IOException A feed or GnuPG could not be read from the cache. UnauthorizedAccessException Read or access to a file is not permitted. ExportIcons(IEnumerable, IIconStore) Exports all specified icons. public void ExportIcons(IEnumerable icons, IIconStore iconStore) Parameters icons IEnumerable The icons to export. iconStore IIconStore The icon store to export the icons from. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while reading or writing a file. UnauthorizedAccessException Read or access to a file is not permitted. WebException A problem occurred while downloading icons. ExportImplementations(IImplementationStore, ITaskHandler) Exports all implementations listed in a Selections document as archives. public void ExportImplementations(IImplementationStore implementationStore, ITaskHandler handler) Parameters implementationStore IImplementationStore Used to get cached implementations. handler ITaskHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Exceptions OperationCanceledException The user canceled the task. IOException An implementation archive could not be created. UnauthorizedAccessException Read or access to a file is not permitted." + }, + "api/ZeroInstall.Commands.Basic.Exporters.HelpExporterBase.html": { + "href": "api/ZeroInstall.Commands.Basic.Exporters.HelpExporterBase.html", + "title": "Class HelpExporterBase | Zero Install .NET API", + "keywords": "Class HelpExporterBase Namespace ZeroInstall.Commands.Basic.Exporters Assembly 0install.dll Common base class for exporting all CliCommand help texts in a structured text format. public abstract class HelpExporterBase Inheritance object HelpExporterBase Derived HtmlHelpExporter Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Methods CommandDetails(string?, string, string) protected abstract string CommandDetails(string? name, string description, string usage) Parameters name string description string usage string Returns string CommandListEntry(string?, string) protected abstract string CommandListEntry(string? name, string description) Parameters name string description string Returns string CommandListFooter() protected abstract string CommandListFooter() Returns string CommandListHeader() protected abstract string CommandListHeader() Returns string OptionListEntry(IEnumerable, string) protected abstract string OptionListEntry(IEnumerable prototypes, string description) Parameters prototypes IEnumerable description string Returns string OptionListFooter() protected abstract string OptionListFooter() Returns string OptionListHeader() protected abstract string OptionListHeader() Returns string ToString() Returns all CliCommand help texts in a structured text format. public override string ToString() Returns string" + }, + "api/ZeroInstall.Commands.Basic.Exporters.HtmlHelpExporter.html": { + "href": "api/ZeroInstall.Commands.Basic.Exporters.HtmlHelpExporter.html", + "title": "Class HtmlHelpExporter | Zero Install .NET API", + "keywords": "Class HtmlHelpExporter Namespace ZeroInstall.Commands.Basic.Exporters Assembly 0install.dll Exports all CliCommand help texts as HTML. public class HtmlHelpExporter : HelpExporterBase Inheritance object HelpExporterBase HtmlHelpExporter Inherited Members HelpExporterBase.ToString() object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Methods CommandDetails(string?, string, string) protected override string CommandDetails(string? name, string description, string usage) Parameters name string description string usage string Returns string CommandListEntry(string?, string) protected override string CommandListEntry(string? name, string description) Parameters name string description string Returns string CommandListFooter() protected override string CommandListFooter() Returns string CommandListHeader() protected override string CommandListHeader() Returns string OptionListEntry(IEnumerable, string) protected override string OptionListEntry(IEnumerable prototypes, string description) Parameters prototypes IEnumerable description string Returns string OptionListFooter() protected override string OptionListFooter() Returns string OptionListHeader() protected override string OptionListHeader() Returns string" + }, + "api/ZeroInstall.Commands.Basic.Exporters.html": { + "href": "api/ZeroInstall.Commands.Basic.Exporters.html", + "title": "Namespace ZeroInstall.Commands.Basic.Exporters | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Commands.Basic.Exporters Utilitiy classes for exporting data from Zero Install. Classes Exporter Exports feeds and implementations listed in a Selections document. HelpExporterBase Common base class for exporting all CliCommand help texts in a structured text format. HtmlHelpExporter Exports all CliCommand help texts as HTML." + }, + "api/ZeroInstall.Commands.Basic.Fetch.html": { + "href": "api/ZeroInstall.Commands.Basic.Fetch.html", + "title": "Class Fetch | Zero Install .NET API", + "keywords": "Class Fetch Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Downloads a set of Implementations piped in as XML via stdin (for programmatic use). Use Feed format with no inner linebreaks and terminated by a single linebreak. public class Fetch : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand Fetch Inherited Members CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Fetch(ICommandHandler) Creates a new command. public Fetch(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields Name public const string Name = \"fetch\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.Import.html": { + "href": "api/ZeroInstall.Commands.Basic.Import.html", + "title": "Class Import | Zero Install .NET API", + "keywords": "Class Import Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Import a feed from a local file, as if it had been downloaded from the network. public class Import : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand Import Inherited Members CliCommand.FullName CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This is useful when testing a feed file, to avoid uploading it to a remote server in order to download it again. The file must have a trusted digital signature, as when fetching from the network. Constructors Import(ICommandHandler) Import a feed from a local file, as if it had been downloaded from the network. public Import(ICommandHandler handler) Parameters handler ICommandHandler Remarks This is useful when testing a feed file, to avoid uploading it to a remote server in order to download it again. The file must have a trusted digital signature, as when fetching from the network. Fields Name public const string Name = \"import\" Field Value string Properties AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.List.html": { + "href": "api/ZeroInstall.Commands.Basic.List.html", + "title": "Class List | Zero Install .NET API", + "keywords": "Class List Namespace ZeroInstall.Commands.Basic Assembly 0install.dll List all known interface (program) URIs. public class List : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand List Inherited Members CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks If a search term is given, only URIs containing that string are shown (case insensitive). Constructors List(ICommandHandler) List all known interface (program) URIs. public List(ICommandHandler handler) Parameters handler ICommandHandler Remarks If a search term is given, only URIs containing that string are shown (case insensitive). Fields Name public const string Name = \"list\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.ListFeeds.html": { + "href": "api/ZeroInstall.Commands.Basic.ListFeeds.html", + "title": "Class ListFeeds | Zero Install .NET API", + "keywords": "Class ListFeeds Namespace ZeroInstall.Commands.Basic Assembly 0install.dll List all known feed URIs for a specific interface. public class ListFeeds : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand ListFeeds Inherited Members CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ListFeeds(ICommandHandler) List all known feed URIs for a specific interface. public ListFeeds(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"list-feeds\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.RemoveFeed.html": { + "href": "api/ZeroInstall.Commands.Basic.RemoveFeed.html", + "title": "Class RemoveFeed | Zero Install .NET API", + "keywords": "Class RemoveFeed Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Un-register a feed, reversing the effect of AddFeed. public class RemoveFeed : AddRemoveFeedCommand Inheritance object ServiceProvider ScopedOperation CliCommand AddRemoveFeedCommand RemoveFeed Inherited Members AddRemoveFeedCommand.Usage AddRemoveFeedCommand.AdditionalArgsMin AddRemoveFeedCommand.AdditionalArgsMax AddRemoveFeedCommand.Execute() CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors RemoveFeed(ICommandHandler) Un-register a feed, reversing the effect of AddFeed. public RemoveFeed(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"remove-feed\" Field Value string Properties Description A short description of what this command does. public override string Description { get; } Property Value string Methods ExecuteHelper(IEnumerable, FeedReference, Stability) Registers or unregisters an additional feed source for a set of interfaces. protected override ExitCode ExecuteHelper(IEnumerable interfaces, FeedReference source, Stability suggestedStabilityPolicy) Parameters interfaces IEnumerable The set of interface URIs to register the feed source for. source FeedReference The feed reference to register for the interfaces. suggestedStabilityPolicy Stability The suggested value for StabilityPolicy. Will be Unset unless there is exactly one Implementation in the Feed. Returns ExitCode" + }, + "api/ZeroInstall.Commands.Basic.Run.html": { + "href": "api/ZeroInstall.Commands.Basic.Run.html", + "title": "Class Run | Zero Install .NET API", + "keywords": "Class Run Namespace ZeroInstall.Commands.Basic Assembly 0install.dll This behaves similarly to Download, except that it also runs the program after ensuring it is in the cache. public class Run : Download Inheritance object ServiceProvider ScopedOperation CliCommand Selection Download Run Inherited Members Download.UncachedImplementations Download.MinimumNetworkUseForBackgroundSelfUpdate Download.BackgroundSelfUpdateAndClean() Download.DownloadUncachedImplementations() Download.ShowOutput() Selection.AdditionalArgsMin Selection.Requirements Selection.SelectionsDocument Selection.CustomizeSelections Selection.ShowXml Selection.Parse(IReadOnlyList) Selection.SetInterfaceUri(FeedUri) Selection.Selections Selection.RefreshSolve() Selection.ShowSelections() CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Run(ICommandHandler) Creates a new run command. public Run(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields Name public const string Name = \"run\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections. Solve() Runs Solve(Requirements) (unless SelectionsDocument is true) and stores the result in Selections. protected override void Solve() Exceptions OperationCanceledException The user canceled the task. WebException A file could not be downloaded from the internet. IOException An external application or file required by the solver could not be accessed. SolverException The ISolver was unable to provide Selections that fulfill the Requirements." + }, + "api/ZeroInstall.Commands.Basic.Search.html": { + "href": "api/ZeroInstall.Commands.Basic.Search.html", + "title": "Class Search | Zero Install .NET API", + "keywords": "Class Search Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Searches for feeds indexed by the mirror server. public class Search : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand Search Inherited Members CliCommand.FullName CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Search(ICommandHandler) Searches for feeds indexed by the mirror server. public Search(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"search\" Field Value string Properties AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.Selection.html": { + "href": "api/ZeroInstall.Commands.Basic.Selection.html", + "title": "Class Selection | Zero Install .NET API", + "keywords": "Class Selection Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Select a version of the program identified by URI, and compatible versions of all of its dependencies. public class Selection : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand Selection Derived Download Inherited Members CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Selection(ICommandHandler) Creates a new select command. public Selection(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Selection(ICommandHandler, bool, bool, bool) Creates a new select command. protected Selection(ICommandHandler handler, bool outputOptions = true, bool refreshOptions = true, bool customizeOptions = true) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. outputOptions bool Whether to add command-line options controlling output. refreshOptions bool Whether to add command-line options controlling refresh behavior. customizeOptions bool Whether to add command-line options for customizing selected implementations. Fields CustomizeSelections Indicates the user wants a UI to modify the Selections. protected bool CustomizeSelections Field Value bool Name public const string Name = \"select\" Field Value string Selections Cached ISolver results. protected Selections? Selections Field Value Selections SelectionsDocument Indicates the user provided a pre-computed Selections XML document instead of using the ISolver. protected bool SelectionsDocument Field Value bool ShowXml Indicates the user wants a machine-readable output. protected bool ShowXml Field Value bool Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Requirements A set of requirements/restrictions imposed by the user on the implementation selection process as parsed from the command-line arguments. protected Requirements Requirements { get; } Property Value Requirements Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections. Parse(IReadOnlyList) Parses command-line arguments and stores the result in the command. public override void Parse(IReadOnlyList args) Parameters args IReadOnlyList The command-line arguments to be parsed. Exceptions OperationCanceledException The user asked to see help information, version information, etc.. OptionException args contains unknown options. IOException An IO operation failed. UnauthorizedAccessException More privileges are required. UriFormatException The URI or local path specified is invalid. RefreshSolve() Run Solve() with Refresh set to true. protected void RefreshSolve() SetInterfaceUri(FeedUri) Sets InterfaceUri and applies Requirements options that need to be deferred to the end of the parsing process. protected void SetInterfaceUri(FeedUri uri) Parameters uri FeedUri ShowOutput() protected virtual ExitCode ShowOutput() Returns ExitCode ShowSelections() Displays the Selections to the user. protected void ShowSelections() Solve() Runs Solve(Requirements) (unless SelectionsDocument is true) and stores the result in Selections. protected virtual void Solve() Exceptions OperationCanceledException The user canceled the task. WebException A file could not be downloaded from the internet. IOException An external application or file required by the solver could not be accessed. SolverException The ISolver was unable to provide Selections that fulfill the Requirements." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.Add.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.Add.html", + "title": "Class StoreMan.Add | Zero Install .NET API", + "keywords": "Class StoreMan.Add Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.Add : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.Add Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Add(ICommandHandler) public Add(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"add\" Field Value string Properties AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.Audit.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.Audit.html", + "title": "Class StoreMan.Audit | Zero Install .NET API", + "keywords": "Class StoreMan.Audit Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.Audit : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.Audit Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Audit(ICommandHandler) public Audit(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"audit\" Field Value string Properties Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.Copy.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.Copy.html", + "title": "Class StoreMan.Copy | Zero Install .NET API", + "keywords": "Class StoreMan.Copy Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.Copy : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.Copy Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Copy(ICommandHandler) public Copy(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"copy\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.Export.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.Export.html", + "title": "Class StoreMan.Export | Zero Install .NET API", + "keywords": "Class StoreMan.Export Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.Export : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.Export Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Export(ICommandHandler) public Export(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"export\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.Find.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.Find.html", + "title": "Class StoreMan.Find | Zero Install .NET API", + "keywords": "Class StoreMan.Find Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.Find : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.Find Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Find(ICommandHandler) public Find(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"find\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.List.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.List.html", + "title": "Class StoreMan.List | Zero Install .NET API", + "keywords": "Class StoreMan.List Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.List : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.List Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors List(ICommandHandler) public List(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"list\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.ListImplementations.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.ListImplementations.html", + "title": "Class StoreMan.ListImplementations | Zero Install .NET API", + "keywords": "Class StoreMan.ListImplementations Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.ListImplementations : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.ListImplementations Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ListImplementations(ICommandHandler) public ListImplementations(ICommandHandler handler) Parameters handler ICommandHandler Fields AltName public const string AltName = \"manage\" Field Value string Name public const string Name = \"list-implementations\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.Optimise.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.Optimise.html", + "title": "Class StoreMan.Optimise | Zero Install .NET API", + "keywords": "Class StoreMan.Optimise Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.Optimise : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.Optimise Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Optimise(ICommandHandler) public Optimise(ICommandHandler handler) Parameters handler ICommandHandler Fields AltName public const string AltName = \"optimize\" Field Value string Name public const string Name = \"optimise\" Field Value string Properties Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.Purge.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.Purge.html", + "title": "Class StoreMan.Purge | Zero Install .NET API", + "keywords": "Class StoreMan.Purge Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.Purge : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.Purge Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Purge(ICommandHandler) public Purge(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"purge\" Field Value string Properties Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.Remove.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.Remove.html", + "title": "Class StoreMan.Remove | Zero Install .NET API", + "keywords": "Class StoreMan.Remove Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.Remove : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.Remove Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Remove(ICommandHandler) public Remove(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"remove\" Field Value string Properties AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.Serve.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.Serve.html", + "title": "Class StoreMan.Serve | Zero Install .NET API", + "keywords": "Class StoreMan.Serve Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.Serve : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.Serve Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Serve(ICommandHandler) public Serve(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"serve\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.StoreSubCommand.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.StoreSubCommand.html", + "title": "Class StoreMan.StoreSubCommand | Zero Install .NET API", + "keywords": "Class StoreMan.StoreSubCommand Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public abstract class StoreMan.StoreSubCommand : CliCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand Implements ICliSubCommand Derived StoreMan.Add StoreMan.Audit StoreMan.Copy StoreMan.Export StoreMan.Find StoreMan.List StoreMan.ListImplementations StoreMan.Optimise StoreMan.Purge StoreMan.Remove StoreMan.Serve StoreMan.Verify Inherited Members CliCommand.FullName CliCommand.Description CliCommand.Usage CliCommand.AdditionalArgsMin CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.Execute() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors StoreSubCommand(ICommandHandler) protected StoreSubCommand(ICommandHandler handler) Parameters handler ICommandHandler Properties ParentName The name of the CliMultiCommand this command is a sub-command of. public string ParentName { get; } Property Value string Methods AddToStore(ManifestDigest, Action) Adds a new implementation to the ImplementationStore. protected ExitCode AddToStore(ManifestDigest manifestDigest, Action build) Parameters manifestDigest ManifestDigest The digest the implementation is supposed to match. build Action Callback for building the implementation. Returns ExitCode Exceptions OperationCanceledException The user canceled the task. UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed. DigestMismatchException The implementation's content doesn't match the manifestDigest. SetStorePaths(IReadOnlyList) Sets the paths of the directories to use as ImplementationStores. Keeps using the defaults if the list is empty. protected void SetStorePaths(IReadOnlyList paths) Parameters paths IReadOnlyList Exceptions DirectoryNotFoundException A specified directory does not exist." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.Verify.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.Verify.html", + "title": "Class StoreMan.Verify | Zero Install .NET API", + "keywords": "Class StoreMan.Verify Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class StoreMan.Verify : StoreMan.StoreSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand StoreMan.StoreSubCommand StoreMan.Verify Implements ICliSubCommand Inherited Members StoreMan.StoreSubCommand.ParentName StoreMan.StoreSubCommand.SetStorePaths(IReadOnlyList) StoreMan.StoreSubCommand.AddToStore(ManifestDigest, Action) CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Verify(ICommandHandler) public Verify(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"verify\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.StoreMan.html": { + "href": "api/ZeroInstall.Commands.Basic.StoreMan.html", + "title": "Class StoreMan | Zero Install .NET API", + "keywords": "Class StoreMan Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Manages the contents of the IImplementationStores. public sealed class StoreMan : CliMultiCommand Inheritance object ServiceProvider ScopedOperation CliCommand CliMultiCommand StoreMan Inherited Members CliMultiCommand.Description CliMultiCommand.Usage CliMultiCommand.Parse(IReadOnlyList) CliMultiCommand.Execute() CliCommand.FullName CliCommand.Handler CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Constructors StoreMan(ICommandHandler) Manages the contents of the IImplementationStores. public StoreMan(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"store\" Field Value string Properties SubCommandNames A list of sub-command names (without alternatives) as used in command-line arguments in lower-case. public override IEnumerable SubCommandNames { get; } Property Value IEnumerable Methods GetCommand(string) Creates a new sub-CliCommand based on a name. public override CliCommand GetCommand(string commandName) Parameters commandName string The command name to look for; case-insensitive. Returns CliCommand The requested sub-CliCommand. Exceptions OptionException commandName is an unknown command. IOException There was a problem accessing a configuration file or one of the stores. UnauthorizedAccessException Access to a configuration file or one of the stores was not permitted. InvalidDataException A configuration file is damaged." + }, + "api/ZeroInstall.Commands.Basic.TrustMan.Add.html": { + "href": "api/ZeroInstall.Commands.Basic.TrustMan.Add.html", + "title": "Class TrustMan.Add | Zero Install .NET API", + "keywords": "Class TrustMan.Add Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class TrustMan.Add : TrustMan.TrustSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand TrustMan.TrustSubCommand TrustMan.Add Implements ICliSubCommand Inherited Members TrustMan.TrustSubCommand.MachineWide TrustMan.TrustSubCommand.ParentName TrustMan.TrustSubCommand.Load() CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Add(ICommandHandler) public Add(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"add\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.TrustMan.List.html": { + "href": "api/ZeroInstall.Commands.Basic.TrustMan.List.html", + "title": "Class TrustMan.List | Zero Install .NET API", + "keywords": "Class TrustMan.List Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class TrustMan.List : TrustMan.TrustSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand TrustMan.TrustSubCommand TrustMan.List Implements ICliSubCommand Inherited Members TrustMan.TrustSubCommand.MachineWide TrustMan.TrustSubCommand.ParentName TrustMan.TrustSubCommand.Load() CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors List(ICommandHandler) public List(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"list\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.TrustMan.Remove.html": { + "href": "api/ZeroInstall.Commands.Basic.TrustMan.Remove.html", + "title": "Class TrustMan.Remove | Zero Install .NET API", + "keywords": "Class TrustMan.Remove Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public class TrustMan.Remove : TrustMan.TrustSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand TrustMan.TrustSubCommand TrustMan.Remove Implements ICliSubCommand Inherited Members TrustMan.TrustSubCommand.MachineWide TrustMan.TrustSubCommand.ParentName TrustMan.TrustSubCommand.Load() CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Remove(ICommandHandler) public Remove(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"remove\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Basic.TrustMan.TrustSubCommand.html": { + "href": "api/ZeroInstall.Commands.Basic.TrustMan.TrustSubCommand.html", + "title": "Class TrustMan.TrustSubCommand | Zero Install .NET API", + "keywords": "Class TrustMan.TrustSubCommand Namespace ZeroInstall.Commands.Basic Assembly 0install.dll public abstract class TrustMan.TrustSubCommand : CliCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand TrustMan.TrustSubCommand Implements ICliSubCommand Derived TrustMan.Add TrustMan.List TrustMan.Remove Inherited Members CliCommand.FullName CliCommand.Description CliCommand.Usage CliCommand.AdditionalArgsMin CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.Execute() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors TrustSubCommand(ICommandHandler) protected TrustSubCommand(ICommandHandler handler) Parameters handler ICommandHandler Fields MachineWide protected bool MachineWide Field Value bool Properties ParentName The name of the CliMultiCommand this command is a sub-command of. public string ParentName { get; } Property Value string Methods Load() protected TrustDB Load() Returns TrustDB" + }, + "api/ZeroInstall.Commands.Basic.TrustMan.html": { + "href": "api/ZeroInstall.Commands.Basic.TrustMan.html", + "title": "Class TrustMan | Zero Install .NET API", + "keywords": "Class TrustMan Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Manages the contents of the TrustDB. public sealed class TrustMan : CliMultiCommand Inheritance object ServiceProvider ScopedOperation CliCommand CliMultiCommand TrustMan Inherited Members CliMultiCommand.Description CliMultiCommand.Usage CliMultiCommand.Parse(IReadOnlyList) CliMultiCommand.Execute() CliCommand.FullName CliCommand.Handler CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Constructors TrustMan(ICommandHandler) Manages the contents of the TrustDB. public TrustMan(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"trust\" Field Value string Properties SubCommandNames A list of sub-command names (without alternatives) as used in command-line arguments in lower-case. public override IEnumerable SubCommandNames { get; } Property Value IEnumerable Methods GetCommand(string) Creates a new sub-CliCommand based on a name. public override CliCommand GetCommand(string commandName) Parameters commandName string The command name to look for; case-insensitive. Returns CliCommand The requested sub-CliCommand. Exceptions OptionException commandName is an unknown command. IOException There was a problem accessing a configuration file or one of the stores. UnauthorizedAccessException Access to a configuration file or one of the stores was not permitted. InvalidDataException A configuration file is damaged." + }, + "api/ZeroInstall.Commands.Basic.Update.html": { + "href": "api/ZeroInstall.Commands.Basic.Update.html", + "title": "Class Update | Zero Install .NET API", + "keywords": "Class Update Namespace ZeroInstall.Commands.Basic Assembly 0install.dll Check for updates to the program and download them if found. public class Update : Download Inheritance object ServiceProvider ScopedOperation CliCommand Selection Download Update Inherited Members Download.UncachedImplementations Download.MinimumNetworkUseForBackgroundSelfUpdate Download.BackgroundSelfUpdateAndClean() Download.Solve() Download.DownloadUncachedImplementations() Selection.Usage Selection.AdditionalArgsMin Selection.AdditionalArgsMax Selection.Requirements Selection.SelectionsDocument Selection.CustomizeSelections Selection.ShowXml Selection.Parse(IReadOnlyList) Selection.SetInterfaceUri(FeedUri) Selection.Selections Selection.RefreshSolve() Selection.ShowSelections() CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Update(ICommandHandler) Creates a new update command. public Update(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields Name public const string Name = \"update\" Field Value string Properties Description A short description of what this command does. public override string Description { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections. ShowOutput() Shows a list of changes found by the update process. protected override ExitCode ShowOutput() Returns ExitCode" + }, + "api/ZeroInstall.Commands.Basic.html": { + "href": "api/ZeroInstall.Commands.Basic.html", + "title": "Namespace ZeroInstall.Commands.Basic | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Commands.Basic CLI commands for Zero Install's core features. Namespaces ZeroInstall.Commands.Basic.Exporters Utilitiy classes for exporting data from Zero Install. Classes AddFeed Register an additional source of implementations (versions) of a program. AddRemoveFeedCommand Common base class for AddFeed and RemoveFeed. CatalogMan Manages the Catalogs provided by the ICatalogManager. Configure View or change Config. DefaultCommand The default command used when no command is explicitly specified. Digest Calculate the manifest digest of a directory or archive. Download This behaves similarly to Selection, except that it also downloads the selected versions if they are not already cached. Export Exports all feeds and implementations required to launch the program specified by URI. ExportHelp Exports all CliCommand help texts as HTML. Fetch Downloads a set of Implementations piped in as XML via stdin (for programmatic use). Use Feed format with no inner linebreaks and terminated by a single linebreak. Import Import a feed from a local file, as if it had been downloaded from the network. List List all known interface (program) URIs. ListFeeds List all known feed URIs for a specific interface. RemoveFeed Un-register a feed, reversing the effect of AddFeed. Run This behaves similarly to Download, except that it also runs the program after ensuring it is in the cache. Search Searches for feeds indexed by the mirror server. Selection Select a version of the program identified by URI, and compatible versions of all of its dependencies. StoreMan Manages the contents of the IImplementationStores. StoreMan.Add StoreMan.Audit StoreMan.Copy StoreMan.Export StoreMan.Find StoreMan.List StoreMan.ListImplementations StoreMan.Optimise StoreMan.Purge StoreMan.Remove StoreMan.Serve StoreMan.StoreSubCommand StoreMan.Verify TrustMan Manages the contents of the TrustDB. TrustMan.Add TrustMan.List TrustMan.Remove TrustMan.TrustSubCommand Update Check for updates to the program and download them if found." + }, + "api/ZeroInstall.Commands.CliCommand.html": { + "href": "api/ZeroInstall.Commands.CliCommand.html", + "title": "Class CliCommand | Zero Install .NET API", + "keywords": "Class CliCommand Namespace ZeroInstall.Commands Assembly 0install.dll Represents a command invoked via command-line arguments. public abstract class CliCommand : ScopedOperation Inheritance object ServiceProvider ScopedOperation CliCommand Derived AddRemoveFeedCommand Configure DefaultCommand Digest ExportHelp Fetch Import List ListFeeds Search Selection StoreMan.StoreSubCommand TrustMan.TrustSubCommand CliMultiCommand Central IntegrationCommand ListApps Self.SelfSubCommand Inherited Members ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks Specific sub-classes of this class are used to handle a commands like \"0install COMMAND [OPTIONS]\". Constructors CliCommand(ICommandHandler) Creates a new command. protected CliCommand(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields AdditionalArgs Feeds to add, terms to search for, etc. protected readonly List AdditionalArgs Field Value List Options The command-line argument parser used to evaluate user input. protected readonly OptionSet Options Field Value OptionSet Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected virtual int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected virtual int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public abstract string Description { get; } Property Value string FullName The full name of this command (including sub-commands) as used in command-line arguments in lower-case. public string FullName { get; } Property Value string Handler A callback object used when the user needs to be asked questions or informed about download and IO tasks. public ICommandHandler Handler { get; } Property Value ICommandHandler HelpText The help text describing the available command-line options and their effects. protected string HelpText { get; } Property Value string ImplementationsInReadOnlyStores Indicates whether there are currently any implementations stored in read-only IImplementationStores. protected bool ImplementationsInReadOnlyStores { get; } Property Value bool Usage The additional arguments to be displayed after the command name in the help text. public abstract string Usage { get; } Property Value string Methods AddDiscoverOptions() Adds command-line options related to ImplementationDiscovery. protected void AddDiscoverOptions() AsParallel(IEnumerable) Prepares the elements for parallel processing while respecting MaxParallelDownloads and CancellationToken. protected ParallelQuery AsParallel(IEnumerable elements) Parameters elements IEnumerable Returns ParallelQuery Type Parameters T Create(string?, ICommandHandler) Creates a new CliCommand based on a name. public static CliCommand Create(string? commandName, ICommandHandler handler) Parameters commandName string The command name to look for; case-insensitive; can be null. handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Returns CliCommand The requested CliCommand or DefaultCommand if commandName was null. Exceptions OptionException commandName is an unknown command. IOException There was a problem accessing a configuration file or one of the stores. UnauthorizedAccessException Access to a configuration file or one of the stores was not permitted. InvalidDataException A configuration file is damaged. CreateAndParse(IReadOnlyList, ICommandHandler) Parses command-line arguments, automatically creating an appropriate CliCommand. public static CliCommand CreateAndParse(IReadOnlyList args, ICommandHandler handler) Parameters args IReadOnlyList The command-line arguments to be parsed. handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Returns CliCommand The newly created CliCommand after Parse(IReadOnlyList) has been called. Exceptions OperationCanceledException The user asked to see help information, version information, etc.. OptionException args contains unknown options or specified an unknown command. IOException A problem occurred while creating a directory. UnauthorizedAccessException Creating a directory is not permitted. InvalidDataException A configuration file is damaged. FormatException An URI, local path, version number, etc. is invalid. Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public abstract ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections. FetchAll(IEnumerable) Downloads a set of Implementations to the ZeroInstall.Store in parallel. protected void FetchAll(IEnumerable implementations) Parameters implementations IEnumerable The Implementations to be downloaded. Exceptions OperationCanceledException A download or IO task was canceled from another thread. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted. UnauthorizedAccessException Write access to IImplementationStore is not permitted. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. GetCommandName(ref IReadOnlyList) Determines the command name specified in the command-line arguments. public static string? GetCommandName(ref IReadOnlyList args) Parameters args IReadOnlyList The command-line arguments to search for a command name. The collection is replaced with a copy with the command removed from it. Returns string The name of the command that was found or null if none was specified. Parse(IReadOnlyList) Parses command-line arguments and stores the result in the command. public virtual void Parse(IReadOnlyList args) Parameters args IReadOnlyList The command-line arguments to be parsed. Exceptions OperationCanceledException The user asked to see help information, version information, etc.. OptionException args contains unknown options. IOException An IO operation failed. UnauthorizedAccessException More privileges are required. UriFormatException The URI or local path specified is invalid. SupportedValues() Generates a localized instruction string describing multiple selectable enum values. protected static string SupportedValues() Returns string Type Parameters T The enum type to list values for. SupportedValues(params T[]) Generates a localized instruction string describing multiple selectable values. protected static string SupportedValues(params T[] values) Parameters values T[] The values to list. Returns string Type Parameters T" + }, + "api/ZeroInstall.Commands.CliCommandHandler.html": { + "href": "api/ZeroInstall.Commands.CliCommandHandler.html", + "title": "Class CliCommandHandler | Zero Install .NET API", + "keywords": "Class CliCommandHandler Namespace ZeroInstall.Commands Assembly 0install.dll Uses the stdin/stderr streams to allow users to interact with CliCommands. [MustDisposeResource] public sealed class CliCommandHandler : AnsiCliTaskHandler, ICommandHandler, ITaskHandler, IDisposable Inheritance object TaskHandlerBase CliTaskHandler AnsiCliTaskHandler CliCommandHandler Implements ICommandHandler ITaskHandler IDisposable Inherited Members AnsiCliTaskHandler.RunTask(ITask) AnsiCliTaskHandler.Output(string, string) AnsiCliTaskHandler.Output(string, IEnumerable) AnsiCliTaskHandler.Output(string, NamedCollection) AnsiCliTaskHandler.Error(Exception) AnsiCliTaskHandler.Dispose() TaskHandlerBase.Ask(string, bool?, string) TaskHandlerBase.CancellationToken TaskHandlerBase.Verbosity object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Properties Background Always returns false. public bool Background { get; set; } Property Value bool FeedUri The URI of the Zero Install feed the current operation relates to. public FeedUri? FeedUri { get; set; } Property Value FeedUri Remarks This can be used to apply application-specific visual branding. IsGui Always returns false. public bool IsGui { get; } Property Value bool Methods CloseUI() Closes any persistent UI elements that were created. public void CloseUI() CustomizeSelections(Func) Allows the user to customize the interface preferences and rerun the solver if desired. Returns once the user is finished. public void CustomizeSelections(Func solveCallback) Parameters solveCallback Func Called after interface preferences have been changed and the solver needs to be rerun. DisableUI() Disables any persistent UI elements that were created but still leaves them visible. public void DisableUI() ShowIntegrateApp(IntegrationState) Displays application integration options to the user. Returns once the user is finished. public void ShowIntegrateApp(IntegrationState state) Parameters state IntegrationState A View-Model for modifying the current desktop integration state. Remarks The caller is responsible for applying changes. Exceptions OperationCanceledException The user does not want any changes to be applied. ShowSelections(Selections, IFeedManager) Shows the Selections made by the solver to the user. Returns immediately. May be ignored by some implementations. public void ShowSelections(Selections selections, IFeedManager feedManager) Parameters selections Selections The Selections as provided by the solver. feedManager IFeedManager The feed manager used to retrieve feeds for additional information about implementations." + }, + "api/ZeroInstall.Commands.CliMultiCommand.html": { + "href": "api/ZeroInstall.Commands.CliMultiCommand.html", + "title": "Class CliMultiCommand | Zero Install .NET API", + "keywords": "Class CliMultiCommand Namespace ZeroInstall.Commands Assembly 0install.dll Common base class for commands that provide multiple sub-CliCommands. public abstract class CliMultiCommand : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand CliMultiCommand Derived CatalogMan StoreMan TrustMan Self Inherited Members CliCommand.FullName CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors CliMultiCommand(ICommandHandler) Creates a new command. protected CliMultiCommand(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Properties AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string SubCommandNames A list of sub-command names (without alternatives) as used in command-line arguments in lower-case. public abstract IEnumerable SubCommandNames { get; } Property Value IEnumerable Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections. GetCommand(string) Creates a new sub-CliCommand based on a name. public abstract CliCommand GetCommand(string commandName) Parameters commandName string The command name to look for; case-insensitive. Returns CliCommand The requested sub-CliCommand. Exceptions OptionException commandName is an unknown command. IOException There was a problem accessing a configuration file or one of the stores. UnauthorizedAccessException Access to a configuration file or one of the stores was not permitted. InvalidDataException A configuration file is damaged. Parse(IReadOnlyList) Parses command-line arguments and stores the result in the command. public override void Parse(IReadOnlyList args) Parameters args IReadOnlyList The command-line arguments to be parsed. Exceptions OperationCanceledException The user asked to see help information, version information, etc.. OptionException args contains unknown options. IOException An IO operation failed. UnauthorizedAccessException More privileges are required. UriFormatException The URI or local path specified is invalid." + }, + "api/ZeroInstall.Commands.Desktop.AddAlias.html": { + "href": "api/ZeroInstall.Commands.Desktop.AddAlias.html", + "title": "Class AddAlias | Zero Install .NET API", + "keywords": "Class AddAlias Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Create an alias for a Run command. public class AddAlias : AppCommand Inheritance object ServiceProvider ScopedOperation CliCommand IntegrationCommand AppCommand AddAlias Inherited Members AppCommand.AdditionalArgsMin AppCommand.InterfaceUri AppCommand.IntegrationManager AppCommand.Execute() AppCommand.CreateAlias(AppEntry, string, string) IntegrationCommand.NoDownload IntegrationCommand.Parse(IReadOnlyList) IntegrationCommand.CheckInstallBase() IntegrationCommand.GetAppEntry(IIntegrationManager, ref FeedUri) IntegrationCommand.ExistingDesktopIntegration(bool) CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors AddAlias(ICommandHandler) Common base class for commands that manage an AppList. public AddAlias(ICommandHandler handler) Parameters handler ICommandHandler Fields AltName public const string AltName = \"add-alias\" Field Value string Name public const string Name = \"alias\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods ExecuteHelper() Template method that performs the actual operation. protected override ExitCode ExecuteHelper() Returns ExitCode The exit status code to end the process with." + }, + "api/ZeroInstall.Commands.Desktop.AddApp.html": { + "href": "api/ZeroInstall.Commands.Desktop.AddApp.html", + "title": "Class AddApp | Zero Install .NET API", + "keywords": "Class AddApp Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Add an application to the AppList. public class AddApp : AppCommand Inheritance object ServiceProvider ScopedOperation CliCommand IntegrationCommand AppCommand AddApp Inherited Members AppCommand.AdditionalArgsMin AppCommand.InterfaceUri AppCommand.IntegrationManager AppCommand.Execute() AppCommand.CreateAlias(AppEntry, string, string) IntegrationCommand.NoDownload IntegrationCommand.Parse(IReadOnlyList) IntegrationCommand.CheckInstallBase() IntegrationCommand.GetAppEntry(IIntegrationManager, ref FeedUri) IntegrationCommand.ExistingDesktopIntegration(bool) CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors AddApp(ICommandHandler) Common base class for commands that manage an AppList. public AddApp(ICommandHandler handler) Parameters handler ICommandHandler Fields AddedNonCatalogAppWindowMessageID The window message ID (for use with BroadcastMessage(int)) that signals that an application that is not listed in the Catalog was added. public static readonly int AddedNonCatalogAppWindowMessageID Field Value int AltName public const string AltName = \"add-app\" Field Value string Name public const string Name = \"add\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods ExecuteHelper() Template method that performs the actual operation. protected override ExitCode ExecuteHelper() Returns ExitCode The exit status code to end the process with." + }, + "api/ZeroInstall.Commands.Desktop.AppCommand.html": { + "href": "api/ZeroInstall.Commands.Desktop.AppCommand.html", + "title": "Class AppCommand | Zero Install .NET API", + "keywords": "Class AppCommand Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Common base class for commands that manage an AppList. public abstract class AppCommand : IntegrationCommand Inheritance object ServiceProvider ScopedOperation CliCommand IntegrationCommand AppCommand Derived AddAlias AddApp IntegrateApp RemoveApp Inherited Members IntegrationCommand.NoDownload IntegrationCommand.Parse(IReadOnlyList) IntegrationCommand.CheckInstallBase() IntegrationCommand.GetAppEntry(IIntegrationManager, ref FeedUri) IntegrationCommand.ExistingDesktopIntegration(bool) CliCommand.FullName CliCommand.Description CliCommand.Usage CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors AppCommand(ICommandHandler) Common base class for commands that manage an AppList. protected AppCommand(ICommandHandler handler) Parameters handler ICommandHandler Fields InterfaceUri The interface for the application to perform the operation on. protected FeedUri InterfaceUri Field Value FeedUri Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int IntegrationManager Manages desktop integration operations. protected CategoryIntegrationManager IntegrationManager { get; } Property Value CategoryIntegrationManager Methods CreateAlias(AppEntry, string, string?) Creates a new alias. protected void CreateAlias(AppEntry appEntry, string aliasName, string? command = null) Parameters appEntry AppEntry The app entry to add the alias to. aliasName string The name of the alias to create. command string A command within the interface the alias shall point to; can be null. Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections. ExecuteHelper() Template method that performs the actual operation. protected abstract ExitCode ExecuteHelper() Returns ExitCode The exit status code to end the process with." + }, + "api/ZeroInstall.Commands.Desktop.Central.html": { + "href": "api/ZeroInstall.Commands.Desktop.Central.html", + "title": "Class Central | Zero Install .NET API", + "keywords": "Class Central Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Opens the central graphical user interface for launching and managing applications. public class Central : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand Central Inherited Members CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Central(ICommandHandler) Creates a new command. public Central(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields Name public const string Name = \"central\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Desktop.ImportApps.html": { + "href": "api/ZeroInstall.Commands.Desktop.ImportApps.html", + "title": "Class ImportApps | Zero Install .NET API", + "keywords": "Class ImportApps Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Imports a set of applications and desktop integrations from an existing AppList file. public class ImportApps : IntegrationCommand Inheritance object ServiceProvider ScopedOperation CliCommand IntegrationCommand ImportApps Inherited Members IntegrationCommand.NoDownload IntegrationCommand.Parse(IReadOnlyList) IntegrationCommand.CheckInstallBase() IntegrationCommand.GetAppEntry(IIntegrationManager, ref FeedUri) IntegrationCommand.ExistingDesktopIntegration(bool) CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ImportApps(ICommandHandler) Creates a new command. public ImportApps(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields Name public const string Name = \"import-apps\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int AdditionalArgsMin The minimum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMin { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Desktop.IntegrateApp.html": { + "href": "api/ZeroInstall.Commands.Desktop.IntegrateApp.html", + "title": "Class IntegrateApp | Zero Install .NET API", + "keywords": "Class IntegrateApp Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Add an application to the AppList (if missing) and integrate it into the desktop environment. public class IntegrateApp : AppCommand Inheritance object ServiceProvider ScopedOperation CliCommand IntegrationCommand AppCommand IntegrateApp Inherited Members AppCommand.AdditionalArgsMin AppCommand.AdditionalArgsMax AppCommand.InterfaceUri AppCommand.IntegrationManager AppCommand.Execute() AppCommand.CreateAlias(AppEntry, string, string) IntegrationCommand.NoDownload IntegrationCommand.Parse(IReadOnlyList) IntegrationCommand.CheckInstallBase() IntegrationCommand.ExistingDesktopIntegration(bool) CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors IntegrateApp(ICommandHandler) Common base class for commands that manage an AppList. public IntegrateApp(ICommandHandler handler) Parameters handler ICommandHandler Fields AltName public const string AltName = \"integrate-app\" Field Value string AltName2 public const string AltName2 = \"desktop\" Field Value string Name public const string Name = \"integrate\" Field Value string Properties Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods ExecuteHelper() Template method that performs the actual operation. protected override ExitCode ExecuteHelper() Returns ExitCode The exit status code to end the process with. GetAppEntry(IIntegrationManager, ref FeedUri) Finds an existing AppEntry or creates a new one for a specific interface URI. protected override AppEntry GetAppEntry(IIntegrationManager integrationManager, ref FeedUri interfaceUri) Parameters integrationManager IIntegrationManager Manages desktop integration operations. interfaceUri FeedUri The interface URI to create an AppEntry for. Will be updated if ReplacedBy is set and accepted by the user. Returns AppEntry" + }, + "api/ZeroInstall.Commands.Desktop.IntegrationCommand.html": { + "href": "api/ZeroInstall.Commands.Desktop.IntegrationCommand.html", + "title": "Class IntegrationCommand | Zero Install .NET API", + "keywords": "Class IntegrationCommand Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Common base class for commands that manage ZeroInstall.DesktopIntegration. public abstract class IntegrationCommand : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand IntegrationCommand Derived AppCommand ImportApps RemoveAllApps RepairApps SyncApps UpdateApps Inherited Members CliCommand.FullName CliCommand.Description CliCommand.Usage CliCommand.AdditionalArgsMin CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Execute() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors IntegrationCommand(ICommandHandler) Creates a new command. protected IntegrationCommand(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields NoDownload Do not download the application itself yet. protected bool NoDownload Field Value bool Methods CheckInstallBase() Checks the current InstallBase to determine whether it is suitable for operations that persist it. protected void CheckInstallBase() Remarks This should be called before performing any operations that persist InstallBase somewhere, e.g. in generated shortcuts or stubs. It is not required for operations that only remove things from the system. Exceptions UnsuitableInstallBaseException The current Zero Install instance is installed in a location unsuitable for the desired operation. ExistingDesktopIntegration(bool) Indicates whether any desktop integration for apps has been performed yet. public static bool ExistingDesktopIntegration(bool machineWide = false) Parameters machineWide bool Returns bool GetAppEntry(IIntegrationManager, ref FeedUri) Finds an existing AppEntry or creates a new one for a specific interface URI. protected virtual AppEntry GetAppEntry(IIntegrationManager integrationManager, ref FeedUri interfaceUri) Parameters integrationManager IIntegrationManager Manages desktop integration operations. interfaceUri FeedUri The interface URI to create an AppEntry for. Will be updated if ReplacedBy is set and accepted by the user. Returns AppEntry Parse(IReadOnlyList) Parses command-line arguments and stores the result in the command. public override void Parse(IReadOnlyList args) Parameters args IReadOnlyList The command-line arguments to be parsed. Exceptions OperationCanceledException The user asked to see help information, version information, etc.. OptionException args contains unknown options. IOException An IO operation failed. UnauthorizedAccessException More privileges are required. UriFormatException The URI or local path specified is invalid." + }, + "api/ZeroInstall.Commands.Desktop.ListApps.html": { + "href": "api/ZeroInstall.Commands.Desktop.ListApps.html", + "title": "Class ListApps | Zero Install .NET API", + "keywords": "Class ListApps Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll List all current AppEntrys in the AppList. public class ListApps : CliCommand Inheritance object ServiceProvider ScopedOperation CliCommand ListApps Inherited Members CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ListApps(ICommandHandler) Creates a new command. public ListApps(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields Name public const string Name = \"list-apps\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Desktop.RemoveAllApps.html": { + "href": "api/ZeroInstall.Commands.Desktop.RemoveAllApps.html", + "title": "Class RemoveAllApps | Zero Install .NET API", + "keywords": "Class RemoveAllApps Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Removes all applications from the AppList and undoes any desktop environment integration. public class RemoveAllApps : IntegrationCommand Inheritance object ServiceProvider ScopedOperation CliCommand IntegrationCommand RemoveAllApps Inherited Members IntegrationCommand.NoDownload IntegrationCommand.Parse(IReadOnlyList) IntegrationCommand.CheckInstallBase() IntegrationCommand.GetAppEntry(IIntegrationManager, ref FeedUri) IntegrationCommand.ExistingDesktopIntegration(bool) CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors RemoveAllApps(ICommandHandler) Removes all applications from the AppList and undoes any desktop environment integration. public RemoveAllApps(ICommandHandler handler) Parameters handler ICommandHandler Fields AltName public const string AltName = \"remove-all-apps\" Field Value string Name public const string Name = \"remove-all\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Desktop.RemoveApp.html": { + "href": "api/ZeroInstall.Commands.Desktop.RemoveApp.html", + "title": "Class RemoveApp | Zero Install .NET API", + "keywords": "Class RemoveApp Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Remove an application from the AppList and undoes any desktop environment integration. public class RemoveApp : AppCommand Inheritance object ServiceProvider ScopedOperation CliCommand IntegrationCommand AppCommand RemoveApp Inherited Members AppCommand.AdditionalArgsMin AppCommand.AdditionalArgsMax AppCommand.InterfaceUri AppCommand.IntegrationManager AppCommand.Execute() AppCommand.CreateAlias(AppEntry, string, string) IntegrationCommand.NoDownload IntegrationCommand.Parse(IReadOnlyList) IntegrationCommand.CheckInstallBase() IntegrationCommand.GetAppEntry(IIntegrationManager, ref FeedUri) IntegrationCommand.ExistingDesktopIntegration(bool) CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors RemoveApp(ICommandHandler) Remove an application from the AppList and undoes any desktop environment integration. public RemoveApp(ICommandHandler handler) Parameters handler ICommandHandler Fields AltName public const string AltName = \"remove-app\" Field Value string AltName2 public const string AltName2 = \"destory\" Field Value string Name public const string Name = \"remove\" Field Value string Properties Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods ExecuteHelper() Template method that performs the actual operation. protected override ExitCode ExecuteHelper() Returns ExitCode The exit status code to end the process with." + }, + "api/ZeroInstall.Commands.Desktop.RepairApps.html": { + "href": "api/ZeroInstall.Commands.Desktop.RepairApps.html", + "title": "Class RepairApps | Zero Install .NET API", + "keywords": "Class RepairApps Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Reintegrate all applications in the AppList into the desktop environment. public class RepairApps : IntegrationCommand Inheritance object ServiceProvider ScopedOperation CliCommand IntegrationCommand RepairApps Inherited Members IntegrationCommand.NoDownload IntegrationCommand.Parse(IReadOnlyList) IntegrationCommand.CheckInstallBase() IntegrationCommand.GetAppEntry(IIntegrationManager, ref FeedUri) IntegrationCommand.ExistingDesktopIntegration(bool) CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors RepairApps(ICommandHandler) Reintegrate all applications in the AppList into the desktop environment. public RepairApps(ICommandHandler handler) Parameters handler ICommandHandler Fields AltName public const string AltName = \"repair-apps\" Field Value string Name public const string Name = \"repair-all\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Desktop.Self.Deploy.html": { + "href": "api/ZeroInstall.Commands.Desktop.Self.Deploy.html", + "title": "Class Self.Deploy | Zero Install .NET API", + "keywords": "Class Self.Deploy Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Deploys Zero Install to a target directory and integrates it in the system. public class Self.Deploy : Self.SelfSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand Self.SelfSubCommand Self.Deploy Implements ICliSubCommand Inherited Members Self.SelfSubCommand.ParentName CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Deploy(ICommandHandler) public Deploy(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"deploy\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Desktop.Self.Remove.html": { + "href": "api/ZeroInstall.Commands.Desktop.Self.Remove.html", + "title": "Class Self.Remove | Zero Install .NET API", + "keywords": "Class Self.Remove Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Removes the current instance of Zero Install from the system. public class Self.Remove : Self.RemoveSubCommandBase, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand Self.SelfSubCommand Self.RemoveSubCommandBase Self.Remove Implements ICliSubCommand Inherited Members Self.RemoveSubCommandBase.Portable Self.RemoveSubCommandBase.MachineWide Self.RemoveSubCommandBase.PerformRemove() Self.SelfSubCommand.ParentName CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Remove(ICommandHandler) Removes the current instance of Zero Install from the system. public Remove(ICommandHandler handler) Parameters handler ICommandHandler Fields Name public const string Name = \"remove\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string TargetDir protected override string TargetDir { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Desktop.Self.RemoveSubCommandBase.html": { + "href": "api/ZeroInstall.Commands.Desktop.Self.RemoveSubCommandBase.html", + "title": "Class Self.RemoveSubCommandBase | Zero Install .NET API", + "keywords": "Class Self.RemoveSubCommandBase Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll public abstract class Self.RemoveSubCommandBase : Self.SelfSubCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand Self.SelfSubCommand Self.RemoveSubCommandBase Implements ICliSubCommand Derived Self.Remove Inherited Members Self.SelfSubCommand.ParentName CliCommand.FullName CliCommand.Description CliCommand.Usage CliCommand.AdditionalArgsMin CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.Execute() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors RemoveSubCommandBase(ICommandHandler) protected RemoveSubCommandBase(ICommandHandler handler) Parameters handler ICommandHandler Properties MachineWide protected bool MachineWide { get; } Property Value bool Portable protected bool Portable { get; } Property Value bool TargetDir protected abstract string TargetDir { get; } Property Value string Methods PerformRemove() protected void PerformRemove()" + }, + "api/ZeroInstall.Commands.Desktop.Self.SelfSubCommand.html": { + "href": "api/ZeroInstall.Commands.Desktop.Self.SelfSubCommand.html", + "title": "Class Self.SelfSubCommand | Zero Install .NET API", + "keywords": "Class Self.SelfSubCommand Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll public abstract class Self.SelfSubCommand : CliCommand, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand Self.SelfSubCommand Implements ICliSubCommand Derived Self.Deploy Self.RemoveSubCommandBase Inherited Members CliCommand.FullName CliCommand.Description CliCommand.Usage CliCommand.AdditionalArgsMin CliCommand.AdditionalArgsMax CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.Parse(IReadOnlyList) CliCommand.Execute() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors SelfSubCommand(ICommandHandler) protected SelfSubCommand(ICommandHandler handler) Parameters handler ICommandHandler Properties ParentName The name of the CliMultiCommand this command is a sub-command of. public string ParentName { get; } Property Value string" + }, + "api/ZeroInstall.Commands.Desktop.Self.Update.html": { + "href": "api/ZeroInstall.Commands.Desktop.Self.Update.html", + "title": "Class Self.Update | Zero Install .NET API", + "keywords": "Class Self.Update Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Updates Zero Install itself to the most recent version. public class Self.Update : Download, ICliSubCommand Inheritance object ServiceProvider ScopedOperation CliCommand Selection Download Self.Update Implements ICliSubCommand Inherited Members Download.UncachedImplementations Download.MinimumNetworkUseForBackgroundSelfUpdate Download.BackgroundSelfUpdateAndClean() Download.Solve() Download.DownloadUncachedImplementations() Download.ShowOutput() Selection.AdditionalArgsMin Selection.AdditionalArgsMax Selection.Requirements Selection.SelectionsDocument Selection.CustomizeSelections Selection.ShowXml Selection.SetInterfaceUri(FeedUri) Selection.Selections Selection.RefreshSolve() Selection.ShowSelections() CliCommand.FullName CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors Update(ICommandHandler) Creates a new self update command. public Update(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields Name public const string Name = \"update\" Field Value string TopLevelName public const string TopLevelName = \"self-update\" Field Value string Properties Description A short description of what this command does. public override string Description { get; } Property Value string ParentName The name of the CliMultiCommand this command is a sub-command of. public string ParentName { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections. Parse(IReadOnlyList) Parses command-line arguments and stores the result in the command. public override void Parse(IReadOnlyList args) Parameters args IReadOnlyList The command-line arguments to be parsed. Exceptions OperationCanceledException The user asked to see help information, version information, etc.. OptionException args contains unknown options. IOException An IO operation failed. UnauthorizedAccessException More privileges are required. UriFormatException The URI or local path specified is invalid." + }, + "api/ZeroInstall.Commands.Desktop.Self.html": { + "href": "api/ZeroInstall.Commands.Desktop.Self.html", + "title": "Class Self | Zero Install .NET API", + "keywords": "Class Self Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Manages the integration of Zero Install itself in the operating system (deployment and removal). public sealed class Self : CliMultiCommand Inheritance object ServiceProvider ScopedOperation CliCommand CliMultiCommand Self Inherited Members CliMultiCommand.Description CliMultiCommand.Usage CliMultiCommand.Parse(IReadOnlyList) CliMultiCommand.Execute() CliCommand.FullName CliCommand.Handler CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Constructors Self(ICommandHandler) Manages the integration of Zero Install itself in the operating system (deployment and removal). public Self(ICommandHandler handler) Parameters handler ICommandHandler Fields AltName public const string AltName = \"maintenance\" Field Value string Name public const string Name = \"self\" Field Value string Properties SubCommandNames A list of sub-command names (without alternatives) as used in command-line arguments in lower-case. public override IEnumerable SubCommandNames { get; } Property Value IEnumerable Methods GetCommand(string) Creates a new sub-CliCommand based on a name. public override CliCommand GetCommand(string commandName) Parameters commandName string The command name to look for; case-insensitive. Returns CliCommand The requested sub-CliCommand. Exceptions OptionException commandName is an unknown command. IOException There was a problem accessing a configuration file or one of the stores. UnauthorizedAccessException Access to a configuration file or one of the stores was not permitted. InvalidDataException A configuration file is damaged." + }, + "api/ZeroInstall.Commands.Desktop.SelfManager.html": { + "href": "api/ZeroInstall.Commands.Desktop.SelfManager.html", + "title": "Class SelfManager | Zero Install .NET API", + "keywords": "Class SelfManager Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Represents a specific Zero Install instance that is to be deployed, updated or removed. public class SelfManager : ManagerBase, IDisposable Inheritance object ManagerBase SelfManager Implements IDisposable Inherited Members ManagerBase.Handler ManagerBase.MachineWide ManagerBase.AcquireMutex() ManagerBase.Dispose() object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks To prevent race-conditions there may only be one maintenance class instance active at any given time. This class acquires a mutex upon calling its constructor and releases it upon calling Dispose(). Constructors SelfManager(string, ITaskHandler, bool, bool) Creates a new maintenance manager. public SelfManager(string targetDir, ITaskHandler handler, bool machineWide = false, bool portable = false) Parameters targetDir string The full path to the directory containing the Zero Install instance. handler ITaskHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. machineWide bool Apply operations machine-wide instead of just for the current user. portable bool Controls whether the Zero Install instance at targetDir should be a portable instance. Properties MutexName The name of the cross-process mutex used to signal that a maintenance operation is currently in progress. protected override string MutexName { get; } Property Value string Portable Controls whether the Zero Install instance at TargetDir should be a portable instance. public bool Portable { get; } Property Value bool TargetDir The full path to the directory containing the Zero Install instance. public string TargetDir { get; } Property Value string Methods Deploy(bool) Runs the deployment process. public void Deploy(bool libraryMode = false) Parameters libraryMode bool Deploy Zero Install as a library for use by other applications without its own desktop integration. Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed. Remove() Runs the removal process. public void Remove() Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed." + }, + "api/ZeroInstall.Commands.Desktop.SyncApps.html": { + "href": "api/ZeroInstall.Commands.Desktop.SyncApps.html", + "title": "Class SyncApps | Zero Install .NET API", + "keywords": "Class SyncApps Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Synchronize the AppList with the server. public class SyncApps : IntegrationCommand Inheritance object ServiceProvider ScopedOperation CliCommand IntegrationCommand SyncApps Inherited Members IntegrationCommand.NoDownload IntegrationCommand.Parse(IReadOnlyList) IntegrationCommand.CheckInstallBase() IntegrationCommand.GetAppEntry(IIntegrationManager, ref FeedUri) IntegrationCommand.ExistingDesktopIntegration(bool) CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors SyncApps(ICommandHandler) Creates a new command. public SyncApps(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields Name public const string Name = \"sync\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Desktop.UpdateApps.html": { + "href": "api/ZeroInstall.Commands.Desktop.UpdateApps.html", + "title": "Class UpdateApps | Zero Install .NET API", + "keywords": "Class UpdateApps Namespace ZeroInstall.Commands.Desktop Assembly 0install.dll Updates all applications in the AppList. public class UpdateApps : IntegrationCommand Inheritance object ServiceProvider ScopedOperation CliCommand IntegrationCommand UpdateApps Inherited Members IntegrationCommand.NoDownload IntegrationCommand.Parse(IReadOnlyList) IntegrationCommand.CheckInstallBase() IntegrationCommand.GetAppEntry(IIntegrationManager, ref FeedUri) IntegrationCommand.ExistingDesktopIntegration(bool) CliCommand.FullName CliCommand.AdditionalArgsMin CliCommand.HelpText CliCommand.Options CliCommand.Handler CliCommand.AdditionalArgs CliCommand.AddDiscoverOptions() CliCommand.SupportedValues(params T[]) CliCommand.SupportedValues() CliCommand.FetchAll(IEnumerable) CliCommand.AsParallel(IEnumerable) CliCommand.ImplementationsInReadOnlyStores CliCommand.Create(string, ICommandHandler) CliCommand.CreateAndParse(IReadOnlyList, ICommandHandler) CliCommand.GetCommandName(ref IReadOnlyList) ScopedOperation.GetCanonicalUri(string) ScopedOperation.EnsureAllowed(FeedUri) ScopedOperation.FindByShortName(string) ScopedOperation.BackgroundSelfUpdate() ScopedOperation.MinimumNetworkUseForBackgroundSelfUpdate ScopedOperation.StartCommandBackground(string, params string[]) ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors UpdateApps(ICommandHandler) Creates a new command. public UpdateApps(ICommandHandler handler) Parameters handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Fields AltName public const string AltName = \"update-apps\" Field Value string Name public const string Name = \"update-all\" Field Value string Properties AdditionalArgsMax The maximum number of AdditionalArgs allowed. Checked in Parse(IReadOnlyList). protected override int AdditionalArgsMax { get; } Property Value int Description A short description of what this command does. public override string Description { get; } Property Value string Usage The additional arguments to be displayed after the command name in the help text. public override string Usage { get; } Property Value string Methods Execute() Executes the commands specified by the command-line arguments. Must call Parse(IReadOnlyList) first! public override ExitCode Execute() Returns ExitCode The exit status code to end the process with. Remarks When inheriting this method is usually replaced. Exceptions OperationCanceledException The user canceled the task. OptionException The number of arguments passed in on the command-line is incorrect. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted or an external application or file required by the solver could not be accessed. UnauthorizedAccessException An operation failed due to insufficient rights. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data could not be handled for some reason. FormatException An URI, local path, version number, etc. is invalid. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. SolverException The ISolver was unable to provide Selections that fulfill the Requirements. ImplementationNotFoundException One of the ImplementationBases is not cached yet. ExecutorException The IExecutor was unable to process the Selections." + }, + "api/ZeroInstall.Commands.Desktop.html": { + "href": "api/ZeroInstall.Commands.Desktop.html", + "title": "Namespace ZeroInstall.Commands.Desktop | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Commands.Desktop CLI commands for Zero Install's desktop integration features. Classes AddAlias Create an alias for a Run command. AddApp Add an application to the AppList. AppCommand Common base class for commands that manage an AppList. Central Opens the central graphical user interface for launching and managing applications. ImportApps Imports a set of applications and desktop integrations from an existing AppList file. IntegrateApp Add an application to the AppList (if missing) and integrate it into the desktop environment. IntegrationCommand Common base class for commands that manage ZeroInstall.DesktopIntegration. ListApps List all current AppEntrys in the AppList. RemoveAllApps Removes all applications from the AppList and undoes any desktop environment integration. RemoveApp Remove an application from the AppList and undoes any desktop environment integration. RepairApps Reintegrate all applications in the AppList into the desktop environment. Self Manages the integration of Zero Install itself in the operating system (deployment and removal). Self.Deploy Deploys Zero Install to a target directory and integrates it in the system. Self.Remove Removes the current instance of Zero Install from the system. Self.RemoveSubCommandBase Self.SelfSubCommand Self.Update Updates Zero Install itself to the most recent version. SelfManager Represents a specific Zero Install instance that is to be deployed, updated or removed. SyncApps Synchronize the AppList with the server. UpdateApps Updates all applications in the AppList." + }, + "api/ZeroInstall.Commands.EnvironmentBuilderExtensions.html": { + "href": "api/ZeroInstall.Commands.EnvironmentBuilderExtensions.html", + "title": "Class EnvironmentBuilderExtensions | Zero Install .NET API", + "keywords": "Class EnvironmentBuilderExtensions Namespace ZeroInstall.Commands Assembly 0install.dll Provides extension methods for IEnvironmentBuilder. public static class EnvironmentBuilderExtensions Inheritance object EnvironmentBuilderExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods SetCallbackEnvironmentVariables(IEnvironmentBuilder) Adds environment variables that allow the program to make calls back to Zero Install. public static IEnvironmentBuilder SetCallbackEnvironmentVariables(this IEnvironmentBuilder builder) Parameters builder IEnvironmentBuilder Returns IEnvironmentBuilder" + }, + "api/ZeroInstall.Commands.ExitCode.html": { + "href": "api/ZeroInstall.Commands.ExitCode.html", + "title": "Enum ExitCode | Zero Install .NET API", + "keywords": "Enum ExitCode Namespace ZeroInstall.Commands Assembly 0install.dll An exit code is returned to the original caller after the application terminates, to indicate success or the reason for failure. public enum ExitCode Fields AccessDenied = 11 You have insufficient access rights. This can potentially be fixed by running the command as an Administrator/root. It may also indicate misconfigured file permissions. Conflict = 15 A desktop integration operation could not be completed due to conflicting AccessPoints. DigestMismatch = 26 The ManifestDigest of an implementation does not match the expected value. This could be caused by a damaged download or an incorrect feed. ExecutorError = 21 The IExecutor was unable to launch the desired application. This usually indicates a problem with the feed. IOError = 12 There was an IO problem. This encompasses issues such as missing files or insufficient disk space. InvalidArguments = 99 The command-line arguments passed to the application were invalid. InvalidData = 25 A data file could not be parsed. This encompasses issues such as damaged configuration files or malformed XML documents (e.g. feeds). InvalidSignature = 27 There was a problem with the digital signature of a feed. The signature may be missing, damaged or not trusted for the source the feed came from. NoChanges = 1 The operation resulted in no changes. This may be due to a problem with the input or simply indicate that the system is already in the desired state. NotSupported = 50 The operation could not be completed because a feature that is not (yet) supported was requested. Upgrading to a newer version may resolve this issue. OK = 0 The operation completed without any problems. SolverError = 20 The ISolver was unable to provide Selections that fulfill the Requirements. This can be caused by a problem with the feed, an impossible request (e.g., non-existing version) or your local configuration. UserCanceled = 100 The user canceled the task. WebError = 10 There was a network problem. This may be intermittent and resolve itself e.g. when a Wi-Fi connection is restored." + }, + "api/ZeroInstall.Commands.ICliSubCommand.html": { + "href": "api/ZeroInstall.Commands.ICliSubCommand.html", + "title": "Interface ICliSubCommand | Zero Install .NET API", + "keywords": "Interface ICliSubCommand Namespace ZeroInstall.Commands Assembly 0install.dll Interface for CliCommands that are aggregated by a CliMultiCommand. public interface ICliSubCommand Properties ParentName The name of the CliMultiCommand this command is a sub-command of. string ParentName { get; } Property Value string" + }, + "api/ZeroInstall.Commands.ICommandHandler.html": { + "href": "api/ZeroInstall.Commands.ICommandHandler.html", + "title": "Interface ICommandHandler | Zero Install .NET API", + "keywords": "Interface ICommandHandler Namespace ZeroInstall.Commands Assembly 0install.dll Callback methods to allow users to interact with CliCommands. public interface ICommandHandler : ITaskHandler, IDisposable Inherited Members ITaskHandler.RunTask(ITask) ITaskHandler.Ask(string, bool?, string) ITaskHandler.Output(string, string) ITaskHandler.Output(string, IEnumerable) ITaskHandler.Output(string, NamedCollection) ITaskHandler.Error(Exception) ITaskHandler.CancellationToken ITaskHandler.Verbosity IDisposable.Dispose() Remarks The methods may be called from a background thread. Implementations apply appropriate thread-synchronization to update UI elements. Properties Background Hides the GUI and uses something like a tray icon instead. Has no effect when IsGui is false. bool Background { get; set; } Property Value bool FeedUri The URI of the Zero Install feed the current operation relates to. FeedUri? FeedUri { get; set; } Property Value FeedUri Remarks This can be used to apply application-specific visual branding. IsGui Indicates whether this handler is a GUI. bool IsGui { get; } Property Value bool Methods CloseUI() Closes any persistent UI elements that were created. void CloseUI() CustomizeSelections(Func) Allows the user to customize the interface preferences and rerun the solver if desired. Returns once the user is finished. void CustomizeSelections(Func solveCallback) Parameters solveCallback Func Called after interface preferences have been changed and the solver needs to be rerun. DisableUI() Disables any persistent UI elements that were created but still leaves them visible. void DisableUI() ShowIntegrateApp(IntegrationState) Displays application integration options to the user. Returns once the user is finished. void ShowIntegrateApp(IntegrationState state) Parameters state IntegrationState A View-Model for modifying the current desktop integration state. Remarks The caller is responsible for applying changes. Exceptions OperationCanceledException The user does not want any changes to be applied. ShowSelections(Selections, IFeedManager) Shows the Selections made by the solver to the user. Returns immediately. May be ignored by some implementations. void ShowSelections(Selections selections, IFeedManager feedManager) Parameters selections Selections The Selections as provided by the solver. feedManager IFeedManager The feed manager used to retrieve feeds for additional information about implementations." + }, + "api/ZeroInstall.Commands.NeedsGuiException.html": { + "href": "api/ZeroInstall.Commands.NeedsGuiException.html", + "title": "Class NeedsGuiException | Zero Install .NET API", + "keywords": "Class NeedsGuiException Namespace ZeroInstall.Commands Assembly 0install.dll Indicates that the requested operation requires a GUI but the current process does not have one. public class NeedsGuiException : NotSupportedException, ISerializable Inheritance object Exception SystemException NotSupportedException NeedsGuiException Implements ISerializable Inherited Members Exception.GetBaseException() Exception.GetType() Exception.ToString() Exception.Data Exception.HelpLink Exception.HResult Exception.InnerException Exception.Message Exception.Source Exception.StackTrace Exception.TargetSite Exception.SerializeObjectState object.Equals(object) object.Equals(object, object) object.GetHashCode() object.MemberwiseClone() object.ReferenceEquals(object, object) Constructors NeedsGuiException() Initializes a new instance of the NotSupportedException class, setting the Message property of the new instance to a system-supplied message that describes the error. This message takes into account the current system culture. public NeedsGuiException() NeedsGuiException(string) Initializes a new instance of the NotSupportedException class with a specified error message. public NeedsGuiException(string message) Parameters message string A string that describes the error. The content of message is intended to be understood by humans. The caller of this constructor is required to ensure that this string has been localized for the current system culture. NeedsGuiException(string, Exception) Initializes a new instance of the NotSupportedException class with a specified error message and a reference to the inner exception that is the cause of this exception. public NeedsGuiException(string message, Exception inner) Parameters message string The error message that explains the reason for the exception. inner Exception" + }, + "api/ZeroInstall.Commands.ProgramUtils.html": { + "href": "api/ZeroInstall.Commands.ProgramUtils.html", + "title": "Class ProgramUtils | Zero Install .NET API", + "keywords": "Class ProgramUtils Namespace ZeroInstall.Commands Assembly 0install.dll Provides utility methods for application entry points. public static class ProgramUtils Inheritance object ProgramUtils Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties UILanguage The current UI language; null to use system default. public static CultureInfo? UILanguage { get; set; } Property Value CultureInfo Remarks This value is only used on Windows and is stored in the Registry. For non-Windows platforms use the LC_* environment variables instead. Methods CliStartInfo(params string[]) Creates a ProcessStartInfo for launching an instance of the 0install command-line interface. public static ProcessStartInfo? CliStartInfo(params string[] arguments) Parameters arguments string[] Returns ProcessStartInfo GuiStartInfo(params string[]) Creates a ProcessStartInfo for launching an instance of the 0install graphical interface. public static ProcessStartInfo? GuiStartInfo(params string[] arguments) Parameters arguments string[] Returns ProcessStartInfo Init() Common initialization code to be called by every Zero Install executable right after startup. public static void Init() Run(string, string[], ICommandHandler) Parses command-line arguments and performs the indicated action. Performs error handling. public static ExitCode Run(string exeName, string[] args, ICommandHandler handler) Parameters exeName string The name of the executable to use as a reference in help messages and self-invocation. args string[] The arguments to be processed. handler ICommandHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Returns ExitCode The exit status code to end the process with. Cast to int to return from a Main method." + }, + "api/ZeroInstall.Commands.Properties.Resources.html": { + "href": "api/ZeroInstall.Commands.Properties.Resources.html", + "title": "Class Resources | Zero Install .NET API", + "keywords": "Class Resources Namespace ZeroInstall.Commands.Properties Assembly 0install.dll A strongly-typed resource class, for looking up localized strings, etc. public class Resources Inheritance object Resources Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties Added0installToPath Looks up a localized string similar to The command '0install' has been added to your command-line PATH.. public static string Added0installToPath { get; } Property Value string AliasCreated Looks up a localized string similar to An alias named '{0}' for '{1}' was created.. public static string AliasCreated { get; } Property Value string AliasNotFound Looks up a localized string similar to No existing alias named '{0}' was found.. public static string AliasNotFound { get; } Property Value string AliasRemoved Looks up a localized string similar to The alias named '{0}' for '{1}' was removed.. public static string AliasRemoved { get; } Property Value string AllComponentsDownloaded Looks up a localized string similar to All required components have been downloaded.. public static string AllComponentsDownloaded { get; } Property Value string AllComponentsExported Looks up a localized string similar to All components required to run {0} have been exported to '{1}'. You can use the import script or Bootstrap executable in '{1}' to import these files on another computer.. public static string AllComponentsExported { get; } Property Value string AlreadyInImplDirs Looks up a localized string similar to '{0}' is already in the list of custom implementation caches.. public static string AlreadyInImplDirs { get; } Property Value string AppAlias Looks up a localized string similar to Application alias. public static string AppAlias { get; } Property Value string AppList Looks up a localized string similar to Application list. public static string AppList { get; } Property Value string AskDeployMachineWide Looks up a localized string similar to Setup Zero Install for all users (machine-wide) instead of just the current user?. public static string AskDeployMachineWide { get; } Property Value string AskDeployNewTarget Looks up a localized string similar to Are you sure you want to deploy a new copy of Zero Install to '{0}'?. public static string AskDeployNewTarget { get; } Property Value string AskDeployZeroInstall Looks up a localized string similar to This will add Zero Install to the start menu and command-line. Continue?. public static string AskDeployZeroInstall { get; } Property Value string AskRemoveZeroInstall Looks up a localized string similar to Are you sure you want to remove Zero Install from this computer?. public static string AskRemoveZeroInstall { get; } Property Value string AskTryNow Looks up a localized string similar to Do you want to try this now?. public static string AskTryNow { get; } Property Value string AskUpdateCapabilities Looks up a localized string similar to Do you wish to update any existing desktop integration to reflect this? If you select 'Yes' potentially incompatible integrations will be removed. If you select 'No' Zero Install will continue to use the old capabilities.. public static string AskUpdateCapabilities { get; } Property Value string CachedImplementations Looks up a localized string similar to Cached implementations. public static string CachedImplementations { get; } Property Value string Cancel Looks up a localized string similar to Cancel. public static string Cancel { get; } Property Value string CapabilitiesChanged Looks up a localized string similar to The capabilities of the application '{0}' have changed.. public static string CapabilitiesChanged { get; } Property Value string CatalogAlreadyRegistered Looks up a localized string similar to The catalog URI {0} is already registered.. public static string CatalogAlreadyRegistered { get; } Property Value string CatalogNotRegistered Looks up a localized string similar to The catalog URI {0} is not registered.. public static string CatalogNotRegistered { get; } Property Value string CatalogSources Looks up a localized string similar to Catalog sources. public static string CatalogSources { get; } Property Value string Change Looks up a localized string similar to Change. public static string Change { get; } Property Value string ChangesFound Looks up a localized string similar to Changes found. public static string ChangesFound { get; } Property Value string ClickToChoose Looks up a localized string similar to Click here to choose.. public static string ClickToChoose { get; } Property Value string Command Looks up a localized string similar to Command. public static string Command { get; } Property Value string CommandLineArguments Looks up a localized string similar to Command-line arguments. public static string CommandLineArguments { get; } Property Value string Configuration Looks up a localized string similar to Configuration. public static string Configuration { get; } Property Value string ConfirmPurge Looks up a localized string similar to Do you wish to remove all application files from the Zero Install cache? These files can downloaded again if needed.. public static string ConfirmPurge { get; } Property Value string ConfirmRemoveAll Looks up a localized string similar to Do you wish to remove all applications from the 'My applications' list? This prevents leftover menu entries after removing Zero Install. You can create a backup of this list by using '0install sync'.. public static string ConfirmRemoveAll { get; } Property Value string Culture Overrides the current thread's CurrentUICulture property for all resource lookups using this strongly typed resource class. public static CultureInfo Culture { get; set; } Property Value CultureInfo DataGridCommandAccessPointHelp Looks up a localized string similar to Start entering text in the last line to create a new entry. Select an entire line by clicking in the first column and then press DEL on the keyboard to remove an entry.. public static string DataGridCommandAccessPointHelp { get; } Property Value string DataGridDefaultAccessPointHelp Looks up a localized string similar to Set a checkbox to make a capability your desired default handler. Remove a checkbox to remove a capability's default status (it still remains available).. public static string DataGridDefaultAccessPointHelp { get; } Property Value string DeleteCheckedEntries Looks up a localized string similar to Do you want to delete the {0} checked element(s) from the cache?. public static string DeleteCheckedEntries { get; } Property Value string DeleteEntry Looks up a localized string similar to Do you want to delete this entry from the cache?. public static string DeleteEntry { get; } Property Value string DeployMissingTargetForPortable Looks up a localized string similar to When using the {0} option you must explicitly specify the target directory.. public static string DeployMissingTargetForPortable { get; } Property Value string DeployTargetOutsideHome Looks up a localized string similar to The specified target directory ({0}) is located outside your home directory.. public static string DeployTargetOutsideHome { get; } Property Value string DeployedPortable Looks up a localized string similar to A portable version of Zero Install has been deployed to '{0}'. You can use it by running the ZeroInstall.exe file in the directory.. public static string DeployedPortable { get; } Property Value string DeprecatedOption Looks up a localized string similar to Deprecated option. Please use '{0}' instead.. public static string DeprecatedOption { get; } Property Value string Description Looks up a localized string similar to Description. public static string Description { get; } Property Value string DescriptionAddAlias Looks up a localized string similar to Create an alias for launching an application via 0install without always having to enter the full URI.. public static string DescriptionAddAlias { get; } Property Value string DescriptionAddApp Looks up a localized string similar to Add an application to the application list.. public static string DescriptionAddApp { get; } Property Value string DescriptionAddFeed Looks up a localized string similar to Register an additional source of implementations (versions) of a program.. public static string DescriptionAddFeed { get; } Property Value string DescriptionCatalogAdd Looks up a localized string similar to Adds an URI to the list of catalogs.. public static string DescriptionCatalogAdd { get; } Property Value string DescriptionCatalogList Looks up a localized string similar to Lists all registered catalogs.. public static string DescriptionCatalogList { get; } Property Value string DescriptionCatalogRefresh Looks up a localized string similar to Refreshes (downloads) all registered catalogs.. public static string DescriptionCatalogRefresh { get; } Property Value string DescriptionCatalogRemove Looks up a localized string similar to Removes an URI from the list of catalogs.. public static string DescriptionCatalogRemove { get; } Property Value string DescriptionCatalogReset Looks up a localized string similar to Resets the list of catalogs to the default source.. public static string DescriptionCatalogReset { get; } Property Value string DescriptionCatalogSearch Looks up a localized string similar to Searches registered catalogs for applications that match the specified query. If no query is given all applications in the catalogs are listed.. public static string DescriptionCatalogSearch { get; } Property Value string DescriptionCentral Looks up a localized string similar to Opens the central graphical user interface for launching and managing applications.. public static string DescriptionCentral { get; } Property Value string DescriptionConfig Looks up a localized string similar to View or change configuration settings. With no arguments, it displays all settings and their current values. With one argument, it displays the current value of the named setting. With two arguments, it sets the setting to the given value or resets it to the default value if the value \"{0}\" is given.. public static string DescriptionConfig { get; } Property Value string DescriptionDigest Looks up a localized string similar to Calculates the manifest digest of a directory or archive.. public static string DescriptionDigest { get; } Property Value string DescriptionDownload Looks up a localized string similar to Behaves similarly to '0install select', except that it also downloads the selected versions if they are not already cached. Returns an exit status of 0 if it selected a suitable set of versions and they are now all downloaded and in the cache; returns a status of 1 otherwise.. public static string DescriptionDownload { get; } Property Value string DescriptionExport Looks up a localized string similar to Exports all feeds and implementations required to launch the program specified by a URI to a DIRECTORY.. public static string DescriptionExport { get; } Property Value string DescriptionImport Looks up a localized string similar to Imports a feed from a local file, as if it had been downloaded from the network. This is useful when testing a feed file, to avoid uploading it to a remote server in order to download it again. The file must have a trusted digital signature, as when fetching from the network.. public static string DescriptionImport { get; } Property Value string DescriptionImportApps Looks up a localized string similar to Imports a set of applications and desktop integrations from an existing app-list.xml file.. public static string DescriptionImportApps { get; } Property Value string DescriptionIntegrateApp Looks up a localized string similar to Adds an application to the application list (if missing) and integrate it into the desktop environment.. public static string DescriptionIntegrateApp { get; } Property Value string DescriptionList Looks up a localized string similar to Lists all locally known feed URIs. If a search term is given, only URIs containing that string are shown (case insensitive).. public static string DescriptionList { get; } Property Value string DescriptionListApps Looks up a localized string similar to Lists all applications currently in your application list. If an URI is given, only the application with that feed URI is shown. If a PATTERN is given, only applications containing that string in their name are shown (case insensitive).. public static string DescriptionListApps { get; } Property Value string DescriptionListFeeds Looks up a localized string similar to Lists all extra feeds added to URI using '0install add-feed'.. public static string DescriptionListFeeds { get; } Property Value string DescriptionMaintenanceDeploy Looks up a localized string similar to Deploys Zero Install to the specified TARGET directory or the default directory for programs and integrates it in the system.. public static string DescriptionMaintenanceDeploy { get; } Property Value string DescriptionMaintenanceRemove Looks up a localized string similar to Removes the current instance of Zero Install from the system.. public static string DescriptionMaintenanceRemove { get; } Property Value string DescriptionRemoveAllApps Looks up a localized string similar to Removes all applications from the application list and undoes any desktop environment integration. Use this command to clean up the system before removing Zero Install.. public static string DescriptionRemoveAllApps { get; } Property Value string DescriptionRemoveApp Looks up a localized string similar to Removes an application from the application list and undoes any desktop environment integration.. public static string DescriptionRemoveApp { get; } Property Value string DescriptionRemoveFeed Looks up a localized string similar to Un-registers a feed, reversing the effect of '0install add-feed'.. public static string DescriptionRemoveFeed { get; } Property Value string DescriptionRepairApps Looks up a localized string similar to Reapplies all desktop integrations of applications in the application list.. public static string DescriptionRepairApps { get; } Property Value string DescriptionRun Looks up a localized string similar to Behaves similarly to '0install download', except that it also runs the program after ensuring it is in the cache. Returns an exit status of 1 if the download step failed. Otherwise, the exit status will be the exit status of the program being run.. public static string DescriptionRun { get; } Property Value string DescriptionSearch Looks up a localized string similar to Searches for feeds indexed by the mirror server that match specified keywords. Note that the default mirror server indexes all known feeds, regardless of quality; you must decide whether to trust the programs before running them.. public static string DescriptionSearch { get; } Property Value string DescriptionSelect Looks up a localized string similar to Selects a version of the program identified by URI, and compatible versions of all of its dependencies. Returns an exit status of 0 if it selected a set of versions, and a status of 1 if it could not find a consistent set.. public static string DescriptionSelect { get; } Property Value string DescriptionSelfUpdate Looks up a localized string similar to Updates Zero Install itself to the most recent version.. public static string DescriptionSelfUpdate { get; } Property Value string DescriptionStoreAdd Looks up a localized string similar to Adds the contents of a directory or archive to the cache.. public static string DescriptionStoreAdd { get; } Property Value string DescriptionStoreAddDir Looks up a localized string similar to Adds a directory to the list of custom implementation caches.. public static string DescriptionStoreAddDir { get; } Property Value string DescriptionStoreAudit Looks up a localized string similar to Checks that all implementations in the cache are undamaged. Additional arguments specify custom cache locations.. public static string DescriptionStoreAudit { get; } Property Value string DescriptionStoreCopy Looks up a localized string similar to Copies an implementation into the cache. Similar to '0install store add', but the digest is extracted from the directory name. An additional arguments specifies a custom target cache location.. public static string DescriptionStoreCopy { get; } Property Value string DescriptionStoreExport Looks up a localized string similar to Exports a cached implementation as an archive (ZIP, TAR, etc.). The result can be imported on another machine using '0install store add'.. public static string DescriptionStoreExport { get; } Property Value string DescriptionStoreFind Looks up a localized string similar to Determines the local path of a cached implementation.. public static string DescriptionStoreFind { get; } Property Value string DescriptionStoreList Looks up a localized string similar to Lists all implementation cache directories.. public static string DescriptionStoreList { get; } Property Value string DescriptionStoreListImplementations Looks up a localized string similar to Lists all cached implementations. If a feed URI is specified only implementations for that particular feed are listed.. public static string DescriptionStoreListImplementations { get; } Property Value string DescriptionStoreManage Looks up a localized string similar to Displays a graphical user interface for managing implementations in the cache. Shows associations with cached feeds.. public static string DescriptionStoreManage { get; } Property Value string DescriptionStoreOptimise Looks up a localized string similar to Saves disk space by merging identical files with hardlinks. Additional arguments specify custom cache locations.. public static string DescriptionStoreOptimise { get; } Property Value string DescriptionStorePurge Looks up a localized string similar to Removes all implementations from the cache. Use this command to clean up the system before removing Zero Install. Deleting cache directories manually may be difficult due to the NTFS ACLs employed to protect implementations against modification. Additional arguments specify custom cache locations.. public static string DescriptionStorePurge { get; } Property Value string DescriptionStoreRemove Looks up a localized string similar to Removes an implementation from the cache.. public static string DescriptionStoreRemove { get; } Property Value string DescriptionStoreRemoveDir Looks up a localized string similar to Removes a directory from the list of custom implementation caches.. public static string DescriptionStoreRemoveDir { get; } Property Value string DescriptionStoreServe Looks up a localized string similar to Serves implementations from the cache as archives via HTTP.. public static string DescriptionStoreServe { get; } Property Value string DescriptionStoreVerify Looks up a localized string similar to Makes sure an implementation has not been damaged (i.e. it manifest digest has not changed).. public static string DescriptionStoreVerify { get; } Property Value string DescriptionSync Looks up a localized string similar to Synchronizes the application list with the server.. public static string DescriptionSync { get; } Property Value string DescriptionTrustAdd Looks up a localized string similar to Trusts feeds from a specific DOMAIN when signed with a specific FINGERPRINT.. public static string DescriptionTrustAdd { get; } Property Value string DescriptionTrustList Looks up a localized string similar to List keys trusted for signing feeds. Only list domains for which a specific FINGERPRINT is trusted, if specified.. public static string DescriptionTrustList { get; } Property Value string DescriptionTrustRemove Looks up a localized string similar to Stops trusting feeds signed with a specific FINGERPRINT. Only stops trusting for a specific DOMAIN, if specified.. public static string DescriptionTrustRemove { get; } Property Value string DescriptionUpdate Looks up a localized string similar to Checks for updates to the program and download them if found. This is similar to '0install download --refresh', except that it prints information about whether any changes were found.. public static string DescriptionUpdate { get; } Property Value string DescriptionUpdateApps Looks up a localized string similar to Updates all applications in the application list.. public static string DescriptionUpdateApps { get; } Property Value string DesktopIntegration Looks up a localized string similar to Desktop integration. public static string DesktopIntegration { get; } Property Value string DesktopIntegrationApply Looks up a localized string similar to Applying desktop integration. public static string DesktopIntegrationApply { get; } Property Value string DesktopIntegrationRemove Looks up a localized string similar to Removing desktop integration. public static string DesktopIntegrationRemove { get; } Property Value string DiscoveringImplementation Looks up a localized string similar to Searching in local network. public static string DiscoveringImplementation { get; } Property Value string Done Looks up a localized string similar to Done. public static string Done { get; } Property Value string DownloadComplete Looks up a localized string similar to Download complete. public static string DownloadComplete { get; } Property Value string EnterCatalogUrl Looks up a localized string similar to Please enter the URL or local file path of the feed catalog to add:. public static string EnterCatalogUrl { get; } Property Value string EnterFeedUrl Looks up a localized string similar to Please enter the URL of the new source of implementations for this interface:. public static string EnterFeedUrl { get; } Property Value string ExclusiveOptions Looks up a localized string similar to The options {0} and {1} cannot be used together.. public static string ExclusiveOptions { get; } Property Value string ExistingInstance Looks up a localized string similar to An existing copy of Zero Install was detected in '{0}'.. public static string ExistingInstance { get; } Property Value string ExportComplete Looks up a localized string similar to Export complete.. public static string ExportComplete { get; } Property Value string FeedAlreadyRegistered Looks up a localized string similar to The feed was already registered for all appropriate interfaces.. public static string FeedAlreadyRegistered { get; } Property Value string FeedManagement Looks up a localized string similar to Feed management. public static string FeedManagement { get; } Property Value string FeedNotRegistered Looks up a localized string similar to The feed was not registered for any interfaces.. public static string FeedNotRegistered { get; } Property Value string FeedRegistered Looks up a localized string similar to The feed was successfully registered for the following interfaces:. public static string FeedRegistered { get; } Property Value string FeedReplaced Looks up a localized string similar to '{0}' has been replaced by '{1}'. Consider updating.. public static string FeedReplaced { get; } Property Value string FeedReplacedAsk Looks up a localized string similar to The feed for '{0}' ({1}) has been replaced by '{2}'. Do you want to use the new feed instead?. public static string FeedReplacedAsk { get; } Property Value string FeedUnregistered Looks up a localized string similar to The feed was successfully unregistered for the following interfaces:. public static string FeedUnregistered { get; } Property Value string FeedsCached Looks up a localized string similar to Cached feeds. public static string FeedsCached { get; } Property Value string FeedsRegistered Looks up a localized string similar to Feeds registered for '{0}'. public static string FeedsRegistered { get; } Property Value string FileOrDirNotFound Looks up a localized string similar to Unable to find file or directory '{0}'.. public static string FileOrDirNotFound { get; } Property Value string FilePrefixAbsoluteUsage Looks up a localized string similar to Use file:///path for absolute paths, not file:/path.. public static string FilePrefixAbsoluteUsage { get; } Property Value string Hide Looks up a localized string similar to Hide. public static string Hide { get; } Property Value string IgnoreMissingFeedFor Looks up a localized string similar to This feed does not seem to be for the same application. Add it anyway? A tag indicates feed compatibility.. public static string IgnoreMissingFeedFor { get; } Property Value string InstallService Looks up a localized string similar to Installing Zero Install Store Service. public static string InstallService { get; } Property Value string Integrate Looks up a localized string similar to Integrate {0}. public static string Integrate { get; } Property Value string IntegrateAppInvalid Looks up a localized string similar to Your desktop integration selections can not be applied.. public static string IntegrateAppInvalid { get; } Property Value string IntegrateAppRetry Looks up a localized string similar to Do you want to change your selection and try again?. public static string IntegrateAppRetry { get; } Property Value string IntegrateAppUseGui Looks up a localized string similar to Please use the GUI version of Zero Install or specify explicit integration options using command-line arguments.. public static string IntegrateAppUseGui { get; } Property Value string InvalidArgument Looks up a localized string similar to Invalid argument '{0}'.. public static string InvalidArgument { get; } Property Value string InvalidFeedUri Looks up a localized string similar to '{0}' is not a valid feed URI or file path.. public static string InvalidFeedUri { get; } Property Value string KioskModeNotInCatalog Looks up a localized string similar to Kiosk mode is enabled and {0} is not listed in the catalog.. public static string KioskModeNotInCatalog { get; } Property Value string LaterVersionNotSelected Looks up a localized string similar to A later version ({0}) exists but was not selected. Using {1} instead.. public static string LaterVersionNotSelected { get; } Property Value string LicenseInfo Looks up a localized string similar to This program comes with ABSOLUTELY NO WARRANTY, to the extent permitted by law. You may redistribute copies of this program under the terms of the GNU Lesser General Public License.. public static string LicenseInfo { get; } Property Value string LocalPathOf Looks up a localized string similar to Local path of {0}. public static string LocalPathOf { get; } Property Value string MissingArguments Looks up a localized string similar to Missing arguments.. public static string MissingArguments { get; } Property Value string MissingFeedFor Looks up a localized string similar to Missing element in '{0}'; it can't be used as a feed for any other interface.. public static string MissingFeedFor { get; } Property Value string MissingOptionValue Looks up a localized string similar to Missing required value for option {0}.. public static string MissingOptionValue { get; } Property Value string MustBeAdminForMachineWide Looks up a localized string similar to You must be an administrator to perform machine-wide operations.. public static string MustBeAdminForMachineWide { get; } Property Value string MutexWait Looks up a localized string similar to Waiting for all Zero Install instances to end. public static string MutexWait { get; } Property Value string MyApps Looks up a localized string similar to My applications. public static string MyApps { get; } Property Value string NeedsGui Looks up a localized string similar to Please use the GUI version of Zero Install for this feature.. public static string NeedsGui { get; } Property Value string NoAddCommandWithoutAlias Looks up a localized string similar to {0} may only be specified together with an alias name.. public static string NoAddCommandWithoutAlias { get; } Property Value string NoCustomizeSelectionsInCli Looks up a localized string similar to The graphical policy editor is not available in command-line mode.. public static string NoCustomizeSelectionsInCli { get; } Property Value string NoIntegrationDeployRequired Looks up a localized string similar to Zero Install needs to be deployed on your system for desktop integration to work.. public static string NoIntegrationDeployRequired { get; } Property Value string NoIntegrationFromPortable Looks up a localized string similar to Zero Install is running in portable mode. It needs to be deployed to a permanent location for desktop integration to work. You can do this using '{0}'. This will be completely independent from your portable copy.. public static string NoIntegrationFromPortable { get; } Property Value string NoMachineWideIntegrationFromPerUser Looks up a localized string similar to Zero Install is running from a user-specific directory. It needs to be deployed to a directory accessible by all users for machine-wide desktop integration to work.. public static string NoMachineWideIntegrationFromPerUser { get; } Property Value string NoRunWithEmptyCommand Looks up a localized string similar to When running an implementation the command may not be empty.. public static string NoRunWithEmptyCommand { get; } Property Value string NoSelectionsDocumentUpdate Looks up a localized string similar to Can only update with Feed URIs, not with selections documents.. public static string NoSelectionsDocumentUpdate { get; } Property Value string NoUpdatesFound Looks up a localized string similar to No updates found. public static string NoUpdatesFound { get; } Property Value string NotAvailableInPortableMode Looks up a localized string similar to This operation is not available in portable mode.. public static string NotAvailableInPortableMode { get; } Property Value string NotInImplDirs Looks up a localized string similar to '{0}' is not in the list of custom implementation caches.. public static string NotInImplDirs { get; } Property Value string OpenInFileManager Looks up a localized string similar to &Open in file manager. public static string OpenInFileManager { get; } Property Value string OptimiseComplete Looks up a localized string similar to Optimization complete. public static string OptimiseComplete { get; } Property Value string OptionAlgorithm Looks up a localized string similar to The {HASH} algorithm to use for the digest.. public static string OptionAlgorithm { get; } Property Value string OptionAliasRemove Looks up a localized string similar to Remove an existing alias.. public static string OptionAliasRemove { get; } Property Value string OptionAliasResolve Looks up a localized string similar to Print the interface URI for the given alias.. public static string OptionAliasResolve { get; } Property Value string OptionBackground Looks up a localized string similar to Hide the graphical user interface and use something like a tray icon instead.. public static string OptionBackground { get; } Property Value string OptionBatch Looks up a localized string similar to Automatically answer questions with defaults when possible and simplify console output (no tables or progress bars).. public static string OptionBatch { get; } Property Value string OptionBefore Looks up a localized string similar to Require a version of the main program earlier than {VERSION}. i.e., force the use of an old version the program.. public static string OptionBefore { get; } Property Value string OptionCatalogAddSkipVerify Looks up a localized string similar to Skip downloading the catalog to verify it is valid before adding it to the list.. public static string OptionCatalogAddSkipVerify { get; } Property Value string OptionClean Looks up a localized string similar to Remove implementations no longer required after the update.. public static string OptionClean { get; } Property Value string OptionCommand Looks up a localized string similar to Instead of executing the default command, use {COMMAND} instead. Valid command names are specified in the program's feed. Set to empty (\"\") to ignore the command during selection.. public static string OptionCommand { get; } Property Value string OptionConfigTab Looks up a localized string similar to Switch to a specific tab in the configuration GUI. Valid {TAB}s are 'updates', 'storage', 'catalog', 'trust', 'sync', 'language', 'language' and 'advanced'.. public static string OptionConfigTab { get; } Property Value string OptionCpu Looks up a localized string similar to Forces the solver to target a specific {CPU}.. public static string OptionCpu { get; } Property Value string OptionCustomize Looks up a localized string similar to Show the graphical policy editor. This allows you to customize which version of a program or library to use.. public static string OptionCustomize { get; } Property Value string OptionDigest Looks up a localized string similar to Display the manifest's digest (enabled by default if --manifest is not set).. public static string OptionDigest { get; } Property Value string OptionDiscover Looks up a localized string similar to Try to discover implementations on other machines in the local network instead of fetching them from their original source.. public static string OptionDiscover { get; } Property Value string OptionExportIncludeZeroInstall Looks up a localized string similar to Include Zero Install itself in the export alongside the application.. public static string OptionExportIncludeZeroInstall { get; } Property Value string OptionExportNoImplementations Looks up a localized string similar to Do not include implementation archives in the export. Only export feeds.. public static string OptionExportNoImplementations { get; } Property Value string OptionForceSelfUpdate Looks up a localized string similar to Perform the update even if the currently installed version is the same or newer.. public static string OptionForceSelfUpdate { get; } Property Value string OptionHelp Looks up a localized string similar to Show the built-in help text.. public static string OptionHelp { get; } Property Value string OptionIntegrateAdd Looks up a localized string similar to Add all access points of a specific {CATEGORY}.. public static string OptionIntegrateAdd { get; } Property Value string OptionIntegrateAddAll Looks up a localized string similar to Add all available access points.. public static string OptionIntegrateAddAll { get; } Property Value string OptionIntegrateAddStandard Looks up a localized string similar to Add the recommended standard access points.. public static string OptionIntegrateAddStandard { get; } Property Value string OptionIntegrateRemove Looks up a localized string similar to Remove all access points of a specific {CATEGORY}.. public static string OptionIntegrateRemove { get; } Property Value string OptionIntegrateRemoveAll Looks up a localized string similar to Remove all access points.. public static string OptionIntegrateRemoveAll { get; } Property Value string OptionLanguage Looks up a localized string similar to Specifies the preferred language for the implementation. Use ISO short language codes (e.g. en or en-US). You can use this option multiple times to specify multiple acceptable languages.. public static string OptionLanguage { get; } Property Value string OptionLibrary Looks up a localized string similar to Deploy Zero Install as a library for use by other applications without its own desktop integration.. public static string OptionLibrary { get; } Property Value string OptionMachine Looks up a localized string similar to Apply the configuration machine-wide (for the entire computer) instead of just for the current user.. public static string OptionMachine { get; } Property Value string OptionMain Looks up a localized string similar to Run the specified executable {MAIN} instead of the default. If it starts with '/' or '' then the path is relative to the implementation's top-level directory, whereas otherwise it is relative to the directory containing the default main program. May not contain command-line arguments! Whitespaces do not need to be escaped.. public static string OptionMain { get; } Property Value string OptionManifest Looks up a localized string similar to Display the manifest itself (one line for each file or directory).. public static string OptionManifest { get; } Property Value string OptionMessage Looks up a localized string similar to Message to display when interacting with user.. public static string OptionMessage { get; } Property Value string OptionNoDownload Looks up a localized string similar to Do not download the application itself yet. Will be automatically downloaded on first use instead.. public static string OptionNoDownload { get; } Property Value string OptionNoWait Looks up a localized string similar to Immediately returns once the chosen program has been launched instead of waiting for it to finish executing. On Windows the exit code is the process ID of the launched program.. public static string OptionNoWait { get; } Property Value string OptionNotBefore Looks up a localized string similar to Require a version of the main program not earlier than {VERSION}. E.g., if you want to run version 2.0 or later, use --not-before=2.0.. public static string OptionNotBefore { get; } Property Value string OptionOS Looks up a localized string similar to Forces the solver to target the operating system {OS}.. public static string OptionOS { get; } Property Value string OptionOffline Looks up a localized string similar to Run in off-line mode, overriding the default setting. In off-line mode, no interfaces are refreshed even if they are out-of-date, and newer versions of programs won't be downloaded even if the injector already knows about them (e.g. from a previous refresh).. public static string OptionOffline { get; } Property Value string OptionPortable Looks up a localized string similar to Create a portable installation that can be moved around (e.g., on a thumb drive).. public static string OptionPortable { get; } Property Value string OptionRefresh Looks up a localized string similar to Fetch fresh copies of all used feeds.. public static string OptionRefresh { get; } Property Value string OptionRestartCentral Looks up a localized string similar to Restart the '0install central' GUI after the update.. public static string OptionRestartCentral { get; } Property Value string OptionShow Looks up a localized string similar to Show where the selected components are stored on the disk.. public static string OptionShow { get; } Property Value string OptionSource Looks up a localized string similar to Select source code rather than a binary. This is used internally by '0compile'.. public static string OptionSource { get; } Property Value string OptionSyncReset Looks up a localized string similar to Reset the synchronization data. Valid {MODE}s are 'none' (merge data from client and server normally), 'client' (replace all data on client with data from server) and 'server' (replace all data on server with data from client).. public static string OptionSyncReset { get; } Property Value string OptionVerbose Looks up a localized string similar to More verbose output. Use twice for even more verbose output.. public static string OptionVerbose { get; } Property Value string OptionVersion Looks up a localized string similar to Display version information.. public static string OptionVersion { get; } Property Value string OptionVersionRange Looks up a localized string similar to Require a version of the main program within the given {RANGE}. Ranges are separated by pipes (|). Each range is in the form \"START..!END\". The range matches versions where START <= VERSION < END. The start or end may be omitted. A single version number may be used instead of a range to match only that version, or !VERSION to match everything except that version.. public static string OptionVersionRange { get; } Property Value string OptionVersionRangeFor Looks up a localized string similar to For any library or sub-component with the given {0:URI} specifies the version {1:RANGE} (as for --version).. public static string OptionVersionRangeFor { get; } Property Value string OptionWithStore Looks up a localized string similar to Add {DIR} to the list of implementation caches to search. However, new downloads will not be written to this directory.. public static string OptionWithStore { get; } Property Value string OptionWrapper Looks up a localized string similar to Instead of executing the chosen program directly, run {COMMAND} PROGRAM ARGS. This is useful for running debuggers and tracing tools on the program (rather than on Zero Install!). Note that the wrapper is executed in the environment selected by the program; hence, this mechanism cannot be used for sandboxing. May contain command-line arguments. Whitespaces must be escaped!. public static string OptionWrapper { get; } Property Value string OptionXml Looks up a localized string similar to Write output to console as machine-readable XML.. public static string OptionXml { get; } Property Value string Options Looks up a localized string similar to Options:. public static string Options { get; } Property Value string PortableMode Looks up a localized string similar to Portable mode. public static string PortableMode { get; } Property Value string PropertiesFor Looks up a localized string similar to Properties for {0}. public static string PropertiesFor { get; } Property Value string Remove Looks up a localized string similar to Remove. public static string Remove { get; } Property Value string RemoveCheckedKeys Looks up a localized string similar to Do you want to remove the {0} checked keys from the list?. public static string RemoveCheckedKeys { get; } Property Value string RemoveSelectedEntries Looks up a localized string similar to Do you want to remove the {0} selected entries from the list?. public static string RemoveSelectedEntries { get; } Property Value string RemovingApplications Looks up a localized string similar to Removing applications. public static string RemovingApplications { get; } Property Value string RemovingOutdated Looks up a localized string similar to Removing outdated implementations. public static string RemovingOutdated { get; } Property Value string ReopenTerminal Looks up a localized string similar to You may have to close and reopen your terminal for this to become effective.. public static string ReopenTerminal { get; } Property Value string ResetList Looks up a localized string similar to Do you want to reset the list to its original state?. public static string ResetList { get; } Property Value string ResolvedUsingAlias Looks up a localized string similar to Resolved '{0}' to '{1}' using an alias.. public static string ResolvedUsingAlias { get; } Property Value string ResolvedUsingCatalog Looks up a localized string similar to Resolved '{0}' to '{1}' using a catalog.. public static string ResolvedUsingCatalog { get; } Property Value string ResourceManager Returns the cached ResourceManager instance used by this class. public static ResourceManager ResourceManager { get; } Property Value ResourceManager RunNgen Looks up a localized string similar to Pre-compiling .NET assemblies for faster application startup. public static string RunNgen { get; } Property Value string SelectedImplementations Looks up a localized string similar to Selected implementations. public static string SelectedImplementations { get; } Property Value string SelfRemoveNotDeployed Looks up a localized string similar to This instance of Zero Install is not deployed. There is nothing to remove.. public static string SelfRemoveNotDeployed { get; } Property Value string SelfUpdateAvailable Looks up a localized string similar to An update to Zero Install v{0} is available. Install now?. public static string SelfUpdateAvailable { get; } Property Value string SelfUpdateBlocked Looks up a localized string similar to This Zero Install instance was not deployed. It therefore cannot update itself.. public static string SelfUpdateBlocked { get; } Property Value string SelfUpdateDisabled Looks up a localized string similar to Self-update is disabled. Run '0install config self_update_uri default' to enable it.. public static string SelfUpdateDisabled { get; } Property Value string ServingImplementations Looks up a localized string similar to Serving implementations on port {0}. public static string ServingImplementations { get; } Property Value string StabilityPolicyAutoSet Looks up a localized string similar to Set stability policy for {0} to match?. public static string StabilityPolicyAutoSet { get; } Property Value string StabilityPolicyReset Looks up a localized string similar to Reset stability policy for {0} to default?. public static string StabilityPolicyReset { get; } Property Value string StabilityPolicySuggested Looks up a localized string similar to The stability policy needed to select implementations from {0} is '{1}'.. public static string StabilityPolicySuggested { get; } Property Value string StartService Looks up a localized string similar to Starting Zero Install Store Service. public static string StartService { get; } Property Value string StopService Looks up a localized string similar to Stopping Zero Install Store Service. public static string StopService { get; } Property Value string StorageReclaimed Looks up a localized string similar to {0} storage space reclaimed.. public static string StorageReclaimed { get; } Property Value string StoreAudit Looks up a localized string similar to Store audit. public static string StoreAudit { get; } Property Value string SuggestLongPath Looks up a localized string similar to Enabling Windows support for Long Paths may solve this problem.. public static string SuggestLongPath { get; } Property Value string SupportedValues Looks up a localized string similar to Supported values: {0}. public static string SupportedValues { get; } Property Value string SyncCryptoKeyDescription Looks up a localized string similar to The crypto key is used to encrypt your data locally before transmitting it to the server. Keep this key secret and use something different for your password. This way nobody can access your data, even if the server were to be compromised.. public static string SyncCryptoKeyDescription { get; } Property Value string TooManyArguments Looks up a localized string similar to Too many arguments or unknown options.. public static string TooManyArguments { get; } Property Value string TrustedForDomains Looks up a localized string similar to {0} trusted for domains. public static string TrustedForDomains { get; } Property Value string TrustedKeys Looks up a localized string similar to Trusted keys. public static string TrustedKeys { get; } Property Value string TryHelp Looks up a localized string similar to Try {0}. public static string TryHelp { get; } Property Value string TryHelpWith Looks up a localized string similar to Try {0} with one of these:. public static string TryHelpWith { get; } Property Value string UninstallService Looks up a localized string similar to Uninstalling Zero Install Store Service. public static string UninstallService { get; } Property Value string UnknownCommand Looks up a localized string similar to Unknown command '{0}'.. public static string UnknownCommand { get; } Property Value string Usage Looks up a localized string similar to Usage:. public static string Usage { get; } Property Value string UseDefaultSetting Looks up a localized string similar to Use default setting. public static string UseDefaultSetting { get; } Property Value string UseInstead Looks up a localized string similar to Use '{0}' instead.. public static string UseInstead { get; } Property Value string UseSystemLanguage Looks up a localized string similar to Use system language. public static string UseSystemLanguage { get; } Property Value string Verify Looks up a localized string similar to Verify. public static string Verify { get; } Property Value string VerifyImplementation Looks up a localized string similar to Verify implementation. public static string VerifyImplementation { get; } Property Value string VersionInformation Looks up a localized string similar to Version information. public static string VersionInformation { get; } Property Value string Working Looks up a localized string similar to Working. public static string Working { get; } Property Value string" + }, + "api/ZeroInstall.Commands.Properties.html": { + "href": "api/ZeroInstall.Commands.Properties.html", + "title": "Namespace ZeroInstall.Commands.Properties | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Commands.Properties Classes Resources A strongly-typed resource class, for looking up localized strings, etc." + }, + "api/ZeroInstall.Commands.ScopedOperation.html": { + "href": "api/ZeroInstall.Commands.ScopedOperation.html", + "title": "Class ScopedOperation | Zero Install .NET API", + "keywords": "Class ScopedOperation Namespace ZeroInstall.Commands Assembly 0install.dll Common base class for Zero Install operations that require scoped dependency resolution. public abstract class ScopedOperation : ServiceProvider Inheritance object ServiceProvider ScopedOperation Derived CliCommand Inherited Members ServiceProvider.Handler ServiceProvider.Config ServiceProvider.ImplementationStore ServiceProvider.OpenPgp ServiceProvider.FeedCache ServiceProvider.TrustManager ServiceProvider.FeedManager ServiceProvider.CatalogManager ServiceProvider.PackageManager ServiceProvider.SelectionCandidateProvider ServiceProvider.Solver ServiceProvider.Fetcher ServiceProvider.Executor ServiceProvider.SelectionsManager ServiceProvider.TrySolveOffline(Requirements) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ScopedOperation(ITaskHandler) Common base class for Zero Install operations that require scoped dependency resolution. protected ScopedOperation(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Properties MinimumNetworkUseForBackgroundSelfUpdate The minimum EffectiveNetworkUse at which BackgroundSelfUpdate() will consider an update check. protected virtual NetworkLevel MinimumNetworkUseForBackgroundSelfUpdate { get; } Property Value NetworkLevel Methods BackgroundSelfUpdate() Automatically updates Zero Install itself in a background process. protected bool BackgroundSelfUpdate() Returns bool true if a background check was started; false if an update check was not due. EnsureAllowed(FeedUri) Ensures that the current config does not prohibit the use of the specified feed URI. protected void EnsureAllowed(FeedUri uri) Parameters uri FeedUri Exceptions WebException KioskMode is true and the uri is not the Catalog. FindByShortName(string) Uses FindByShortName(string?) to find a Feed matching a specific short name. protected Feed? FindByShortName(string shortName) Parameters shortName string The short name to look for. Must match either Name or BinaryName of NameRun. Returns Feed The first matching Feed; null if no match was found. Remarks Handles caching based on Refresh flag. GetCanonicalUri(string) Converts an interface or feed URI to its canonical representation. public FeedUri GetCanonicalUri(string uri) Parameters uri string Returns FeedUri Exceptions UriFormatException uri is an invalid interface URI. StartCommandBackground(string, params string[]) Starts executing a command in a background process. Returns immediately. protected static void StartCommandBackground(string command, params string[] args) Parameters command string The name of the command to execute. args string[] Additional arguments to pass to the command." + }, + "api/ZeroInstall.Commands.UnsuitableInstallBaseException.html": { + "href": "api/ZeroInstall.Commands.UnsuitableInstallBaseException.html", + "title": "Class UnsuitableInstallBaseException | Zero Install .NET API", + "keywords": "Class UnsuitableInstallBaseException Namespace ZeroInstall.Commands Assembly 0install.dll Indicates that the current InstallBase is unsuitable for the desired operation. [Serializable] public sealed class UnsuitableInstallBaseException : NotSupportedException, ISerializable Inheritance object Exception SystemException NotSupportedException UnsuitableInstallBaseException Implements ISerializable Inherited Members Exception.GetBaseException() Exception.GetType() Exception.ToString() Exception.Data Exception.HelpLink Exception.HResult Exception.InnerException Exception.Message Exception.Source Exception.StackTrace Exception.TargetSite object.Equals(object) object.Equals(object, object) object.GetHashCode() object.ReferenceEquals(object, object) Constructors UnsuitableInstallBaseException() Initializes a new instance of the NotSupportedException class, setting the Message property of the new instance to a system-supplied message that describes the error. This message takes into account the current system culture. public UnsuitableInstallBaseException() UnsuitableInstallBaseException(string) Initializes a new instance of the NotSupportedException class with a specified error message. public UnsuitableInstallBaseException(string message) Parameters message string A string that describes the error. The content of message is intended to be understood by humans. The caller of this constructor is required to ensure that this string has been localized for the current system culture. UnsuitableInstallBaseException(string, bool) Creates a new unsuitable install base exception. public UnsuitableInstallBaseException(string message, bool needsMachineWide) Parameters message string A message describing why the current location in unsuitable. needsMachineWide bool true if a machine-wide location is required; false if a user-specific location will also do. UnsuitableInstallBaseException(string, Exception) Initializes a new instance of the NotSupportedException class with a specified error message and a reference to the inner exception that is the cause of this exception. public UnsuitableInstallBaseException(string message, Exception innerException) Parameters message string The error message that explains the reason for the exception. innerException Exception The exception that is the cause of the current exception. If the innerException parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception. Properties NeedsMachineWide true if a machine-wide install location is required; false if a user-specific location will also do. public bool NeedsMachineWide { get; } Property Value bool" + }, + "api/ZeroInstall.Commands.ZeroInstallInstance.html": { + "href": "api/ZeroInstall.Commands.ZeroInstallInstance.html", + "title": "Class ZeroInstallInstance | Zero Install .NET API", + "keywords": "Class ZeroInstallInstance Namespace ZeroInstall.Commands Assembly 0install.dll Provides information about the currently running instance of Zero Install. public static class ZeroInstallInstance Inheritance object ZeroInstallInstance Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties IsDeployed Indicates whether the current Zero Install instance is deployed to a fixed location. public static bool IsDeployed { get; } Property Value bool IsIntegrated Indicates whether the current Zero Install instance is integrated into the desktop environment. public static bool IsIntegrated { get; } Property Value bool IsLibraryMode Indicates whether the current Zero Install instance is in library mode. public static bool IsLibraryMode { get; } Property Value bool IsMachineWide Indicates whether Zero Install is running from a machine-wide location. public static bool IsMachineWide { get; } Property Value bool Version The current version of Zero Install. public static ImplementationVersion Version { get; } Property Value ImplementationVersion Methods SilentUpdateCheck() Silently checks if an update for Zero Install is available. public static ImplementationVersion? SilentUpdateCheck() Returns ImplementationVersion The version number of the newest available update; null if no update is available." + }, + "api/ZeroInstall.Commands.html": { + "href": "api/ZeroInstall.Commands.html", + "title": "Namespace ZeroInstall.Commands | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Commands Command-line interface for Zero Install. Both an actual CLI and a library for building other clients. NuGet package: ZeroInstall.Commands Namespaces ZeroInstall.Commands.Basic CLI commands for Zero Install's core features. ZeroInstall.Commands.Desktop CLI commands for Zero Install's desktop integration features. ZeroInstall.Commands.Properties Classes CliCommand Represents a command invoked via command-line arguments. CliCommandHandler Uses the stdin/stderr streams to allow users to interact with CliCommands. CliMultiCommand Common base class for commands that provide multiple sub-CliCommands. EnvironmentBuilderExtensions Provides extension methods for IEnvironmentBuilder. NeedsGuiException Indicates that the requested operation requires a GUI but the current process does not have one. ProgramUtils Provides utility methods for application entry points. ScopedOperation Common base class for Zero Install operations that require scoped dependency resolution. UnsuitableInstallBaseException Indicates that the current InstallBase is unsuitable for the desired operation. ZeroInstallInstance Provides information about the currently running instance of Zero Install. Interfaces ICliSubCommand Interface for CliCommands that are aggregated by a CliMultiCommand. ICommandHandler Callback methods to allow users to interact with CliCommands. Enums ExitCode An exit code is returned to the original caller after the application terminates, to indicate success or the reason for failure." + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPoint.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPoint.html", + "title": "Class AccessPoint | Zero Install .NET API", + "keywords": "Class AccessPoint Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll An access point represents changes to the desktop environment's UI which the user explicitly requested. public abstract class AccessPoint : XmlUnknown, IEquatable, ICloneable Inheritance object XmlUnknown AccessPoint Implements IEquatable ICloneable Derived CapabilityRegistration CommandAccessPoint DefaultAccessPoint Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) XmlUnknown.GetHashCode() object.Equals(object) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public abstract void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public abstract AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public abstract IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. Unapply(AppEntry, bool) Unapply this access point on the current machine. public abstract void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPointList.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPointList.html", + "title": "Class AccessPointList | Zero Install .NET API", + "keywords": "Class AccessPointList Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Contains a set of AccessPoints to be registered in a desktop environment. [Serializable] [Equatable] public sealed class AccessPointList : XmlUnknown, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown AccessPointList Implements IEquatable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Entries A list of AccessPoints. [OrderedEquality] public List Entries { get; } Property Value List Methods Clone() Creates a deep copy of this AccessPointList instance. public AccessPointList Clone() Returns AccessPointList The new copy of the AccessPointList. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the access point list in the form \"Entry; Entry; ...\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(AccessPointList?, AccessPointList?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(AccessPointList? left, AccessPointList? right) Parameters left AccessPointList The left object right AccessPointList The right object Returns bool true if the objects are equal; otherwise, false. operator !=(AccessPointList?, AccessPointList?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(AccessPointList? left, AccessPointList? right) Parameters left AccessPointList The left object right AccessPointList The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.AppAlias.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.AppAlias.html", + "title": "Class AppAlias | Zero Install .NET API", + "keywords": "Class AppAlias Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Makes an application discoverable via the system's search PATH. [Equatable] public class AppAlias : CommandAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint CommandAccessPoint AppAlias Implements IEquatable ICloneable IEquatable IEquatable Inherited Members CommandAccessPoint.Name CommandAccessPoint.Command CommandAccessPoint.ValidateName() CommandAccessPoint.ToString() CommandAccessPoint.Equals(CommandAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Fields AltName public const string AltName = \"aliases\" Field Value string TagName public const string TagName = \"alias\" Field Value string Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(AppAlias?) protected bool Equals(AppAlias? other) Parameters other AppAlias Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(AppAlias?, AppAlias?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(AppAlias? left, AppAlias? right) Parameters left AppAlias The left object right AppAlias The right object Returns bool true if the objects are equal; otherwise, false. operator !=(AppAlias?, AppAlias?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(AppAlias? left, AppAlias? right) Parameters left AppAlias The left object right AppAlias The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.AutoPlay.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.AutoPlay.html", + "title": "Class AutoPlay | Zero Install .NET API", + "keywords": "Class AutoPlay Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Makes an application the default AutoPlay handler for a specific event. [Equatable] public class AutoPlay : DefaultAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint DefaultAccessPoint AutoPlay Implements IEquatable ICloneable IEquatable IEquatable Inherited Members DefaultAccessPoint.TagName DefaultAccessPoint.AltName DefaultAccessPoint.Capability DefaultAccessPoint.Equals(DefaultAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(AutoPlay?) protected bool Equals(AutoPlay? other) Parameters other AutoPlay Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the access point in the form \"AutoPlay\". Not safe for parsing! public override string ToString() Returns string Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(AutoPlay?, AutoPlay?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(AutoPlay? left, AutoPlay? right) Parameters left AutoPlay The left object right AutoPlay The right object Returns bool true if the objects are equal; otherwise, false. operator !=(AutoPlay?, AutoPlay?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(AutoPlay? left, AutoPlay? right) Parameters left AutoPlay The left object right AutoPlay The right object Returns bool true if the objects are not equal; otherwise, false. See Also AutoPlay" + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.AutoStart.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.AutoStart.html", + "title": "Class AutoStart | Zero Install .NET API", + "keywords": "Class AutoStart Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Automatically starts an application when the user logs in. [Equatable] public class AutoStart : CommandAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint CommandAccessPoint AutoStart Implements IEquatable ICloneable IEquatable IEquatable Inherited Members CommandAccessPoint.Name CommandAccessPoint.Command CommandAccessPoint.ValidateName() CommandAccessPoint.ToString() CommandAccessPoint.Equals(CommandAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Fields TagName public const string TagName = \"auto-start\" Field Value string Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(AutoStart?) protected bool Equals(AutoStart? other) Parameters other AutoStart Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(AutoStart?, AutoStart?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(AutoStart? left, AutoStart? right) Parameters left AutoStart The left object right AutoStart The right object Returns bool true if the objects are equal; otherwise, false. operator !=(AutoStart?, AutoStart?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(AutoStart? left, AutoStart? right) Parameters left AutoStart The left object right AutoStart The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.CapabilityRegistration.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.CapabilityRegistration.html", + "title": "Class CapabilityRegistration | Zero Install .NET API", + "keywords": "Class CapabilityRegistration Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Indicates that all compatible capabilities should be registered. [Equatable] public class CapabilityRegistration : AccessPoint, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown AccessPoint CapabilityRegistration Implements IEquatable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Fields AltName public const string AltName = \"capabilities\" Field Value string TagName public const string TagName = \"capability-registration\" Field Value string Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(CapabilityRegistration?) protected bool Equals(CapabilityRegistration? other) Parameters other CapabilityRegistration Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the access point in the form \"CapabilityRegistration\". Not safe for parsing! public override string ToString() Returns string Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(CapabilityRegistration?, CapabilityRegistration?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(CapabilityRegistration? left, CapabilityRegistration? right) Parameters left CapabilityRegistration The left object right CapabilityRegistration The right object Returns bool true if the objects are equal; otherwise, false. operator !=(CapabilityRegistration?, CapabilityRegistration?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(CapabilityRegistration? left, CapabilityRegistration? right) Parameters left CapabilityRegistration The left object right CapabilityRegistration The right object Returns bool true if the objects are not equal; otherwise, false. See Also ZeroInstall.Model.Capabilities" + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.CommandAccessPoint.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.CommandAccessPoint.html", + "title": "Class CommandAccessPoint | Zero Install .NET API", + "keywords": "Class CommandAccessPoint Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Adds a way to explicitly launch the application to the desktop environment. [Equatable] public abstract class CommandAccessPoint : AccessPoint, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown AccessPoint CommandAccessPoint Implements IEquatable ICloneable IEquatable Derived AppAlias AutoStart IconAccessPoint Inherited Members AccessPoint.GetConflictIDs(AppEntry) AccessPoint.Apply(AppEntry, Feed, IIconStore, bool) AccessPoint.Unapply(AppEntry, bool) AccessPoint.Clone() XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties Command The name of the Command to use when launching via this access point. Leave empty to use default. public string? Command { get; set; } Property Value string Name The name of the menu entry, icon, command-line, etc.. public string? Name { get; set; } Property Value string Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(CommandAccessPoint?) protected bool Equals(CommandAccessPoint? other) Parameters other CommandAccessPoint Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the access point in the form \"AccessPointType: Name (Command)\". Not safe for parsing! public override string ToString() Returns string ValidateName() Ensures that the given name can be used as a file name. protected void ValidateName() Exceptions IOException Name contains invalid characters. Operators operator ==(CommandAccessPoint?, CommandAccessPoint?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(CommandAccessPoint? left, CommandAccessPoint? right) Parameters left CommandAccessPoint The left object right CommandAccessPoint The right object Returns bool true if the objects are equal; otherwise, false. operator !=(CommandAccessPoint?, CommandAccessPoint?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(CommandAccessPoint? left, CommandAccessPoint? right) Parameters left CommandAccessPoint The left object right CommandAccessPoint The right object Returns bool true if the objects are not equal; otherwise, false. See Also Command" + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.ContextMenu.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.ContextMenu.html", + "title": "Class ContextMenu | Zero Install .NET API", + "keywords": "Class ContextMenu Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Integrates an application into a file manager's context menu. [Equatable] public class ContextMenu : DefaultAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint DefaultAccessPoint ContextMenu Implements IEquatable ICloneable IEquatable IEquatable Inherited Members DefaultAccessPoint.TagName DefaultAccessPoint.AltName DefaultAccessPoint.Capability DefaultAccessPoint.Equals(DefaultAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(ContextMenu?) protected bool Equals(ContextMenu? other) Parameters other ContextMenu Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the access point in the form \"ContextMenu\". Not safe for parsing! public override string ToString() Returns string Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(ContextMenu?, ContextMenu?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ContextMenu? left, ContextMenu? right) Parameters left ContextMenu The left object right ContextMenu The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ContextMenu?, ContextMenu?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ContextMenu? left, ContextMenu? right) Parameters left ContextMenu The left object right ContextMenu The right object Returns bool true if the objects are not equal; otherwise, false. See Also ContextMenu" + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultAccessPoint.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultAccessPoint.html", + "title": "Class DefaultAccessPoint | Zero Install .NET API", + "keywords": "Class DefaultAccessPoint Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Makes an application the default handler for something. [Equatable] public abstract class DefaultAccessPoint : AccessPoint, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown AccessPoint DefaultAccessPoint Implements IEquatable ICloneable IEquatable Derived AutoPlay ContextMenu DefaultProgram FileType MockAccessPoint UrlProtocol Inherited Members AccessPoint.GetConflictIDs(AppEntry) AccessPoint.Apply(AppEntry, Feed, IIconStore, bool) AccessPoint.Unapply(AppEntry, bool) AccessPoint.Clone() XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields AltName public const string AltName = \"default-app\" Field Value string TagName public const string TagName = \"default-access-point\" Field Value string Properties Capability The ID of the Capability to be made the default handler. public required string Capability { get; set; } Property Value string Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(DefaultAccessPoint?) protected bool Equals(DefaultAccessPoint? other) Parameters other DefaultAccessPoint Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Operators operator ==(DefaultAccessPoint?, DefaultAccessPoint?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(DefaultAccessPoint? left, DefaultAccessPoint? right) Parameters left DefaultAccessPoint The left object right DefaultAccessPoint The right object Returns bool true if the objects are equal; otherwise, false. operator !=(DefaultAccessPoint?, DefaultAccessPoint?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(DefaultAccessPoint? left, DefaultAccessPoint? right) Parameters left DefaultAccessPoint The left object right DefaultAccessPoint The right object Returns bool true if the objects are not equal; otherwise, false. See Also Capability" + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultProgram.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultProgram.html", + "title": "Class DefaultProgram | Zero Install .NET API", + "keywords": "Class DefaultProgram Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Makes an application a default program of some kind (e.g. default web-browser, default e-mail client, ...). [Equatable] public class DefaultProgram : DefaultAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint DefaultAccessPoint DefaultProgram Implements IEquatable ICloneable IEquatable IEquatable Inherited Members DefaultAccessPoint.TagName DefaultAccessPoint.AltName DefaultAccessPoint.Capability DefaultAccessPoint.Equals(DefaultAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(DefaultProgram?) protected bool Equals(DefaultProgram? other) Parameters other DefaultProgram Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the access point in the form \"DefaultProgram\". Not safe for parsing! public override string ToString() Returns string Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(DefaultProgram?, DefaultProgram?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(DefaultProgram? left, DefaultProgram? right) Parameters left DefaultProgram The left object right DefaultProgram The right object Returns bool true if the objects are equal; otherwise, false. operator !=(DefaultProgram?, DefaultProgram?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(DefaultProgram? left, DefaultProgram? right) Parameters left DefaultProgram The left object right DefaultProgram The right object Returns bool true if the objects are not equal; otherwise, false. See Also DefaultProgram" + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.DesktopIcon.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.DesktopIcon.html", + "title": "Class DesktopIcon | Zero Install .NET API", + "keywords": "Class DesktopIcon Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Creates an icon for an application on the user's desktop. [Equatable] public class DesktopIcon : IconAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint CommandAccessPoint IconAccessPoint DesktopIcon Implements IEquatable ICloneable IEquatable IEquatable Inherited Members CommandAccessPoint.Name CommandAccessPoint.Command CommandAccessPoint.ValidateName() CommandAccessPoint.ToString() CommandAccessPoint.Equals(CommandAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Fields AltName public const string AltName = \"desktop\" Field Value string TagName public const string TagName = \"desktop-icon\" Field Value string Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(DesktopIcon?) protected bool Equals(DesktopIcon? other) Parameters other DesktopIcon Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(DesktopIcon?, DesktopIcon?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(DesktopIcon? left, DesktopIcon? right) Parameters left DesktopIcon The left object right DesktopIcon The right object Returns bool true if the objects are equal; otherwise, false. operator !=(DesktopIcon?, DesktopIcon?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(DesktopIcon? left, DesktopIcon? right) Parameters left DesktopIcon The left object right DesktopIcon The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.FileType.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.FileType.html", + "title": "Class FileType | Zero Install .NET API", + "keywords": "Class FileType Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Makes an application the default handler for a specific file type. [Equatable] public class FileType : DefaultAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint DefaultAccessPoint FileType Implements IEquatable ICloneable IEquatable IEquatable Inherited Members DefaultAccessPoint.TagName DefaultAccessPoint.AltName DefaultAccessPoint.Capability DefaultAccessPoint.Equals(DefaultAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(FileType?) protected bool Equals(FileType? other) Parameters other FileType Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the access point in the form \"FileType: Capability\". Not safe for parsing! public override string ToString() Returns string Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(FileType?, FileType?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(FileType? left, FileType? right) Parameters left FileType The left object right FileType The right object Returns bool true if the objects are equal; otherwise, false. operator !=(FileType?, FileType?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(FileType? left, FileType? right) Parameters left FileType The left object right FileType The right object Returns bool true if the objects are not equal; otherwise, false. See Also FileType" + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.IconAccessPoint.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.IconAccessPoint.html", + "title": "Class IconAccessPoint | Zero Install .NET API", + "keywords": "Class IconAccessPoint Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Creates some form of icon in the desktop environment. public abstract class IconAccessPoint : CommandAccessPoint, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown AccessPoint CommandAccessPoint IconAccessPoint Implements IEquatable ICloneable IEquatable Derived DesktopIcon MenuEntry QuickLaunch SendTo Inherited Members CommandAccessPoint.Name CommandAccessPoint.Command CommandAccessPoint.ValidateName() CommandAccessPoint.ToString() CommandAccessPoint.Equals(object) CommandAccessPoint.Equals(CommandAccessPoint) CommandAccessPoint.GetHashCode() AccessPoint.GetConflictIDs(AppEntry) AccessPoint.Apply(AppEntry, Feed, IIconStore, bool) AccessPoint.Unapply(AppEntry, bool) AccessPoint.Clone() XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object)" + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.MenuEntry.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.MenuEntry.html", + "title": "Class MenuEntry | Zero Install .NET API", + "keywords": "Class MenuEntry Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Creates an entry for an application in the user's application menu (i.e. Windows start menu, GNOME application menu, etc.). [Equatable] public class MenuEntry : IconAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint CommandAccessPoint IconAccessPoint MenuEntry Implements IEquatable ICloneable IEquatable IEquatable Inherited Members CommandAccessPoint.Name CommandAccessPoint.Command CommandAccessPoint.ValidateName() CommandAccessPoint.ToString() CommandAccessPoint.Equals(CommandAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Fields AltName public const string AltName = \"menu\" Field Value string TagName public const string TagName = \"menu-entry\" Field Value string Properties Category The category or folder in the menu to add the entry to. Leave empty for top-level entry. public string? Category { get; set; } Property Value string Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(MenuEntry?) protected bool Equals(MenuEntry? other) Parameters other MenuEntry Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(MenuEntry?, MenuEntry?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(MenuEntry? left, MenuEntry? right) Parameters left MenuEntry The left object right MenuEntry The right object Returns bool true if the objects are equal; otherwise, false. operator !=(MenuEntry?, MenuEntry?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(MenuEntry? left, MenuEntry? right) Parameters left MenuEntry The left object right MenuEntry The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.MockAccessPoint.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.MockAccessPoint.html", + "title": "Class MockAccessPoint | Zero Install .NET API", + "keywords": "Class MockAccessPoint Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll A mock access point that does nothing (used for testing). Points to a FileType. [Equatable] public class MockAccessPoint : DefaultAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint DefaultAccessPoint MockAccessPoint Implements IEquatable ICloneable IEquatable IEquatable Inherited Members DefaultAccessPoint.TagName DefaultAccessPoint.AltName DefaultAccessPoint.Capability DefaultAccessPoint.Equals(DefaultAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Constructors MockAccessPoint() public MockAccessPoint() Properties ApplyFlagPath The path to a file to create when Apply(AppEntry, Feed, IIconStore, bool) is called. public string? ApplyFlagPath { get; set; } Property Value string ID A unique identifier. Determines the conflict ID. public string? ID { get; set; } Property Value string UnapplyFlagPath The path to a file to create when Unapply(AppEntry, bool) is called. public string? UnapplyFlagPath { get; set; } Property Value string Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(MockAccessPoint?) protected bool Equals(MockAccessPoint? other) Parameters other MockAccessPoint Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the access point in the form \"MockAccessPoint: ID\". Not safe for parsing! public override string ToString() Returns string Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(MockAccessPoint?, MockAccessPoint?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(MockAccessPoint? left, MockAccessPoint? right) Parameters left MockAccessPoint The left object right MockAccessPoint The right object Returns bool true if the objects are equal; otherwise, false. operator !=(MockAccessPoint?, MockAccessPoint?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(MockAccessPoint? left, MockAccessPoint? right) Parameters left MockAccessPoint The left object right MockAccessPoint The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.QuickLaunch.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.QuickLaunch.html", + "title": "Class QuickLaunch | Zero Install .NET API", + "keywords": "Class QuickLaunch Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Creates a shortcut for an application in the Quick Launch bar. [Equatable] public class QuickLaunch : IconAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint CommandAccessPoint IconAccessPoint QuickLaunch Implements IEquatable ICloneable IEquatable IEquatable Inherited Members CommandAccessPoint.Name CommandAccessPoint.Command CommandAccessPoint.ValidateName() CommandAccessPoint.ToString() CommandAccessPoint.Equals(CommandAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(QuickLaunch?) protected bool Equals(QuickLaunch? other) Parameters other QuickLaunch Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(QuickLaunch?, QuickLaunch?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(QuickLaunch? left, QuickLaunch? right) Parameters left QuickLaunch The left object right QuickLaunch The right object Returns bool true if the objects are equal; otherwise, false. operator !=(QuickLaunch?, QuickLaunch?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(QuickLaunch? left, QuickLaunch? right) Parameters left QuickLaunch The left object right QuickLaunch The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.SendTo.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.SendTo.html", + "title": "Class SendTo | Zero Install .NET API", + "keywords": "Class SendTo Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Creates a shortcut for an application in the \"Send to\" menu. [Equatable] public class SendTo : IconAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint CommandAccessPoint IconAccessPoint SendTo Implements IEquatable ICloneable IEquatable IEquatable Inherited Members CommandAccessPoint.Name CommandAccessPoint.Command CommandAccessPoint.ValidateName() CommandAccessPoint.ToString() CommandAccessPoint.Equals(CommandAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Fields TagName public const string TagName = \"send-to\" Field Value string Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(SendTo?) protected bool Equals(SendTo? other) Parameters other SendTo Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(SendTo?, SendTo?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(SendTo? left, SendTo? right) Parameters left SendTo The left object right SendTo The right object Returns bool true if the objects are equal; otherwise, false. operator !=(SendTo?, SendTo?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(SendTo? left, SendTo? right) Parameters left SendTo The left object right SendTo The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.UrlProtocol.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.UrlProtocol.html", + "title": "Class UrlProtocol | Zero Install .NET API", + "keywords": "Class UrlProtocol Namespace ZeroInstall.DesktopIntegration.AccessPoints Assembly ZeroInstall.DesktopIntegration.dll Makes an application the default handler for a specific URL protocol. [Equatable] public class UrlProtocol : DefaultAccessPoint, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown AccessPoint DefaultAccessPoint UrlProtocol Implements IEquatable ICloneable IEquatable IEquatable Inherited Members DefaultAccessPoint.TagName DefaultAccessPoint.AltName DefaultAccessPoint.Capability DefaultAccessPoint.Equals(DefaultAccessPoint) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Methods Apply(AppEntry, Feed, IIconStore, bool) Applies this access point to the current machine. public override void Apply(AppEntry appEntry, Feed feed, IIconStore iconStore, bool machineWide) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Clone() Creates a deep copy of this AccessPoint instance. public override AccessPoint Clone() Returns AccessPoint The new copy of the AccessPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(UrlProtocol?) protected bool Equals(UrlProtocol? other) Parameters other UrlProtocol Returns bool GetConflictIDs(AppEntry) Retrieves identifiers from a namespace global to all AccessPoints. Collisions in this namespace indicate that the respective AccessPoints are in conflict cannot be applied on a system at the same time. public override IEnumerable GetConflictIDs(AppEntry appEntry) Parameters appEntry AppEntry The application entry containing this access point. Returns IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the access point in the form \"UrlProtocol: Capability\". Not safe for parsing! public override string ToString() Returns string Unapply(AppEntry, bool) Unapply this access point on the current machine. public override void Unapply(AppEntry appEntry, bool machineWide) Parameters appEntry AppEntry The application entry containing this access point. machineWide bool Apply the configuration machine-wide instead of just for the current user. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Operators operator ==(UrlProtocol?, UrlProtocol?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(UrlProtocol? left, UrlProtocol? right) Parameters left UrlProtocol The left object right UrlProtocol The right object Returns bool true if the objects are equal; otherwise, false. operator !=(UrlProtocol?, UrlProtocol?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(UrlProtocol? left, UrlProtocol? right) Parameters left UrlProtocol The left object right UrlProtocol The right object Returns bool true if the objects are not equal; otherwise, false. See Also UrlProtocol" + }, + "api/ZeroInstall.DesktopIntegration.AccessPoints.html": { + "href": "api/ZeroInstall.DesktopIntegration.AccessPoints.html", + "title": "Namespace ZeroInstall.DesktopIntegration.AccessPoints | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.DesktopIntegration.AccessPoints Structures for parsing and in-memory representation of access points applied to a system. Classes AccessPoint An access point represents changes to the desktop environment's UI which the user explicitly requested. AccessPointList Contains a set of AccessPoints to be registered in a desktop environment. AppAlias Makes an application discoverable via the system's search PATH. AutoPlay Makes an application the default AutoPlay handler for a specific event. AutoStart Automatically starts an application when the user logs in. CapabilityRegistration Indicates that all compatible capabilities should be registered. CommandAccessPoint Adds a way to explicitly launch the application to the desktop environment. ContextMenu Integrates an application into a file manager's context menu. DefaultAccessPoint Makes an application the default handler for something. DefaultProgram Makes an application a default program of some kind (e.g. default web-browser, default e-mail client, ...). DesktopIcon Creates an icon for an application on the user's desktop. FileType Makes an application the default handler for a specific file type. IconAccessPoint Creates some form of icon in the desktop environment. MenuEntry Creates an entry for an application in the user's application menu (i.e. Windows start menu, GNOME application menu, etc.). MockAccessPoint A mock access point that does nothing (used for testing). Points to a FileType. QuickLaunch Creates a shortcut for an application in the Quick Launch bar. SendTo Creates a shortcut for an application in the \"Send to\" menu. UrlProtocol Makes an application the default handler for a specific URL protocol." + }, + "api/ZeroInstall.DesktopIntegration.AppEntry.html": { + "href": "api/ZeroInstall.DesktopIntegration.AppEntry.html", + "title": "Class AppEntry | Zero Install .NET API", + "keywords": "Class AppEntry Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Represents an application in the AppList identified by its interface URI. [Equatable] public sealed class AppEntry : XmlUnknown, IEquatable, IMergeable, ICloneable, IEquatable Inheritance object XmlUnknown AppEntry Implements IEquatable IMergeable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties AccessPoints A set of AccessPointss to be registered in the desktop environment. Is null if no desktop integration has been performed yet. public AccessPointList? AccessPoints { get; set; } Property Value AccessPointList AutoUpdate Set to true to automatically download the newest available version of the application as a regular background task. Update checks will still be performed when the application is launched when set to false. public bool AutoUpdate { get; set; } Property Value bool CapabilityLists A set of Capability lists to be registered in the desktop environment. Only compatible architectures are handled. [Browsable(false)] [OrderedEquality] public List CapabilityLists { get; } Property Value List EffectiveRequirements The Requirements if it is set, otherwise a basic reference to InterfaceUri. [Browsable(false)] [IgnoreEquality] public Requirements EffectiveRequirements { get; } Property Value Requirements Hostname A regular expression a computer's hostname must match for this entry to be applied. Enables machine-specific entry filtering. public string? Hostname { get; set; } Property Value string InterfaceUri The URI or local path of the interface defining the application or the pet-name if Requirements is set. public required FeedUri InterfaceUri { get; set; } Property Value FeedUri Name The name of the application. Usually equal to Name. public required string Name { get; set; } Property Value string Requirements A set of requirements/restrictions imposed by the user on the implementation selection process. [Browsable(false)] public Requirements? Requirements { get; set; } Property Value Requirements Timestamp The time this element was last modified. This is used to determine precedence with sync conflicts. [Browsable(false)] [IgnoreEquality] public DateTime Timestamp { get; set; } Property Value DateTime Remarks This value should be ignored by clone and equality methods. TimestampUnix The time this entry was last modified encoded as Unix time (number of seconds since the epoch). [Browsable(false)] [IgnoreEquality] public long TimestampUnix { get; set; } Property Value long Remarks This value is ignored by clone and equality methods. Methods Clone() Creates a deep copy of this AppEntry instance. public AppEntry Clone() Returns AppEntry The new copy of the AppEntry. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. LookupCapability(string) Retrieves the first Capability that matches a specific type and ID and is compatible with CurrentSystem. public T LookupCapability(string id) where T : Capability Parameters id string The ID to match. Returns T The first matching Capability. Type Parameters T The capability type to match. Exceptions KeyNotFoundException No capability matching id and T was found. ToString() Creates string representation suitable for console output. public override string ToString() Returns string Operators operator ==(AppEntry?, AppEntry?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(AppEntry? left, AppEntry? right) Parameters left AppEntry The left object right AppEntry The right object Returns bool true if the objects are equal; otherwise, false. operator !=(AppEntry?, AppEntry?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(AppEntry? left, AppEntry? right) Parameters left AppEntry The left object right AppEntry The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.DesktopIntegration.AppList.html": { + "href": "api/ZeroInstall.DesktopIntegration.AppList.html", + "title": "Class AppList | Zero Install .NET API", + "keywords": "Class AppList Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Stores a list of applications and the kind of desktop integration the user chose for them. [XmlNamespace(\"xsi\", \"http://www.w3.org/2001/XMLSchema-instance\")] [Equatable] public sealed class AppList : XmlUnknown, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown AppList Implements IEquatable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods ConflictDataUtils.CheckForConflicts(AppList, IEnumerable, AppEntry) Fields XmlNamespace The XML namespace used for storing application list data. public const string XmlNamespace = \"http://0install.de/schema/desktop-integration/app-list\" Field Value string XsdLocation The URI to retrieve an XSD containing the XML Schema information for this class in serialized form. public const string XsdLocation = \"https://docs.0install.net/specifications/app-list.xsd\" Field Value string XsiSchemaLocation Provides XML Editors with location hints for XSD files. public string XsiSchemaLocation Field Value string Properties Entries A list of AppEntrys. [UnorderedEquality] public List Entries { get; } Property Value List this[FeedUri] Gets an AppEntry for a specific interface URI. public AppEntry this[FeedUri interfaceUri] { get; } Parameters interfaceUri FeedUri The InterfaceUri to look for. Property Value AppEntry The first matching AppEntry. Exceptions KeyNotFoundException No entry matching the interface URI was found. Methods Clone() Creates a deep copy of this AppList instance. public AppList Clone() Returns AppList The new copy of the AppList. ContainsEntry(FeedUri) Checks whether an AppEntry for a specific interface URI exists. public bool ContainsEntry(FeedUri interfaceUri) Parameters interfaceUri FeedUri The InterfaceUri to look for. Returns bool true if a matching entry was found; false otherwise. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. FindAppAlias(string) Retrieves a specific AppAlias. public (AppAlias alias, AppEntry appEntry)? FindAppAlias(string aliasName) Parameters aliasName string The name of the alias to search for. Returns (AppAlias alias, AppEntry appEntry)? The first AppAlias matching aliasName and the AppEntry containing it; null if none was found. GetDefaultPath(bool) Returns the default file path used to store the main AppList on this system. public static string GetDefaultPath(bool machineWide = false) Parameters machineWide bool Store the AppList machine-wide instead of just for the current user. Returns string GetEntry(FeedUri) Gets an AppEntry for a specific interface URI. Safe for missing elements. public AppEntry? GetEntry(FeedUri interfaceUri) Parameters interfaceUri FeedUri The InterfaceUri to look for. Returns AppEntry The first matching AppEntry; null if no match was found. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. LoadSafe(bool) Tries to load the AppList from its default location. Automatically falls back to an empty list on errors. public static AppList LoadSafe(bool machineWide = false) Parameters machineWide bool Load the machine-wide AppList instead of the one for the current user. Returns AppList The loaded AppList. LoadXmlZip(Stream, string?) Loads a list from an XML file embedded in a ZIP archive. public static AppList LoadXmlZip(Stream stream, string? password = null) Parameters stream Stream The ZIP archive to load. password string The password to use for decryption; null for no encryption. Returns AppList The loaded list. Exceptions ZipException A problem occurred while reading the ZIP data or password is wrong. InvalidDataException A problem occurred while deserializing an XML file. ResolveAlias(string) Retrieves the target URI of a specific AppAlias. public FeedUri? ResolveAlias(string aliasName) Parameters aliasName string The name of the alias to search for. Returns FeedUri The target feed of the alias; null if none was found. SaveXmlZip(Stream, string?) Saves the list in an XML file embedded in a ZIP archive. public void SaveXmlZip(Stream stream, string? password = null) Parameters stream Stream The ZIP archive to be written. password string The password to use for encryption; null for no encryption. Search(string?) Returns all AppEntrys that match a specific search query. public IEnumerable Search(string? query) Parameters query string The search query. Must be contained within Name. Returns IEnumerable All AppEntrys matching query. Operators operator ==(AppList?, AppList?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(AppList? left, AppList? right) Parameters left AppList The left object right AppList The right object Returns bool true if the objects are equal; otherwise, false. operator !=(AppList?, AppList?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(AppList? left, AppList? right) Parameters left AppList The left object right AppList The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.DesktopIntegration.CapabilityExtensions.html": { + "href": "api/ZeroInstall.DesktopIntegration.CapabilityExtensions.html", + "title": "Class CapabilityExtensions | Zero Install .NET API", + "keywords": "Class CapabilityExtensions Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Contains extension methods for Capabilitys. public static class CapabilityExtensions Inheritance object CapabilityExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ToAccessPoint(DefaultCapability) Creates a DefaultAccessPoint referencing a specific DefaultCapability. public static AccessPoint ToAccessPoint(this DefaultCapability capability) Parameters capability DefaultCapability The DefaultCapability to create a DefaultAccessPoint for. Returns AccessPoint The newly created DefaultAccessPoint." + }, + "api/ZeroInstall.DesktopIntegration.CategoryIntegrationManager.html": { + "href": "api/ZeroInstall.DesktopIntegration.CategoryIntegrationManager.html", + "title": "Class CategoryIntegrationManager | Zero Install .NET API", + "keywords": "Class CategoryIntegrationManager Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Manages desktop integration via AccessPoints, grouping them into categories. [MustDisposeResource] public class CategoryIntegrationManager : IntegrationManager, IDisposable, ICategoryIntegrationManager, IIntegrationManager Inheritance object ManagerBase IntegrationManagerBase IntegrationManager CategoryIntegrationManager Implements IDisposable ICategoryIntegrationManager IIntegrationManager Inherited Members IntegrationManager.MutexName IntegrationManager.ChangedWindowMessageID IntegrationManager.Config IntegrationManager.GetDir(bool, params string[]) IntegrationManager.AppListPath IntegrationManager.AddAppInternal(FeedTarget) IntegrationManager.AddAppInternal(string, Requirements, Feed) IntegrationManager.AddAppInternal(AppEntry, Converter) IntegrationManager.RemoveAppInternal(AppEntry) IntegrationManager.UpdateAppInternal(AppEntry, Feed) IntegrationManager.AddAccessPointsInternal(AppEntry, Feed, IReadOnlyCollection) IntegrationManager.RemoveAccessPointsInternal(AppEntry, IEnumerable) IntegrationManager.RepairAppInternal(AppEntry, Feed) IntegrationManager.Finish() IntegrationManagerBase.AppList IntegrationManagerBase.AddApp(FeedTarget) IntegrationManagerBase.AddApp(string, Requirements, Feed) IntegrationManagerBase.RemoveApp(AppEntry) IntegrationManagerBase.UpdateApp(AppEntry, Feed) IntegrationManagerBase.UpdateApp(AppEntry, Feed, Requirements) IntegrationManagerBase.AddAccessPoints(AppEntry, Feed, IEnumerable) IntegrationManagerBase.RemoveAccessPoints(AppEntry, IEnumerable) IntegrationManagerBase.Repair(Converter) ManagerBase.Handler ManagerBase.MachineWide ManagerBase.AcquireMutex() ManagerBase.Dispose() object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks To prevent race-conditions there may only be one desktop integration class instance active at any given time. This class acquires a mutex upon calling its constructor and releases it upon calling Dispose(). Constructors CategoryIntegrationManager(Config, ITaskHandler, bool) Manages desktop integration via AccessPoints, grouping them into categories. public CategoryIntegrationManager(Config config, ITaskHandler handler, bool machineWide = false) Parameters config Config handler ITaskHandler machineWide bool Remarks To prevent race-conditions there may only be one desktop integration class instance active at any given time. This class acquires a mutex upon calling its constructor and releases it upon calling Dispose(). Fields AllCategories A list of all known AccessPoint categories. public static readonly string[] AllCategories Field Value string[] StandardCategories A list of recommended standard AccessPoint categories. public static readonly string[] StandardCategories Field Value string[] Methods AddAccessPointCategories(AppEntry, Feed, params string[]) Applies a category of AccessPoints for an application. public void AddAccessPointCategories(AppEntry appEntry, Feed feed, params string[] categories) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. categories string[] A list of all AccessPoint categories to be added to the already applied ones. Exceptions ConflictException One or more of the categories would cause a conflict with the existing AccessPoints in AppList. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. RemoveAccessPointCategories(AppEntry, params string[]) Removes a category of already applied AccessPoints for an application. public void RemoveAccessPointCategories(AppEntry appEntry, params string[] categories) Parameters appEntry AppEntry The application being integrated. categories string[] A list of all AccessPoint categories to be removed from the already applied ones. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.ConflictData.html": { + "href": "api/ZeroInstall.DesktopIntegration.ConflictData.html", + "title": "Class ConflictData | Zero Install .NET API", + "keywords": "Class ConflictData Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Stores information about an AccessPoint causing a conflict and the AppEntry containing it. public sealed record ConflictData : IEquatable Inheritance object ConflictData Implements IEquatable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Constructors ConflictData(AccessPoint, AppEntry) Stores information about an AccessPoint causing a conflict and the AppEntry containing it. public ConflictData(AccessPoint AccessPoint, AppEntry AppEntry) Parameters AccessPoint AccessPoint The AccessPoint causing the conflict. AppEntry AppEntry The application containing the AccessPoint. Properties AccessPoint The AccessPoint causing the conflict. public AccessPoint AccessPoint { get; init; } Property Value AccessPoint AppEntry The application containing the AccessPoint. public AppEntry AppEntry { get; init; } Property Value AppEntry" + }, + "api/ZeroInstall.DesktopIntegration.ConflictDataUtils.html": { + "href": "api/ZeroInstall.DesktopIntegration.ConflictDataUtils.html", + "title": "Class ConflictDataUtils | Zero Install .NET API", + "keywords": "Class ConflictDataUtils Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Helper methods for creating ConflictData lists. public static class ConflictDataUtils Inheritance object ConflictDataUtils Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods CheckForConflicts(AppList, IEnumerable, AppEntry) Checks new AccessPoint candidates for conflicts with existing ones. public static void CheckForConflicts(this AppList appList, IEnumerable accessPoints, AppEntry appEntry) Parameters appList AppList The AppList containing the existing AccessPoints. accessPoints IEnumerable The set of AccessPoints candidates to check. appEntry AppEntry The AppEntry the accessPoints are intended for. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. ConflictException One or more of the accessPoints would cause a conflict with the existing AccessPoints in AppList. GetConflictData(IEnumerable, AppEntry) Returns all ConflictDatas for a set of new AccessPoint candidates. public static IDictionary GetConflictData(this IEnumerable accessPoints, AppEntry appEntry) Parameters accessPoints IEnumerable The set of AccessPoints candidates to build the list for. appEntry AppEntry The AppEntry the accessPoints are intended for. Returns IDictionary A dictionary of conflict IDs mapping to the according ConflictData. Exceptions ConflictException There are inner conflicts within accessPoints. GetConflictData(IEnumerable) Returns all ConflictDatas for a set of existing AppEntrys. public static IDictionary GetConflictData(this IEnumerable appEntries) Parameters appEntries IEnumerable The AppEntrys to build the list for. Returns IDictionary A dictionary of conflict IDs mapping to the according ConflictData. Exceptions ConflictException There are preexisting conflicts within appEntries." + }, + "api/ZeroInstall.DesktopIntegration.ConflictException.html": { + "href": "api/ZeroInstall.DesktopIntegration.ConflictException.html", + "title": "Class ConflictException | Zero Install .NET API", + "keywords": "Class ConflictException Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Indicates a desktop integration operation could not be completed due to conflicting AccessPoints. public sealed class ConflictException : InvalidOperationException, ISerializable Inheritance object Exception SystemException InvalidOperationException ConflictException Implements ISerializable Inherited Members Exception.GetBaseException() Exception.GetType() Exception.ToString() Exception.Data Exception.HelpLink Exception.HResult Exception.InnerException Exception.Message Exception.Source Exception.StackTrace Exception.TargetSite object.Equals(object) object.Equals(object, object) object.GetHashCode() object.ReferenceEquals(object, object) Constructors ConflictException() Initializes a new instance of the InvalidOperationException class. public ConflictException() ConflictException(string) Initializes a new instance of the InvalidOperationException class with a specified error message. public ConflictException(string message) Parameters message string The message that describes the error. ConflictException(string, Exception) Initializes a new instance of the InvalidOperationException class with a specified error message and a reference to the inner exception that is the cause of this exception. public ConflictException(string message, Exception innerException) Parameters message string The error message that explains the reason for the exception. innerException Exception The exception that is the cause of the current exception. If the innerException parameter is not a null reference (Nothing in Visual Basic), the current exception is raised in a catch block that handles the inner exception. Properties Entries The entries that are in conflict with each other. public IEnumerable? Entries { get; } Property Value IEnumerable Methods ExistingConflict(params ConflictData[]) Creates an exception indicating an existing desktop integration conflict. public static ConflictException ExistingConflict(params ConflictData[] entries) Parameters entries ConflictData[] The entries that are in conflict with each other. Returns ConflictException InnerConflict(params ConflictData[]) Creates an exception indicating an inner desktop integration conflict. public static ConflictException InnerConflict(params ConflictData[] entries) Parameters entries ConflictData[] The entries that are in conflict with each other. Returns ConflictException NewConflict(ConflictData, ConflictData) Creates an exception indicating a new desktop integration conflict. public static ConflictException NewConflict(ConflictData existingEntry, ConflictData newEntry) Parameters existingEntry ConflictData The existing entry that is preventing newEntry from being applied. newEntry ConflictData The new entry that is in conflict with existingEntry. Returns ConflictException" + }, + "api/ZeroInstall.DesktopIntegration.ICategoryIntegrationManager.html": { + "href": "api/ZeroInstall.DesktopIntegration.ICategoryIntegrationManager.html", + "title": "Interface ICategoryIntegrationManager | Zero Install .NET API", + "keywords": "Interface ICategoryIntegrationManager Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Manages desktop integration via AccessPoints, grouping them into categories. public interface ICategoryIntegrationManager : IIntegrationManager Inherited Members IIntegrationManager.AppList IIntegrationManager.MachineWide IIntegrationManager.AddApp(FeedTarget) IIntegrationManager.AddApp(string, Requirements, Feed) IIntegrationManager.RemoveApp(AppEntry) IIntegrationManager.UpdateApp(AppEntry, Feed) IIntegrationManager.UpdateApp(AppEntry, Feed, Requirements) IIntegrationManager.AddAccessPoints(AppEntry, Feed, IEnumerable) IIntegrationManager.RemoveAccessPoints(AppEntry, IEnumerable) IIntegrationManager.Repair(Converter) Methods AddAccessPointCategories(AppEntry, Feed, params string[]) Applies a category of AccessPoints for an application. void AddAccessPointCategories(AppEntry appEntry, Feed feed, params string[] categories) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. categories string[] A list of all AccessPoint categories to be added to the already applied ones. Exceptions ConflictException One or more of the categories would cause a conflict with the existing AccessPoints in AppList. OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. RemoveAccessPointCategories(AppEntry, params string[]) Removes a category of already applied AccessPoints for an application. void RemoveAccessPointCategories(AppEntry appEntry, params string[] categories) Parameters appEntry AppEntry The application being integrated. categories string[] A list of all AccessPoint categories to be removed from the already applied ones. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.IIntegrationManager.html": { + "href": "api/ZeroInstall.DesktopIntegration.IIntegrationManager.html", + "title": "Interface IIntegrationManager | Zero Install .NET API", + "keywords": "Interface IIntegrationManager Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Manages an AppList and desktop integration via AccessPoints. public interface IIntegrationManager Properties AppList Stores a list of applications and their desktop integrations. Only use for read-access externally! Use this class' methods for any modifications. AppList AppList { get; } Property Value AppList MachineWide Apply operations machine-wide instead of just for the current user. bool MachineWide { get; } Property Value bool Methods AddAccessPoints(AppEntry, Feed, IEnumerable) Applies AccessPoints for an application. void AddAccessPoints(AppEntry appEntry, Feed feed, IEnumerable accessPoints) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. accessPoints IEnumerable The access points to apply. Exceptions OperationCanceledException The user canceled the task. ConflictException One or more of the accessPoints would cause a conflict with the existing AccessPoints in AppList. WebException A problem occurred while downloading additional data (such as icons). IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. AddApp(string, Requirements, Feed) Creates a new named AppEntry and adds it to the AppList. AppEntry AddApp(string petName, Requirements requirements, Feed feed) Parameters petName string The user-defined pet-name of the application. requirements Requirements The requirements describing the application to add. feed Feed The feed providing additional metadata, capabilities, etc. for the application. Returns AppEntry The newly created application entry (already added to AppList). Exceptions InvalidOperationException An application with the same petName is already in the list. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. AddApp(FeedTarget) Creates a new unnamed AppEntry and adds it to the AppList. AppEntry AddApp(FeedTarget target) Parameters target FeedTarget The application to add. Returns AppEntry The newly created application entry (already added to AppList). Exceptions InvalidOperationException The application is already in the list. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. RemoveAccessPoints(AppEntry, IEnumerable) Removes already applied AccessPoints for an application. void RemoveAccessPoints(AppEntry appEntry, IEnumerable accessPoints) Parameters appEntry AppEntry The application being integrated. accessPoints IEnumerable The access points to unapply. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. RemoveApp(AppEntry) Removes an AppEntry from the AppList while unapplying any remaining AccessPoints. void RemoveApp(AppEntry appEntry) Parameters appEntry AppEntry The application to remove. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Repair(Converter) Reapplies all AccessPoints for all AppEntrys. void Repair(Converter feedRetriever) Parameters feedRetriever Converter Callback method used to retrieve additional Feeds on demand. Exceptions OperationCanceledException The user canceled the task. ConflictException The AppList has inner conflicts. WebException A problem occurred while downloading additional data (such as icons). IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. UpdateApp(AppEntry, Feed) Updates an AppEntry with new metadata and capabilities from a Feed. This may unapply and remove some existing AccessPoints. void UpdateApp(AppEntry appEntry, Feed feed) Parameters appEntry AppEntry The application entry to update. feed Feed The feed providing additional metadata, capabilities, etc. for the application. UpdateApp(AppEntry, Feed, Requirements) Updates a named AppEntry with new Requirements. void UpdateApp(AppEntry appEntry, Feed feed, Requirements requirements) Parameters appEntry AppEntry The application entry to update. feed Feed The feed providing additional metadata, capabilities, etc. for the application. requirements Requirements The new requirements to apply to the app." + }, + "api/ZeroInstall.DesktopIntegration.IconStores.html": { + "href": "api/ZeroInstall.DesktopIntegration.IconStores.html", + "title": "Class IconStores | Zero Install .NET API", + "keywords": "Class IconStores Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Provides IIconStore instances. public static class IconStores Inheritance object IconStores Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Cache(Config, ITaskHandler) Provides icon files for display in table- or tile-like GUIs. Files may be discarded later. public static IIconStore Cache(Config config, ITaskHandler handler) Parameters config Config handler ITaskHandler Returns IIconStore Exceptions IOException A problem occurred while creating a directory. UnauthorizedAccessException Creating a directory is not permitted. DesktopIntegration(Config, ITaskHandler, bool) Provides icon files for use with desktop integration. Files will remain persisted. public static IIconStore DesktopIntegration(Config config, ITaskHandler handler, bool machineWide) Parameters config Config handler ITaskHandler machineWide bool Returns IIconStore Exceptions IOException A problem occurred while creating a directory. UnauthorizedAccessException Creating a directory is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.IntegrationManager.html": { + "href": "api/ZeroInstall.DesktopIntegration.IntegrationManager.html", + "title": "Class IntegrationManager | Zero Install .NET API", + "keywords": "Class IntegrationManager Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Manages an AppList and desktop integration via AccessPoints. [MustDisposeResource] public class IntegrationManager : IntegrationManagerBase, IDisposable, IIntegrationManager Inheritance object ManagerBase IntegrationManagerBase IntegrationManager Implements IDisposable IIntegrationManager Derived CategoryIntegrationManager SyncIntegrationManager Inherited Members IntegrationManagerBase.AppList IntegrationManagerBase.AddApp(FeedTarget) IntegrationManagerBase.AddApp(string, Requirements, Feed) IntegrationManagerBase.RemoveApp(AppEntry) IntegrationManagerBase.UpdateApp(AppEntry, Feed) IntegrationManagerBase.UpdateApp(AppEntry, Feed, Requirements) IntegrationManagerBase.AddAccessPoints(AppEntry, Feed, IEnumerable) IntegrationManagerBase.RemoveAccessPoints(AppEntry, IEnumerable) IntegrationManagerBase.Repair(Converter) ManagerBase.Handler ManagerBase.MachineWide ManagerBase.AcquireMutex() ManagerBase.Dispose() object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks To prevent race-conditions there may only be one desktop integration class instance active at any given time. This class acquires a mutex upon calling its constructor and releases it upon calling Dispose(). Constructors IntegrationManager(Config, ITaskHandler, bool) Creates a new integration manager using the default AppList (creating a new one if missing). Performs Mutex-based locking! public IntegrationManager(Config config, ITaskHandler handler, bool machineWide = false) Parameters config Config User settings controlling network behaviour. handler ITaskHandler A callback object used when the user is to be informed about the progress of long-running operations such as downloads. machineWide bool Apply operations machine-wide instead of just for the current user. Exceptions IOException A problem occurred while accessing the AppList file. UnauthorizedAccessException Read or write access to the AppList file is not permitted or another desktop integration class is currently active. InvalidDataException A problem occurred while deserializing an XML file. Fields AppListPath The storage location of the AppList file. protected readonly string AppListPath Field Value string ChangedWindowMessageID The window message ID (for use with BroadcastMessage(int)) that signals integration changes to interested observers. public static readonly int ChangedWindowMessageID Field Value int Config User settings controlling network behaviour. protected readonly Config Config Field Value Config Properties MutexName The name of the cross-process mutex used to signal that a desktop integration process class is currently active. protected override string MutexName { get; } Property Value string Methods AddAccessPointsInternal(AppEntry, Feed, IReadOnlyCollection) Applies AccessPoints for an application. protected override void AddAccessPointsInternal(AppEntry appEntry, Feed feed, IReadOnlyCollection accessPoints) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. accessPoints IReadOnlyCollection The access points to apply. Exceptions ArgumentException Entries from appEntry is the same reference as accessPoints. OperationCanceledException The user canceled the task. KeyNotFoundException An AccessPoint reference to a Capability is invalid. ConflictException One or more of the accessPoints would cause a conflict with the existing AccessPoints in AppList. WebException A problem occurred while downloading additional data (such as icons). IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. AddAppInternal(string, Requirements, Feed) Creates a new named AppEntry and adds it to the AppList. protected override AppEntry AddAppInternal(string petName, Requirements requirements, Feed feed) Parameters petName string The user-defined pet-name of the application. requirements Requirements The requirements describing the application to add. feed Feed The feed providing additional metadata, capabilities, etc. for the application. Returns AppEntry The newly created application entry (already added to AppList). Exceptions InvalidOperationException An application with the same petName is already in the list. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. AddAppInternal(AppEntry, Converter) Creates a new AppEntry based on an existing prototype (applying any AccessPoints) and adds it to the AppList. protected override void AddAppInternal(AppEntry prototype, Converter feedRetriever) Parameters prototype AppEntry An existing AppEntry to use as a prototype. feedRetriever Converter Callback method used to retrieve additional Feeds on demand. AddAppInternal(FeedTarget) Creates a new unnamed AppEntry and adds it to the AppList. protected override AppEntry AddAppInternal(FeedTarget target) Parameters target FeedTarget The application to add. Returns AppEntry The newly created application entry (already added to AppList). Exceptions InvalidOperationException The application is already in the list. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Finish() To be called after integration operations have been completed to inform the desktop environment and save the AppList. protected override void Finish() GetDir(bool, params string[]) Returns a path for a directory that can be used for desktop integration. public static string GetDir(bool machineWide, params string[] resource) Parameters machineWide bool true if the directory should be machine-wide and machine-specific instead of roaming with the user profile. resource string[] The directory name of the resource to be stored. Returns string A fully qualified directory path. The directory is guaranteed to already exist. Remarks If a new directory is created with machineWide set to true on Windows, ACLs are set to deny write access for non-Administrator users. Exceptions IOException A problem occurred while creating a directory. UnauthorizedAccessException Creating a directory is not permitted. RemoveAccessPointsInternal(AppEntry, IEnumerable) Removes already applied AccessPoints for an application. protected override void RemoveAccessPointsInternal(AppEntry appEntry, IEnumerable accessPoints) Parameters appEntry AppEntry The AppEntry containing the accessPoints. accessPoints IEnumerable The access points to unapply. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. RemoveAppInternal(AppEntry) Removes an AppEntry from the AppList while unapplying any remaining AccessPoints. protected override void RemoveAppInternal(AppEntry appEntry) Parameters appEntry AppEntry The application to remove. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. RepairAppInternal(AppEntry, Feed) Reapplies all AccessPoints for a specific AppEntry. protected override void RepairAppInternal(AppEntry appEntry, Feed feed) Parameters appEntry AppEntry The application entry to repair. feed Feed The feed providing additional metadata, capabilities, etc. for the application. Exceptions OperationCanceledException The user canceled the task. ConflictException appEntry conflicts with the rest of the AppList. WebException A problem occurred while downloading additional data (such as icons). IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. UpdateAppInternal(AppEntry, Feed) Updates an AppEntry with new metadata and capabilities from a Feed. This may unapply and remove some existing AccessPoints. protected override void UpdateAppInternal(AppEntry appEntry, Feed feed) Parameters appEntry AppEntry The application entry to update. feed Feed The feed providing additional metadata, capabilities, etc. for the application. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid." + }, + "api/ZeroInstall.DesktopIntegration.IntegrationManagerBase.html": { + "href": "api/ZeroInstall.DesktopIntegration.IntegrationManagerBase.html", + "title": "Class IntegrationManagerBase | Zero Install .NET API", + "keywords": "Class IntegrationManagerBase Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Base class for IIntegrationManager implementations using template methods. [MustDisposeResource] public abstract class IntegrationManagerBase : ManagerBase, IDisposable, IIntegrationManager Inheritance object ManagerBase IntegrationManagerBase Implements IDisposable IIntegrationManager Derived IntegrationManager Inherited Members ManagerBase.Handler ManagerBase.MachineWide ManagerBase.MutexName ManagerBase.AcquireMutex() ManagerBase.Dispose() object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors IntegrationManagerBase(ITaskHandler, bool) Base class for IIntegrationManager implementations using template methods. protected IntegrationManagerBase(ITaskHandler handler, bool machineWide = false) Parameters handler ITaskHandler A callback object used when the user is to be informed about the progress of long-running operations such as downloads. machineWide bool Apply operations machine-wide instead of just for the current user. Exceptions IOException A problem occurred while accessing the AppList file. UnauthorizedAccessException Read or write access to the AppList file is not permitted or another desktop integration class is currently active. InvalidDataException A problem occurred while deserializing an XML file. Properties AppList Stores a list of applications and their desktop integrations. Only use for read-access externally! Use this class' methods for any modifications. public AppList AppList { get; protected init; } Property Value AppList Exceptions IOException A problem occurred while accessing the AppList file. UnauthorizedAccessException Read or write access to the AppList file is not permitted or another desktop integration class is currently active. InvalidDataException A problem occurred while deserializing an XML file. Methods AddAccessPoints(AppEntry, Feed, IEnumerable) Applies AccessPoints for an application. public void AddAccessPoints(AppEntry appEntry, Feed feed, IEnumerable accessPoints) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. accessPoints IEnumerable The access points to apply. Exceptions OperationCanceledException The user canceled the task. ConflictException One or more of the accessPoints would cause a conflict with the existing AccessPoints in AppList. WebException A problem occurred while downloading additional data (such as icons). IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. AddAccessPointsInternal(AppEntry, Feed, IReadOnlyCollection) Applies AccessPoints for an application. protected abstract void AddAccessPointsInternal(AppEntry appEntry, Feed feed, IReadOnlyCollection accessPoints) Parameters appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. accessPoints IReadOnlyCollection The access points to apply. Exceptions ArgumentException Entries from appEntry is the same reference as accessPoints. OperationCanceledException The user canceled the task. KeyNotFoundException An AccessPoint reference to a Capability is invalid. ConflictException One or more of the accessPoints would cause a conflict with the existing AccessPoints in AppList. WebException A problem occurred while downloading additional data (such as icons). IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. AddApp(string, Requirements, Feed) Creates a new named AppEntry and adds it to the AppList. public AppEntry AddApp(string petName, Requirements requirements, Feed feed) Parameters petName string The user-defined pet-name of the application. requirements Requirements The requirements describing the application to add. feed Feed The feed providing additional metadata, capabilities, etc. for the application. Returns AppEntry The newly created application entry (already added to AppList). Exceptions InvalidOperationException An application with the same petName is already in the list. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. AddApp(FeedTarget) Creates a new unnamed AppEntry and adds it to the AppList. public AppEntry AddApp(FeedTarget target) Parameters target FeedTarget The application to add. Returns AppEntry The newly created application entry (already added to AppList). Exceptions InvalidOperationException The application is already in the list. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. AddAppInternal(string, Requirements, Feed) Creates a new named AppEntry and adds it to the AppList. protected abstract AppEntry AddAppInternal(string petName, Requirements requirements, Feed feed) Parameters petName string The user-defined pet-name of the application. requirements Requirements The requirements describing the application to add. feed Feed The feed providing additional metadata, capabilities, etc. for the application. Returns AppEntry The newly created application entry (already added to AppList). Exceptions InvalidOperationException An application with the same petName is already in the list. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. AddAppInternal(AppEntry, Converter) Creates a new AppEntry based on an existing prototype (applying any AccessPoints) and adds it to the AppList. protected abstract void AddAppInternal(AppEntry prototype, Converter feedRetriever) Parameters prototype AppEntry An existing AppEntry to use as a prototype. feedRetriever Converter Callback method used to retrieve additional Feeds on demand. Exceptions IOException A problem occurred while accessing the AppList file. UnauthorizedAccessException Read or write access to the AppList file is not permitted or another desktop integration class is currently active. InvalidDataException A problem occurred while deserializing an XML file. AddAppInternal(FeedTarget) Creates a new unnamed AppEntry and adds it to the AppList. protected abstract AppEntry AddAppInternal(FeedTarget target) Parameters target FeedTarget The application to add. Returns AppEntry The newly created application entry (already added to AppList). Exceptions InvalidOperationException The application is already in the list. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Finish() To be called after integration operations have been completed to inform the desktop environment and save the AppList. protected abstract void Finish() Exceptions IOException A problem occurred while accessing the AppList file. UnauthorizedAccessException Read or write access to the AppList file is not permitted or another desktop integration class is currently active. InvalidDataException A problem occurred while deserializing an XML file. RemoveAccessPoints(AppEntry, IEnumerable) Removes already applied AccessPoints for an application. public void RemoveAccessPoints(AppEntry appEntry, IEnumerable accessPoints) Parameters appEntry AppEntry The application being integrated. accessPoints IEnumerable The access points to unapply. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. RemoveAccessPointsInternal(AppEntry, IEnumerable) Removes already applied AccessPoints for an application. protected abstract void RemoveAccessPointsInternal(AppEntry appEntry, IEnumerable accessPoints) Parameters appEntry AppEntry The AppEntry containing the accessPoints. accessPoints IEnumerable The access points to unapply. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. RemoveApp(AppEntry) Removes an AppEntry from the AppList while unapplying any remaining AccessPoints. public void RemoveApp(AppEntry appEntry) Parameters appEntry AppEntry The application to remove. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. RemoveAppInternal(AppEntry) Removes an AppEntry from the AppList while unapplying any remaining AccessPoints. protected abstract void RemoveAppInternal(AppEntry appEntry) Parameters appEntry AppEntry The application to remove. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid. IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Repair(Converter) Reapplies all AccessPoints for all AppEntrys. public void Repair(Converter feedRetriever) Parameters feedRetriever Converter Callback method used to retrieve additional Feeds on demand. Exceptions OperationCanceledException The user canceled the task. ConflictException The AppList has inner conflicts. WebException A problem occurred while downloading additional data (such as icons). IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. RepairAppInternal(AppEntry, Feed) Reapplies all AccessPoints for a specific AppEntry. protected abstract void RepairAppInternal(AppEntry appEntry, Feed feed) Parameters appEntry AppEntry The application entry to repair. feed Feed The feed providing additional metadata, capabilities, etc. for the application. Exceptions OperationCanceledException The user canceled the task. ConflictException appEntry conflicts with the rest of the AppList. WebException A problem occurred while downloading additional data (such as icons). IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. UpdateApp(AppEntry, Feed) Updates an AppEntry with new metadata and capabilities from a Feed. This may unapply and remove some existing AccessPoints. public void UpdateApp(AppEntry appEntry, Feed feed) Parameters appEntry AppEntry The application entry to update. feed Feed The feed providing additional metadata, capabilities, etc. for the application. Exceptions IOException A problem occurred while accessing the AppList file. UnauthorizedAccessException Read or write access to the AppList file is not permitted or another desktop integration class is currently active. InvalidDataException A problem occurred while deserializing an XML file. UpdateApp(AppEntry, Feed, Requirements) Updates a named AppEntry with new Requirements. public void UpdateApp(AppEntry appEntry, Feed feed, Requirements requirements) Parameters appEntry AppEntry The application entry to update. feed Feed The feed providing additional metadata, capabilities, etc. for the application. requirements Requirements The new requirements to apply to the app. Exceptions IOException A problem occurred while accessing the AppList file. UnauthorizedAccessException Read or write access to the AppList file is not permitted or another desktop integration class is currently active. InvalidDataException A problem occurred while deserializing an XML file. UpdateAppInternal(AppEntry, Feed) Updates an AppEntry with new metadata and capabilities from a Feed. This may unapply and remove some existing AccessPoints. protected abstract void UpdateAppInternal(AppEntry appEntry, Feed feed) Parameters appEntry AppEntry The application entry to update. feed Feed The feed providing additional metadata, capabilities, etc. for the application. Exceptions KeyNotFoundException An AccessPoint reference to a Capability is invalid." + }, + "api/ZeroInstall.DesktopIntegration.Suggest.html": { + "href": "api/ZeroInstall.DesktopIntegration.Suggest.html", + "title": "Class Suggest | Zero Install .NET API", + "keywords": "Class Suggest Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Suggests suitable default AccessPoints for specific Feeds. public static class Suggest Inheritance object Suggest Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Aliases(Feed) Returns a list of suitable default AppAliass. public static IEnumerable Aliases(Feed feed) Parameters feed Feed Returns IEnumerable AutoStart(Feed) Returns a list of suitable default AutoStart(Feed)s. public static IEnumerable AutoStart(Feed feed) Parameters feed Feed Returns IEnumerable DesktopIcons(Feed) Returns a list of suitable default DesktopIcons. public static IEnumerable DesktopIcons(Feed feed) Parameters feed Feed Returns IEnumerable MenuEntries(Feed) Returns a list of suitable default MenuEntrys. public static IEnumerable MenuEntries(Feed feed) Parameters feed Feed Returns IEnumerable SendTo(Feed) Returns a list of suitable default SendTo(Feed)s. public static IEnumerable SendTo(Feed feed) Parameters feed Feed Returns IEnumerable" + }, + "api/ZeroInstall.DesktopIntegration.SyncIntegrationManager.html": { + "href": "api/ZeroInstall.DesktopIntegration.SyncIntegrationManager.html", + "title": "Class SyncIntegrationManager | Zero Install .NET API", + "keywords": "Class SyncIntegrationManager Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Synchronizes the AppList with other computers. [MustDisposeResource] public class SyncIntegrationManager : IntegrationManager, IDisposable, IIntegrationManager Inheritance object ManagerBase IntegrationManagerBase IntegrationManager SyncIntegrationManager Implements IDisposable IIntegrationManager Inherited Members IntegrationManager.MutexName IntegrationManager.ChangedWindowMessageID IntegrationManager.Config IntegrationManager.GetDir(bool, params string[]) IntegrationManager.AppListPath IntegrationManager.AddAppInternal(FeedTarget) IntegrationManager.AddAppInternal(string, Requirements, Feed) IntegrationManager.AddAppInternal(AppEntry, Converter) IntegrationManager.RemoveAppInternal(AppEntry) IntegrationManager.UpdateAppInternal(AppEntry, Feed) IntegrationManager.AddAccessPointsInternal(AppEntry, Feed, IReadOnlyCollection) IntegrationManager.RemoveAccessPointsInternal(AppEntry, IEnumerable) IntegrationManager.RepairAppInternal(AppEntry, Feed) IntegrationManager.Finish() IntegrationManagerBase.AppList IntegrationManagerBase.AddApp(FeedTarget) IntegrationManagerBase.AddApp(string, Requirements, Feed) IntegrationManagerBase.RemoveApp(AppEntry) IntegrationManagerBase.UpdateApp(AppEntry, Feed) IntegrationManagerBase.UpdateApp(AppEntry, Feed, Requirements) IntegrationManagerBase.AddAccessPoints(AppEntry, Feed, IEnumerable) IntegrationManagerBase.RemoveAccessPoints(AppEntry, IEnumerable) IntegrationManagerBase.Repair(Converter) ManagerBase.Handler ManagerBase.MachineWide ManagerBase.AcquireMutex() object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks To prevent race-conditions there may only be one desktop integration class instance active at any given time. This class acquires a mutex upon calling its constructor and releases it upon calling Dispose(). Constructors SyncIntegrationManager(Config, Converter, ITaskHandler, bool) Creates a new sync manager. Performs Mutex-based locking! public SyncIntegrationManager(Config config, Converter feedRetriever, ITaskHandler handler, bool machineWide = false) Parameters config Config Configuration for communicating with a sync server. feedRetriever Converter Callback method used to retrieve additional Feeds on demand. handler ITaskHandler A callback object used when the user is to be informed about the progress of long-running operations such as downloads. machineWide bool Apply operations machine-wide instead of just for the current user. Exceptions IOException A problem occurred while accessing the AppList file. UnauthorizedAccessException Read or write access to the AppList file is not permitted or another desktop integration class is currently active. InvalidDataException A problem occurred while deserializing an XML file. Fields AppListLastSyncSuffix The suffix added to the AppList path to store a copy of the state at the last sync point. public const string AppListLastSyncSuffix = \".last-sync\" Field Value string Methods Dispose() Releases the mutex. public override void Dispose() Sync(SyncResetMode) Synchronize the AppList with the sync server and (un)apply AccessPoints accordingly. public void Sync(SyncResetMode resetMode = SyncResetMode.None) Parameters resetMode SyncResetMode Controls how synchronization data is reset. Exceptions OperationCanceledException The user canceled the task. InvalidDataException A problem occurred while deserializing an XML file or the specified crypto key was wrong. KeyNotFoundException An AccessPoint reference to a Capability is invalid. ConflictException One or more new AccessPoint would cause a conflict with the existing AccessPoints in AppList. WebException A problem occurred while communicating with the sync server or while downloading additional data (such as icons). IOException A problem occurs while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.SyncRaceException.html": { + "href": "api/ZeroInstall.DesktopIntegration.SyncRaceException.html", + "title": "Class SyncRaceException | Zero Install .NET API", + "keywords": "Class SyncRaceException Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Multiple computers are trying to sync with the same account at the same time. public class SyncRaceException : WebException, ISerializable Inheritance object Exception SystemException InvalidOperationException WebException SyncRaceException Implements ISerializable Inherited Members WebException.Response WebException.Status Exception.GetBaseException() Exception.GetType() Exception.ToString() Exception.Data Exception.HelpLink Exception.HResult Exception.InnerException Exception.Message Exception.Source Exception.StackTrace Exception.TargetSite Exception.SerializeObjectState object.Equals(object) object.Equals(object, object) object.GetHashCode() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods WebExceptionExtensions.ShouldTryMirror(WebException, Uri) Constructors SyncRaceException() public SyncRaceException()" + }, + "api/ZeroInstall.DesktopIntegration.SyncResetMode.html": { + "href": "api/ZeroInstall.DesktopIntegration.SyncResetMode.html", + "title": "Enum SyncResetMode | Zero Install .NET API", + "keywords": "Enum SyncResetMode Namespace ZeroInstall.DesktopIntegration Assembly ZeroInstall.DesktopIntegration.dll Controls how synchronization data is reset by Sync(SyncResetMode) public enum SyncResetMode Fields Client = 1 Replace all data on the client with data from the server. None = 0 Merge data from client and server normally. Server = 2 Replace all data on the server with data from the client." + }, + "api/ZeroInstall.DesktopIntegration.Unix.AppAlias.html": { + "href": "api/ZeroInstall.DesktopIntegration.Unix.AppAlias.html", + "title": "Class AppAlias | Zero Install .NET API", + "keywords": "Class AppAlias Namespace ZeroInstall.DesktopIntegration.Unix Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying AppAlias on Unix systems. public static class AppAlias Inheritance object AppAlias Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Create(FeedTarget, string?, string, IIconStore, bool) Creates an application alias in the current system. public static void Create(FeedTarget target, string? command, string aliasName, IIconStore iconStore, bool machineWide) Parameters target FeedTarget The application being integrated. command string The command within target the alias shall point to; can be null. aliasName string The name of the alias to be created. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Create the alias machine-wide instead of just for the current user. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem is not permitted. Remove(string, bool) Removes an application alias from the current system. public static void Remove(string aliasName, bool machineWide) Parameters aliasName string The name of the alias to be removed. machineWide bool The alias was created machine-wide instead of just for the current user. Exceptions IOException A problem occurred while writing to the filesystem. UnauthorizedAccessException Write access to the filesystem is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Unix.ContextMenu.html": { + "href": "api/ZeroInstall.DesktopIntegration.Unix.ContextMenu.html", + "title": "Class ContextMenu | Zero Install .NET API", + "keywords": "Class ContextMenu Namespace ZeroInstall.DesktopIntegration.Unix Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying ContextMenu and ContextMenu on GNOME systems. public static class ContextMenu Inheritance object ContextMenu Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Apply(FeedTarget, ContextMenu, IIconStore, bool) Adds a context menu entry to the current system. public static void Apply(FeedTarget target, ContextMenu contextMenu, IIconStore iconStore, bool machineWide) Parameters target FeedTarget The application being integrated. contextMenu ContextMenu The context menu entry to add. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Add the context menu entry machine-wide instead of just for the current user. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem is not permitted. Remove(ContextMenu, bool) Removes a context menu entry from the current system. public static void Remove(ContextMenu contextMenu, bool machineWide) Parameters contextMenu ContextMenu The context menu entry to remove. machineWide bool Remove the context menu entry machine-wide instead of just for the current user. Exceptions IOException A problem occurred while writing to the filesystem. UnauthorizedAccessException Write access to the filesystem is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Unix.DefaultProgram.html": { + "href": "api/ZeroInstall.DesktopIntegration.Unix.DefaultProgram.html", + "title": "Class DefaultProgram | Zero Install .NET API", + "keywords": "Class DefaultProgram Namespace ZeroInstall.DesktopIntegration.Unix Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying DefaultProgram and DefaultProgram on GNOME or KDE systems. public static class DefaultProgram Inheritance object DefaultProgram Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Register(FeedTarget, DefaultProgram, IIconStore, bool, bool) Registers an application as a candidate for a default program for some service in the current system. public static void Register(FeedTarget target, DefaultProgram defaultProgram, IIconStore iconStore, bool machineWide, bool accessPoint = false) Parameters target FeedTarget The application being integrated. defaultProgram DefaultProgram The default program information to be registered. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the registration machine-wide instead of just for the current user. accessPoint bool Indicates that the program should be set as the current default for the service it provides. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem is not permitted. Unregister(DefaultProgram, bool, bool) Unregisters an application as a candidate for a default program in the current system. This can only be applied machine-wide, not per user. public static void Unregister(DefaultProgram defaultProgram, bool machineWide, bool accessPoint = false) Parameters defaultProgram DefaultProgram The default program information to be removed. machineWide bool Apply the registration machine-wide instead of just for the current user. accessPoint bool Indicates that the program was set as the current default for the service it provides. Exceptions IOException A problem occurred while writing to the filesystem. UnauthorizedAccessException Write access to the filesystem is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Unix.FileType.html": { + "href": "api/ZeroInstall.DesktopIntegration.Unix.FileType.html", + "title": "Class FileType | Zero Install .NET API", + "keywords": "Class FileType Namespace ZeroInstall.DesktopIntegration.Unix Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying FileType and FileType on FreeDesktop.org systems. public static class FileType Inheritance object FileType Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Register(FeedTarget, FileType, IIconStore, bool, bool) Registers a file type in the current system. public static void Register(FeedTarget target, FileType fileType, IIconStore iconStore, bool machineWide, bool accessPoint = false) Parameters target FeedTarget The application being integrated. fileType FileType The file type to register. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Register the file type machine-wide instead of just for the current user. accessPoint bool Indicates that the file associations shall become default handlers for their respective types. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem is not permitted. Unregister(FileType, bool, bool) Unregisters a file type in the current system. public static void Unregister(FileType fileType, bool machineWide, bool accessPoint = false) Parameters fileType FileType The file type to remove. machineWide bool Unregister the file type machine-wide instead of just for the current user. accessPoint bool Indicates that the file associations were default handlers for their respective types. Exceptions IOException A problem occurred while writing to the filesystem. UnauthorizedAccessException Write access to the filesystem is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Unix.FreeDesktop.html": { + "href": "api/ZeroInstall.DesktopIntegration.Unix.FreeDesktop.html", + "title": "Class FreeDesktop | Zero Install .NET API", + "keywords": "Class FreeDesktop Namespace ZeroInstall.DesktopIntegration.Unix Assembly ZeroInstall.DesktopIntegration.dll Utility class for creating and modifying FreeDesktop.org Desktop Entries. public static class FreeDesktop Inheritance object FreeDesktop Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Create(DesktopIcon, FeedTarget, IIconStore, bool) public static void Create(DesktopIcon desktopIcon, FeedTarget target, IIconStore iconStore, bool machineWide) Parameters desktopIcon DesktopIcon target FeedTarget iconStore IIconStore machineWide bool Create(MenuEntry, FeedTarget, IIconStore, bool) public static void Create(MenuEntry menuEntry, FeedTarget target, IIconStore iconStore, bool machineWide) Parameters menuEntry MenuEntry target FeedTarget iconStore IIconStore machineWide bool Remove(DesktopIcon, bool) public static void Remove(DesktopIcon desktopIcon, bool machineWide) Parameters desktopIcon DesktopIcon machineWide bool Remove(MenuEntry, bool) public static void Remove(MenuEntry menuEntry, bool machineWide) Parameters menuEntry MenuEntry machineWide bool" + }, + "api/ZeroInstall.DesktopIntegration.Unix.UrlProtocol.html": { + "href": "api/ZeroInstall.DesktopIntegration.Unix.UrlProtocol.html", + "title": "Class UrlProtocol | Zero Install .NET API", + "keywords": "Class UrlProtocol Namespace ZeroInstall.DesktopIntegration.Unix Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying UrlProtocol and UrlProtocol on GNOME systems. public static class UrlProtocol Inheritance object UrlProtocol Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Register(FeedTarget, UrlProtocol, IIconStore, bool, bool) Registers a URL protocol in the current system. public static void Register(FeedTarget target, UrlProtocol urlProtocol, IIconStore iconStore, bool machineWide, bool accessPoint = false) Parameters target FeedTarget The application being integrated. urlProtocol UrlProtocol The URL protocol to register. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Register the URL protocol machine-wide instead of just for the current user. accessPoint bool Indicates that the handler shall become the default handler for the protocol. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem is not permitted. Unregister(UrlProtocol, bool, bool) Unregisters a URL protocol in the current system. public static void Unregister(UrlProtocol urlProtocol, bool machineWide, bool accessPoint = false) Parameters urlProtocol UrlProtocol The URL protocol to remove. machineWide bool Unregister the URL protocol machine-wide instead of just for the current user. accessPoint bool Indicates that the handler was the default handler for the protocol. Exceptions IOException A problem occurred while writing to the filesystem. UnauthorizedAccessException Write access to the filesystem is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Unix.html": { + "href": "api/ZeroInstall.DesktopIntegration.Unix.html", + "title": "Namespace ZeroInstall.DesktopIntegration.Unix | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.DesktopIntegration.Unix Desktop integration code for Unix-like systems (e.g. Linux). Classes AppAlias Contains control logic for applying AppAlias on Unix systems. ContextMenu Contains control logic for applying ContextMenu and ContextMenu on GNOME systems. DefaultProgram Contains control logic for applying DefaultProgram and DefaultProgram on GNOME or KDE systems. FileType Contains control logic for applying FileType and FileType on FreeDesktop.org systems. FreeDesktop Utility class for creating and modifying FreeDesktop.org Desktop Entries. UrlProtocol Contains control logic for applying UrlProtocol and UrlProtocol on GNOME systems." + }, + "api/ZeroInstall.DesktopIntegration.ViewModel.AutoPlayModel.html": { + "href": "api/ZeroInstall.DesktopIntegration.ViewModel.AutoPlayModel.html", + "title": "Class AutoPlayModel | Zero Install .NET API", + "keywords": "Class AutoPlayModel Namespace ZeroInstall.DesktopIntegration.ViewModel Assembly ZeroInstall.DesktopIntegration.dll Wraps a AutoPlay for data binding. public class AutoPlayModel : IconCapabilityModel Inheritance object CapabilityModel IconCapabilityModel AutoPlayModel Inherited Members IconCapabilityModel.Description CapabilityModel.Capability CapabilityModel.Use CapabilityModel.Changed object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors AutoPlayModel(AutoPlay, bool) public AutoPlayModel(AutoPlay capability, bool used) Parameters capability AutoPlay used bool Properties Events All Events concatenated with \", \". public string Events { get; } Property Value string" + }, + "api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModel.html": { + "href": "api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModel.html", + "title": "Class CapabilityModel | Zero Install .NET API", + "keywords": "Class CapabilityModel Namespace ZeroInstall.DesktopIntegration.ViewModel Assembly ZeroInstall.DesktopIntegration.dll Wraps a DefaultCapability for data binding. public abstract class CapabilityModel Inheritance object CapabilityModel Derived IconCapabilityModel Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors CapabilityModel(DefaultCapability, bool) Creates a new instance. protected CapabilityModel(DefaultCapability capability, bool used) Parameters capability DefaultCapability That shall be wrapped. used bool Indicates whether the Capability was already used. Properties Capability The wrapped Capability. [Browsable(false)] public DefaultCapability Capability { get; } Property Value DefaultCapability Changed Indicates whether the Use of the Capability has been changed. [Browsable(false)] public bool Changed { get; } Property Value bool Use Indicates whether the Capability shall be used or not. public bool Use { get; set; } Property Value bool" + }, + "api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModelExtensions.html": { + "href": "api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModelExtensions.html", + "title": "Class CapabilityModelExtensions | Zero Install .NET API", + "keywords": "Class CapabilityModelExtensions Namespace ZeroInstall.DesktopIntegration.ViewModel Assembly ZeroInstall.DesktopIntegration.dll Contains extension methods for CapabilityModelBindingLists. public static class CapabilityModelExtensions Inheritance object CapabilityModelExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods SetAllUse(BindingList, bool) Sets all Use values within a list/model to a specific value. public static void SetAllUse(this BindingList model, bool value) where T : CapabilityModel Parameters model BindingList A model representing the underlying DefaultCapabilitys and their selection states. value bool The value to set. Type Parameters T The specific kind of DefaultAccessPoint to handle." + }, + "api/ZeroInstall.DesktopIntegration.ViewModel.ContextMenuModel.html": { + "href": "api/ZeroInstall.DesktopIntegration.ViewModel.ContextMenuModel.html", + "title": "Class ContextMenuModel | Zero Install .NET API", + "keywords": "Class ContextMenuModel Namespace ZeroInstall.DesktopIntegration.ViewModel Assembly ZeroInstall.DesktopIntegration.dll Wraps a ContextMenu for data binding. public class ContextMenuModel : IconCapabilityModel Inheritance object CapabilityModel IconCapabilityModel ContextMenuModel Inherited Members IconCapabilityModel.Description CapabilityModel.Capability CapabilityModel.Use CapabilityModel.Changed object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ContextMenuModel(ContextMenu, bool) public ContextMenuModel(ContextMenu contextMenu, bool used) Parameters contextMenu ContextMenu used bool Properties Name The name of the first entry in Verbs. public string? Name { get; } Property Value string" + }, + "api/ZeroInstall.DesktopIntegration.ViewModel.DefaultProgramModel.html": { + "href": "api/ZeroInstall.DesktopIntegration.ViewModel.DefaultProgramModel.html", + "title": "Class DefaultProgramModel | Zero Install .NET API", + "keywords": "Class DefaultProgramModel Namespace ZeroInstall.DesktopIntegration.ViewModel Assembly ZeroInstall.DesktopIntegration.dll Wraps a DefaultProgram for data binding. public class DefaultProgramModel : IconCapabilityModel Inheritance object CapabilityModel IconCapabilityModel DefaultProgramModel Inherited Members IconCapabilityModel.Description CapabilityModel.Capability CapabilityModel.Use CapabilityModel.Changed object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors DefaultProgramModel(DefaultProgram, bool) public DefaultProgramModel(DefaultProgram capability, bool used) Parameters capability DefaultProgram used bool Properties Service Returns Service. public string Service { get; } Property Value string" + }, + "api/ZeroInstall.DesktopIntegration.ViewModel.FileTypeModel.html": { + "href": "api/ZeroInstall.DesktopIntegration.ViewModel.FileTypeModel.html", + "title": "Class FileTypeModel | Zero Install .NET API", + "keywords": "Class FileTypeModel Namespace ZeroInstall.DesktopIntegration.ViewModel Assembly ZeroInstall.DesktopIntegration.dll Wraps a FileType for data binding. public class FileTypeModel : IconCapabilityModel Inheritance object CapabilityModel IconCapabilityModel FileTypeModel Inherited Members IconCapabilityModel.Description CapabilityModel.Capability CapabilityModel.Use CapabilityModel.Changed object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors FileTypeModel(FileType, bool) public FileTypeModel(FileType fileType, bool used) Parameters fileType FileType used bool Properties Extensions All Extensions concatenated with \", \". public string Extensions { get; } Property Value string" + }, + "api/ZeroInstall.DesktopIntegration.ViewModel.IconCapabilityModel.html": { + "href": "api/ZeroInstall.DesktopIntegration.ViewModel.IconCapabilityModel.html", + "title": "Class IconCapabilityModel | Zero Install .NET API", + "keywords": "Class IconCapabilityModel Namespace ZeroInstall.DesktopIntegration.ViewModel Assembly ZeroInstall.DesktopIntegration.dll Wraps an IconCapability for data binding. public class IconCapabilityModel : CapabilityModel Inheritance object CapabilityModel IconCapabilityModel Derived AutoPlayModel ContextMenuModel DefaultProgramModel FileTypeModel UrlProtocolModel Inherited Members CapabilityModel.Capability CapabilityModel.Use CapabilityModel.Changed object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors IconCapabilityModel(IconCapability, bool) protected IconCapabilityModel(IconCapability capability, bool used) Parameters capability IconCapability used bool Properties Description Returns the description of the IconCapability dependant on CurrentUICulture. public string Description { get; } Property Value string" + }, + "api/ZeroInstall.DesktopIntegration.ViewModel.IntegrationState.html": { + "href": "api/ZeroInstall.DesktopIntegration.ViewModel.IntegrationState.html", + "title": "Class IntegrationState | Zero Install .NET API", + "keywords": "Class IntegrationState Namespace ZeroInstall.DesktopIntegration.ViewModel Assembly ZeroInstall.DesktopIntegration.dll A View-Model for modifying desktop integration. Provides data-binding lists and applies modifications in bulk. public class IntegrationState Inheritance object IntegrationState Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors IntegrationState(IIntegrationManager, AppEntry, Feed) Creates a new integration state View-Model. public IntegrationState(IIntegrationManager integrationManager, AppEntry appEntry, Feed feed) Parameters integrationManager IIntegrationManager The integration manager used to apply selected integration options. appEntry AppEntry The application being integrated. feed Feed The feed providing additional metadata, icons, etc. for the application. Fields Aliases public readonly BindingList Aliases Field Value BindingList AutoPlay public readonly BindingList AutoPlay Field Value BindingList AutoStarts public readonly BindingList AutoStarts Field Value BindingList ContextMenu public readonly BindingList ContextMenu Field Value BindingList DefaultProgram public readonly BindingList DefaultProgram Field Value BindingList DesktopIcons public readonly BindingList DesktopIcons Field Value BindingList FileTypes public readonly BindingList FileTypes Field Value BindingList MenuEntries public readonly BindingList MenuEntries Field Value BindingList SendTo public readonly BindingList SendTo Field Value BindingList UrlProtocols public readonly BindingList UrlProtocols Field Value BindingList Properties AppEntry The application being integrated. public AppEntry AppEntry { get; } Property Value AppEntry CapabilityRegistration Controls whether CapabilityRegistration is used. public bool CapabilityRegistration { get; set; } Property Value bool Feed The feed providing additional metadata, icons, etc. for the application. public Feed Feed { get; } Property Value Feed Methods ApplyChanges() Applies any changes made to the View-Model to the underlying system. public void ApplyChanges() Exceptions OperationCanceledException The user canceled the task. ConflictException One or more of the new AccessPoints would cause a conflict with the existing AccessPoints in AppList. WebException A problem occurred while downloading additional data (such as icons). IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.ViewModel.UrlProtocolModel.html": { + "href": "api/ZeroInstall.DesktopIntegration.ViewModel.UrlProtocolModel.html", + "title": "Class UrlProtocolModel | Zero Install .NET API", + "keywords": "Class UrlProtocolModel Namespace ZeroInstall.DesktopIntegration.ViewModel Assembly ZeroInstall.DesktopIntegration.dll Wraps a UrlProtocol for data binding. public class UrlProtocolModel : IconCapabilityModel Inheritance object CapabilityModel IconCapabilityModel UrlProtocolModel Inherited Members IconCapabilityModel.Description CapabilityModel.Capability CapabilityModel.Use CapabilityModel.Changed object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors UrlProtocolModel(UrlProtocol, bool) public UrlProtocolModel(UrlProtocol capability, bool used) Parameters capability UrlProtocol used bool Properties KnownPrefixes All KnownPrefixes concatenated with \", \". If no KnownPrefixes is available ID will be returned. public string KnownPrefixes { get; } Property Value string" + }, + "api/ZeroInstall.DesktopIntegration.ViewModel.html": { + "href": "api/ZeroInstall.DesktopIntegration.ViewModel.html", + "title": "Namespace ZeroInstall.DesktopIntegration.ViewModel | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.DesktopIntegration.ViewModel Classes that wrap desktop integration capabilities in a data binding-friendly manner. Classes AutoPlayModel Wraps a AutoPlay for data binding. CapabilityModel Wraps a DefaultCapability for data binding. CapabilityModelExtensions Contains extension methods for CapabilityModelBindingLists. ContextMenuModel Wraps a ContextMenu for data binding. DefaultProgramModel Wraps a DefaultProgram for data binding. FileTypeModel Wraps a FileType for data binding. IconCapabilityModel Wraps an IconCapability for data binding. IntegrationState A View-Model for modifying desktop integration. Provides data-binding lists and applies modifications in bulk. UrlProtocolModel Wraps a UrlProtocol for data binding." + }, + "api/ZeroInstall.DesktopIntegration.Windows.AppAlias.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.AppAlias.html", + "title": "Class AppAlias | Zero Install .NET API", + "keywords": "Class AppAlias Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying AppAlias on Windows systems. public static class AppAlias Inheritance object AppAlias Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields RegKeyAppPaths The HKCU/HKLM registry key for storing application lookup paths. public const string RegKeyAppPaths = \"Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\App Paths\" Field Value string Methods Create(FeedTarget, string?, string, IIconStore, bool) Creates an application alias in the current system. public static void Create(FeedTarget target, string? command, string aliasName, IIconStore iconStore, bool machineWide) Parameters target FeedTarget The application being integrated. command string The command within target the alias shall point to; can be null. aliasName string The name of the alias to be created. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Create the alias machine-wide instead of just for the current user. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. GetStubDir(bool) Returns the path of the directory used to store alias stub EXEs. public static string GetStubDir(bool machineWide) Parameters machineWide bool true for a machine-wide directory; false for a directory just for the current user. Returns string Remove(string, bool) Removes an application alias from the current system. public static void Remove(string aliasName, bool machineWide) Parameters aliasName string The name of the alias to be removed. machineWide bool The alias was created machine-wide instead of just for the current user. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Windows.AppRegistration.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.AppRegistration.html", + "title": "Class AppRegistration | Zero Install .NET API", + "keywords": "Class AppRegistration Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying AppRegistration on Windows systems. public static class AppRegistration Inheritance object AppRegistration Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields RegKeyMachineRegisteredApplications The HKLM registry key for registering applications as candidates for default programs. public const string RegKeyMachineRegisteredApplications = \"SOFTWARE\\\\RegisteredApplications\" Field Value string RegSubKeyFileAssocs The registry subkey containing FileType references. public const string RegSubKeyFileAssocs = \"FileAssociations\" Field Value string RegSubKeyStartMenu The registry subkey containing DefaultProgram references. public const string RegSubKeyStartMenu = \"StartMenu\" Field Value string RegSubKeyUrlAssocs The registry subkey containing UrlProtocol references. public const string RegSubKeyUrlAssocs = \"URLAssociations\" Field Value string RegValueAppDescription The registry value name for the application description. public const string RegValueAppDescription = \"ApplicationDescription\" Field Value string RegValueAppIcon The registry value name for the application icon. public const string RegValueAppIcon = \"ApplicationIcon\" Field Value string RegValueAppName The registry value name for the application name. public const string RegValueAppName = \"ApplicationName\" Field Value string Methods Register(FeedTarget, AppRegistration, IEnumerable, IIconStore, bool) Applies application registration to the current system. public static void Register(FeedTarget target, AppRegistration appRegistration, IEnumerable verbCapabilities, IIconStore iconStore, bool machineWide) Parameters target FeedTarget The application being integrated. appRegistration AppRegistration The registration information to be applied. verbCapabilities IEnumerable The capabilities that the application is to be registered with. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the registration machine-wide instead of just for the current user. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Unregister(AppRegistration, bool) Removes application registration from the current system. public static void Unregister(AppRegistration appRegistration, bool machineWide) Parameters appRegistration AppRegistration The registration information to be removed. machineWide bool Apply the registration machine-wide instead of just for the current user. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Windows.AutoPlay.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.AutoPlay.html", + "title": "Class AutoPlay | Zero Install .NET API", + "keywords": "Class AutoPlay Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying AutoPlay and AutoPlay on Windows systems. public static class AutoPlay Inheritance object AutoPlay Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields RegKeyAssocs The HKCU/HKLM registry key for storing AutoPlay handler associations. public const string RegKeyAssocs = \"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\AutoplayHandlers\\\\EventHandlers\" Field Value string RegKeyChosenAssocs The HKCU registry key for storing user-selected AutoPlay handlers. public const string RegKeyChosenAssocs = \"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\AutoplayHandlers\\\\UserChosenExecuteHandlers\" Field Value string RegKeyHandlers The HKCU/HKLM registry key for storing AutoPlay handlers. public const string RegKeyHandlers = \"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\AutoplayHandlers\\\\Handlers\" Field Value string RegValueDescription The registry value name for storing the description of the AutoPlay action. public const string RegValueDescription = \"Action\" Field Value string RegValueIcon The registry value name for storing the icon for the AutoPlay action. public const string RegValueIcon = \"DefaultIcon\" Field Value string RegValueProgID The registry value name for storing the programmatic identifier to invoke. public const string RegValueProgID = \"InvokeProgID\" Field Value string RegValueProvider The registry value name for storing the name of the application providing the AutoPlay action. public const string RegValueProvider = \"Provider\" Field Value string RegValueVerb The registry value name for storing the name of the verb to invoke. public const string RegValueVerb = \"InvokeVerb\" Field Value string Methods Register(FeedTarget, AutoPlay, IIconStore, bool, bool) Adds an AutoPlay handler registration to the current system. public static void Register(FeedTarget target, AutoPlay autoPlay, IIconStore iconStore, bool machineWide, bool accessPoint = false) Parameters target FeedTarget The application being integrated. autoPlay AutoPlay The AutoPlay handler information to be applied. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Register the handler machine-wide instead of just for the current user. accessPoint bool Indicates that the handler should become the default handler for all Events. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Unregister(AutoPlay, bool, bool) Removes an AutoPlay handler registration from the current system. public static void Unregister(AutoPlay autoPlay, bool machineWide, bool accessPoint = false) Parameters autoPlay AutoPlay The AutoPlay handler information to be removed. machineWide bool Remove the handler machine-wide instead of just for the current user. accessPoint bool Indicates that the handler should was the default handler for all Events. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Windows.ComServer.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.ComServer.html", + "title": "Class ComServer | Zero Install .NET API", + "keywords": "Class ComServer Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying ComServer on Windows systems. public static class ComServer Inheritance object ComServer Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields RegKeyClassesIDs The HKCR registry key for storing COM class IDs. public const string RegKeyClassesIDs = \"CLSID\" Field Value string Methods Register(FeedTarget, ComServer, IIconStore, bool) Registers a COM server in the current system. public static void Register(FeedTarget target, ComServer comServer, IIconStore iconStore, bool machineWide) Parameters target FeedTarget The application being integrated. comServer ComServer The COM server to be registered. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Register the COM server machine-wide instead of just for the current user. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Unregister(ComServer, bool) Unregisters a COM server in the current system. public static void Unregister(ComServer comServer, bool machineWide) Parameters comServer ComServer The COM server to be unregistered. machineWide bool Unregister the COM server machine-wide instead of just for the current user. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Windows.ContextMenu.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.ContextMenu.html", + "title": "Class ContextMenu | Zero Install .NET API", + "keywords": "Class ContextMenu Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying ContextMenu and ContextMenu on Windows systems. public static class ContextMenu Inheritance object ContextMenu Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields Prefix Prepended before programmatic identifiers used by Zero Install in the registry. This prevents conflicts with non-Zero Install installations. public const string Prefix = \"ZeroInstall.ContextMenu.\" Field Value string RegKeyClassesAll The HKCU registry key for registering things for all filesystem objects (files and directories). public const string RegKeyClassesAll = \"AllFilesystemObjects\" Field Value string RegKeyClassesDirectories The HKCU registry key for registering things for all directories. public const string RegKeyClassesDirectories = \"Directory\" Field Value string RegKeyClassesExecutableFiles The HKCU registry key for registering things for different kinds of executable files. public static readonly string[] RegKeyClassesExecutableFiles Field Value string[] RegKeyClassesFiles The HKCU registry key for registering things for all files. public const string RegKeyClassesFiles = \"*\" Field Value string Methods Apply(FeedTarget, ContextMenu, IIconStore, bool) Adds a context menu entry to the current system. public static void Apply(FeedTarget target, ContextMenu contextMenu, IIconStore iconStore, bool machineWide) Parameters target FeedTarget The application being integrated. contextMenu ContextMenu The context menu entry to add. iconStore IIconStore A callback object used when the user is to be informed about the progress of long-running operations such as downloads. machineWide bool Add the context menu entry machine-wide instead of just for the current user. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Remove(ContextMenu, bool) Removes a context menu entry from the current system. public static void Remove(ContextMenu contextMenu, bool machineWide) Parameters contextMenu ContextMenu The context menu entry to remove. machineWide bool Remove the context menu entry machine-wide instead of just for the current user. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Windows.DefaultProgram.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.DefaultProgram.html", + "title": "Class DefaultProgram | Zero Install .NET API", + "keywords": "Class DefaultProgram Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying DefaultProgram and DefaultProgram on Windows systems. public static class DefaultProgram Inheritance object DefaultProgram Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields RegKeyMachineClients The HKLM registry key for registering applications as clients for specific services. public const string RegKeyMachineClients = \"SOFTWARE\\\\Clients\" Field Value string RegSubKeyInstallInfo The name of the registry subkeys containing information about application installation commands and status. public const string RegSubKeyInstallInfo = \"InstallInfo\" Field Value string RegValueHideIconsCommand The registry value name below RegSubKeyInstallInfo for the command to remove icons/shortcuts to the application. public const string RegValueHideIconsCommand = \"HideIconsCommand\" Field Value string RegValueIconsVisible The registry value name below RegSubKeyInstallInfo for storing whether the application's icons are currently visible. public const string RegValueIconsVisible = \"IconsVisible\" Field Value string RegValueLocalizedName The registry value name for localized name storage. public const string RegValueLocalizedName = \"LocalizedString\" Field Value string RegValueReinstallCommand The registry value name below RegSubKeyInstallInfo for the command to set an application as the default program. public const string RegValueReinstallCommand = \"ReinstallCommand\" Field Value string RegValueShowIconsCommand The registry value name below RegSubKeyInstallInfo for the command to create icons/shortcuts to the application. public const string RegValueShowIconsCommand = \"ShowIconsCommand\" Field Value string Methods Register(FeedTarget, DefaultProgram, IIconStore, bool) Registers an application as a candidate for a default program for some service in the current system. This can only be applied machine-wide, not per user. public static void Register(FeedTarget target, DefaultProgram defaultProgram, IIconStore iconStore, bool accessPoint = false) Parameters target FeedTarget The application being integrated. defaultProgram DefaultProgram The default program information to be registered. iconStore IIconStore Stores icon files downloaded from the web as local files. accessPoint bool Indicates that the program should be set as the current default for the service it provides. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Unregister(DefaultProgram, bool) Unregisters an application as a candidate for a default program in the current system. This can only be applied machine-wide, not per user. public static void Unregister(DefaultProgram defaultProgram, bool accessPoint = false) Parameters defaultProgram DefaultProgram The default program information to be removed. accessPoint bool Indicates that the program was set as the current default for the service it provides. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Windows.FileType.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.FileType.html", + "title": "Class FileType | Zero Install .NET API", + "keywords": "Class FileType Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying FileType and FileType on Windows systems. public static class FileType Inheritance object FileType Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields RegSubKeyOpenWith The registry subkey containing \"open with\" ProgID references. public const string RegSubKeyOpenWith = \"OpenWithProgIDs\" Field Value string RegValueContentType The registry value name for MIME type storage. public const string RegValueContentType = \"Content Type\" Field Value string RegValueFriendlyName The registry value name for friendly type name storage. public const string RegValueFriendlyName = \"FriendlyTypeName\" Field Value string RegValuePerceivedType The registry value name for perceived type storage. public const string RegValuePerceivedType = \"PerceivedType\" Field Value string Methods Register(FeedTarget, FileType, IIconStore, bool, bool) Registers a file type in the current system. public static void Register(FeedTarget target, FileType fileType, IIconStore iconStore, bool machineWide, bool accessPoint = false) Parameters target FeedTarget The application being integrated. fileType FileType The file type to register. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Register the file type machine-wide instead of just for the current user. accessPoint bool Indicates that the file associations shall become default handlers for their respective types. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Unregister(FileType, bool, bool) Unregisters a file type in the current system. public static void Unregister(FileType fileType, bool machineWide, bool accessPoint = false) Parameters fileType FileType The file type to remove. machineWide bool Unregister the file type machine-wide instead of just for the current user. accessPoint bool Indicates that the file associations were default handlers for their respective types. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Windows.PathEnv.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.PathEnv.html", + "title": "Class PathEnv | Zero Install .NET API", + "keywords": "Class PathEnv Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Manages the PATH environment variable. public static class PathEnv Inheritance object PathEnv Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods AddDir(string, bool) Adds a directory to the search PATH. public static void AddDir(string directory, bool machineWide) Parameters directory string The directory to add to the search PATH. machineWide bool true to use the machine-wide PATH variable; false for the per-user variant. Get(bool) Returns the current search PATH. public static string[] Get(bool machineWide) Parameters machineWide bool true to use the machine-wide PATH variable; false for the per-user variant. Returns string[] The individual directories listed in the search path. RemoveDir(string, bool) Removes a directory from the search PATH. public static void RemoveDir(string directory, bool machineWide) Parameters directory string The directory to remove from the search PATH. machineWide bool true to use the machine-wide PATH variable; false for the per-user variant. Set(string[], bool) Sets the current search PATH. public static void Set(string[] directories, bool machineWide) Parameters directories string[] The individual directories to list in the search PATH. machineWide bool true to use the machine-wide PATH variable; false for the per-user variant." + }, + "api/ZeroInstall.DesktopIntegration.Windows.Shortcut.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.Shortcut.html", + "title": "Class Shortcut | Zero Install .NET API", + "keywords": "Class Shortcut Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Creates Windows shortcut files (.lnk). public static class Shortcut Inheritance object Shortcut Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Create(string, string, string?, string?, string?, string?) Creates a new Windows shortcut. public static void Create(string path, string targetPath, string? arguments = null, string? iconLocation = null, string? description = null, string? appId = null) Parameters path string The location to place the shortcut at. targetPath string The target path the shortcut shall point to. arguments string Additional arguments to pass to the target; can be null. iconLocation string The path of the icon to use for the shortcut; leave null ot get the icon from targetPath. description string A short human-readable description; can be null. appId string The Application User Model ID; used by Windows to associate shortcuts and pinned taskbar entries with running processes. Create(AutoStart, FeedTarget, IIconStore, bool) Creates a new Windows shortcut in the \"Startup\" menu. public static void Create(AutoStart autoStart, FeedTarget target, IIconStore iconStore, bool machineWide) Parameters autoStart AutoStart Information about the shortcut to be created. target FeedTarget The target the shortcut shall point to. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Create the shortcut machine-wide instead of just for the current user. Create(DesktopIcon, FeedTarget, IIconStore, bool) Creates a new Windows shortcut on the desktop. public static void Create(DesktopIcon desktopIcon, FeedTarget target, IIconStore iconStore, bool machineWide) Parameters desktopIcon DesktopIcon Information about the shortcut to be created. target FeedTarget The target the shortcut shall point to. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Create the shortcut machine-wide instead of just for the current user. Create(MenuEntry, FeedTarget, IIconStore, bool) Creates a new Windows shortcut in the start menu or on the start page. public static void Create(MenuEntry menuEntry, FeedTarget target, IIconStore iconStore, bool machineWide) Parameters menuEntry MenuEntry Information about the shortcut to be created. target FeedTarget The target the shortcut shall point to. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Create the shortcut machine-wide instead of just for the current user. Create(QuickLaunch, FeedTarget, IIconStore) Creates a new Windows shortcut in the quick launch bar. public static void Create(QuickLaunch quickLaunch, FeedTarget target, IIconStore iconStore) Parameters quickLaunch QuickLaunch Information about the shortcut to be created. target FeedTarget The target the shortcut shall point to. iconStore IIconStore Stores icon files downloaded from the web as local files. Create(SendTo, FeedTarget, IIconStore) Creates a new Windows shortcut in the \"Send to\" menu. public static void Create(SendTo sendTo, FeedTarget target, IIconStore iconStore) Parameters sendTo SendTo Information about the shortcut to be created. target FeedTarget The target the shortcut shall point to. iconStore IIconStore Stores icon files downloaded from the web as local files. GetStartMenuPath(string?, string?, bool) Builds a path for a shortcut in the start menu programs folder, optionally appending a category. public static string GetStartMenuPath(string? category, string? name, bool machineWide) Parameters category string The name of the category/directory below the programs folder; can be null. name string The name of the shortcut (without the .lnk ending). machineWide bool true to use the machine-wide start menu; false for the per-user variant. Returns string Exceptions IOException name or category contains invalid characters. Remove(AutoStart, bool) Removes a Windows shortcut from the \"Startup\" menu. public static void Remove(AutoStart autoStart, bool machineWide) Parameters autoStart AutoStart Information about the shortcut to be removed. machineWide bool The shortcut was created machine-wide instead of just for the current user. Remove(DesktopIcon, bool) Removes a Windows shortcut from the desktop. public static void Remove(DesktopIcon desktopIcon, bool machineWide) Parameters desktopIcon DesktopIcon Information about the shortcut to be removed. machineWide bool The shortcut was created machine-wide instead of just for the current user. Remove(MenuEntry, bool) Removes a Windows shortcut from the start menu or on the start page. public static void Remove(MenuEntry menuEntry, bool machineWide) Parameters menuEntry MenuEntry Information about the shortcut to be removed. machineWide bool The shortcut was created machine-wide instead of just for the current user. Remove(QuickLaunch) Removes a Windows shortcut from the quick launch bar. public static void Remove(QuickLaunch quickLaunch) Parameters quickLaunch QuickLaunch Information about the shortcut to be removed. Remove(SendTo) Removes a Windows shortcut from the \"Send to\" menu. public static void Remove(SendTo sendTo) Parameters sendTo SendTo Information about the shortcut to be removed." + }, + "api/ZeroInstall.DesktopIntegration.Windows.StubBuilder.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.StubBuilder.html", + "title": "Class StubBuilder | Zero Install .NET API", + "keywords": "Class StubBuilder Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Builds stub EXEs that execute \"0install\" commands. public class StubBuilder Inheritance object StubBuilder Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors StubBuilder(IIconStore) Builds stub EXEs that execute \"0install\" commands. public StubBuilder(IIconStore iconStore) Parameters iconStore IIconStore Methods BuildRunStub(string, FeedTarget, string?, bool) Builds a stub EXE that executes the \"0install run\" command at a specific path. public void BuildRunStub(string path, FeedTarget target, string? command = null, bool gui = false) Parameters path string The path to store the generated EXE file. target FeedTarget The application to be launched. command string The command argument to be passed to the the \"0install run\" command; can be null. gui bool true to build a GUI stub, false to build a CLI stub. Exceptions OperationCanceledException The user canceled the task. InvalidOperationException There was a compilation error while generating the stub EXE. IOException A problem occurred while writing to the filesystem. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem is not permitted. GetRunCommandLine(FeedTarget, string?, bool) Returns a command-line for executing the \"0install run\" command. Generates and returns a stub EXE if possible, falls back to directly pointing to the \"0install\" EXE otherwise. public IReadOnlyList GetRunCommandLine(FeedTarget target, string? command = null, bool machineWide = false) Parameters target FeedTarget The application to be launched. command string The command argument to be passed to the the \"0install run\" command; can be null. machineWide bool true place the generated stub in a machine-wide location; false to place it in the current user profile. Returns IReadOnlyList Exceptions OperationCanceledException The user canceled the task. InvalidOperationException There was a compilation error while generating the stub EXE. IOException A problem occurred while writing to the filesystem. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Windows.UninstallEntry.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.UninstallEntry.html", + "title": "Class UninstallEntry | Zero Install .NET API", + "keywords": "Class UninstallEntry Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Manages uninstall registry entries on Windows systems. public static class UninstallEntry Inheritance object UninstallEntry Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Register(string, string[], string, string?, Uri?, string?, string?, long?, bool) Adds an entry to the list of uninstallable applications. public static void Register(string id, string[] uninstallCommand, string name, string? publisher = null, Uri? homepage = null, string? iconPath = null, string? version = null, long? size = null, bool machineWide = false) Parameters id string The ID of the entry to create. uninstallCommand string[] The command-line to invoke for uninstalling the application. name string The name of the application. publisher string The publisher (company or organization) of the application. homepage Uri The URL of a web-page describing application in more detail. iconPath string The path of an icon file. version string The application's current version. size long? The application's size in bytes. machineWide bool Apply the registration machine-wide instead of just for the current user. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Register(FeedTarget, IIconStore, bool) Adds an entry to the list of uninstallable applications. public static void Register(FeedTarget target, IIconStore iconStore, bool machineWide) Parameters target FeedTarget The application being added. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Apply the registration machine-wide instead of just for the current user. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Unregister(string, bool) Removes an entry from the list of uninstallable applications. public static void Unregister(string id, bool machineWide) Parameters id string The ID of the entry to be removed. machineWide bool Apply the registration machine-wide instead of just for the current user. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Unregister(FeedUri, bool) Removes an entry from the list of uninstallable applications. public static void Unregister(FeedUri uri, bool machineWide) Parameters uri FeedUri The feed to be removed. machineWide bool Apply the registration machine-wide instead of just for the current user. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Windows.UrlProtocol.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.UrlProtocol.html", + "title": "Class UrlProtocol | Zero Install .NET API", + "keywords": "Class UrlProtocol Namespace ZeroInstall.DesktopIntegration.Windows Assembly ZeroInstall.DesktopIntegration.dll Contains control logic for applying UrlProtocol and UrlProtocol on Windows systems. public static class UrlProtocol Inheritance object UrlProtocol Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields ProtocolIndicator The registry value name used to indicate that a programmatic identifier is actually a ULR protocol handler. public const string ProtocolIndicator = \"URL Protocol\" Field Value string RegKeyUserVistaUrlAssoc The HKCU registry key where Windows Vista and newer store URL protocol associations. public const string RegKeyUserVistaUrlAssoc = \"Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\" Field Value string Methods Register(FeedTarget, UrlProtocol, IIconStore, bool, bool) Registers a URL protocol in the current system. public static void Register(FeedTarget target, UrlProtocol urlProtocol, IIconStore iconStore, bool machineWide, bool accessPoint = false) Parameters target FeedTarget The application being integrated. urlProtocol UrlProtocol The URL protocol to register. iconStore IIconStore Stores icon files downloaded from the web as local files. machineWide bool Register the URL protocol machine-wide instead of just for the current user. accessPoint bool Indicates that the handler shall become the default handler for the protocol. Exceptions OperationCanceledException The user canceled the task. IOException A problem occurred while writing to the filesystem or registry. WebException A problem occurred while downloading additional data (such as icons). UnauthorizedAccessException Write access to the filesystem or registry is not permitted. Unregister(UrlProtocol, bool, bool) Unregisters a URL protocol in the current system. public static void Unregister(UrlProtocol urlProtocol, bool machineWide, bool accessPoint = false) Parameters urlProtocol UrlProtocol The URL protocol to remove. machineWide bool Unregister the URL protocol machine-wide instead of just for the current user. accessPoint bool Indicates that the handler was the default handler for the protocol. Exceptions IOException A problem occurred while writing to the filesystem or registry. UnauthorizedAccessException Write access to the filesystem or registry is not permitted." + }, + "api/ZeroInstall.DesktopIntegration.Windows.html": { + "href": "api/ZeroInstall.DesktopIntegration.Windows.html", + "title": "Namespace ZeroInstall.DesktopIntegration.Windows | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.DesktopIntegration.Windows Windows-specific desktop integration code. Classes AppAlias Contains control logic for applying AppAlias on Windows systems. AppRegistration Contains control logic for applying AppRegistration on Windows systems. AutoPlay Contains control logic for applying AutoPlay and AutoPlay on Windows systems. ComServer Contains control logic for applying ComServer on Windows systems. ContextMenu Contains control logic for applying ContextMenu and ContextMenu on Windows systems. DefaultProgram Contains control logic for applying DefaultProgram and DefaultProgram on Windows systems. FileType Contains control logic for applying FileType and FileType on Windows systems. PathEnv Manages the PATH environment variable. Shortcut Creates Windows shortcut files (.lnk). StubBuilder Builds stub EXEs that execute \"0install\" commands. UninstallEntry Manages uninstall registry entries on Windows systems. UrlProtocol Contains control logic for applying UrlProtocol and UrlProtocol on Windows systems." + }, + "api/ZeroInstall.DesktopIntegration.html": { + "href": "api/ZeroInstall.DesktopIntegration.html", + "title": "Namespace ZeroInstall.DesktopIntegration | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.DesktopIntegration Integrating applications with desktop environments (creating menu entries, etc.). NuGet package: ZeroInstall.DesktopIntegration Namespaces ZeroInstall.DesktopIntegration.AccessPoints Structures for parsing and in-memory representation of access points applied to a system. ZeroInstall.DesktopIntegration.Unix Desktop integration code for Unix-like systems (e.g. Linux). ZeroInstall.DesktopIntegration.ViewModel Classes that wrap desktop integration capabilities in a data binding-friendly manner. ZeroInstall.DesktopIntegration.Windows Windows-specific desktop integration code. Classes AppEntry Represents an application in the AppList identified by its interface URI. AppList Stores a list of applications and the kind of desktop integration the user chose for them. CapabilityExtensions Contains extension methods for Capabilitys. CategoryIntegrationManager Manages desktop integration via AccessPoints, grouping them into categories. ConflictData Stores information about an AccessPoint causing a conflict and the AppEntry containing it. ConflictDataUtils Helper methods for creating ConflictData lists. ConflictException Indicates a desktop integration operation could not be completed due to conflicting AccessPoints. IconStores Provides IIconStore instances. IntegrationManager Manages an AppList and desktop integration via AccessPoints. IntegrationManagerBase Base class for IIntegrationManager implementations using template methods. Suggest Suggests suitable default AccessPoints for specific Feeds. SyncIntegrationManager Synchronizes the AppList with other computers. SyncRaceException Multiple computers are trying to sync with the same account at the same time. Interfaces ICategoryIntegrationManager Manages desktop integration via AccessPoints, grouping them into categories. IIntegrationManager Manages an AppList and desktop integration via AccessPoints. Enums SyncResetMode Controls how synchronization data is reset by Sync(SyncResetMode)" + }, + "api/ZeroInstall.Model.Architecture.html": { + "href": "api/ZeroInstall.Model.Architecture.html", + "title": "Struct Architecture | Zero Install .NET API", + "keywords": "Struct Architecture Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Describes a combination of an operating system and a CPU architecture. [TypeConverter(typeof(ArchitectureConverter))] [Serializable] public record struct Architecture : IEquatable Implements IEquatable Inherited Members ValueType.Equals(object) ValueType.GetHashCode() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Extension Methods ArchitectureExtensions.RunsOn(Architecture, Architecture) Constructors Architecture(string) Creates a new architecture structure from a string in the form \"os-cpu\". public Architecture(string architecture) Parameters architecture string Exceptions FormatException architecture is not in the form \"os-cpu\" Architecture(OS, Cpu) Describes a combination of an operating system and a CPU architecture. public Architecture(OS OS = OS.All, Cpu Cpu = Cpu.All) Parameters OS OS Determines which operating systems are supported. Cpu Cpu Determines which CPU-architectures are supported. Fields CurrentSystem An architecture representing the currently running system. public static readonly Architecture CurrentSystem Field Value Architecture Properties Cpu Determines which CPU-architectures are supported. public Cpu Cpu { readonly get; set; } Property Value Cpu OS Determines which operating systems are supported. public OS OS { readonly get; set; } Property Value OS Methods ToString() Returns the architecture in the form \"os-cpu\". Safe for parsing! public override string ToString() Returns string" + }, + "api/ZeroInstall.Model.ArchitectureExtensions.html": { + "href": "api/ZeroInstall.Model.ArchitectureExtensions.html", + "title": "Class ArchitectureExtensions | Zero Install .NET API", + "keywords": "Class ArchitectureExtensions Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Contains extension methods for Architecture, OS and Cpu. public static class ArchitectureExtensions Inheritance object ArchitectureExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Is32Bit(Cpu) Indicates whether the CPU architecture is 32-bit. public static bool Is32Bit(this Cpu cpu) Parameters cpu Cpu Returns bool Is64Bit(Cpu) Indicates whether the CPU architecture is 64-bit. public static bool Is64Bit(this Cpu cpu) Parameters cpu Cpu Returns bool RunsOn(Architecture, Architecture) Determines whether an implementation for architecture can run on target. public static bool RunsOn(this Architecture architecture, Architecture target) Parameters architecture Architecture target Architecture Returns bool RunsOn(Cpu, Cpu) Determines whether an implementation for cpu can run on target. public static bool RunsOn(this Cpu cpu, Cpu target) Parameters cpu Cpu target Cpu Returns bool RunsOn(OS, OS) Determines whether an implementation for os can run on target. public static bool RunsOn(this OS os, OS target) Parameters os OS target OS Returns bool" + }, + "api/ZeroInstall.Model.Archive.html": { + "href": "api/ZeroInstall.Model.Archive.html", + "title": "Class Archive | Zero Install .NET API", + "keywords": "Class Archive Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Retrieves an implementation by downloading and extracting an archive. [Serializable] [Equatable] public sealed class Archive : DownloadRetrievalMethod, IEquatable, IEquatable, ICloneable, IRecipeStep, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown FeedElement RetrievalMethod DownloadRetrievalMethod Archive Implements IEquatable IEquatable ICloneable IRecipeStep ICloneable IEquatable IEquatable Inherited Members DownloadRetrievalMethod.Href DownloadRetrievalMethod.Size FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Fields KnownMimeTypes All known MimeType values for archives. public static readonly IEnumerable KnownMimeTypes Field Value IEnumerable MimeType7Z A MimeType value for archives. public const string MimeType7Z = \"application/x-7z-compressed\" Field Value string MimeTypeCab A MimeType value for archives. public const string MimeTypeCab = \"application/vnd.ms-cab-compressed\" Field Value string MimeTypeDeb A MimeType value for archives. public const string MimeTypeDeb = \"application/x-deb\" Field Value string MimeTypeDmg A MimeType value for archives. public const string MimeTypeDmg = \"application/x-apple-diskimage\" Field Value string MimeTypeMsi A MimeType value for archives. public const string MimeTypeMsi = \"application/x-msi\" Field Value string MimeTypeRar A MimeType value for archives. public const string MimeTypeRar = \"application/vnd.rar\" Field Value string MimeTypeRpm A MimeType value for archives. public const string MimeTypeRpm = \"application/x-rpm\" Field Value string MimeTypeRubyGem A MimeType value for archives. public const string MimeTypeRubyGem = \"application/x-ruby-gem\" Field Value string MimeTypeTar A MimeType value for archives. public const string MimeTypeTar = \"application/x-tar\" Field Value string MimeTypeTarBzip A MimeType value for archives. public const string MimeTypeTarBzip = \"application/x-bzip-compressed-tar\" Field Value string MimeTypeTarGzip A MimeType value for archives. public const string MimeTypeTarGzip = \"application/x-compressed-tar\" Field Value string MimeTypeTarLzip A MimeType value for archives. public const string MimeTypeTarLzip = \"application/x-lzip-compressed-tar\" Field Value string MimeTypeTarLzma A MimeType value for archives. public const string MimeTypeTarLzma = \"application/x-lzma-compressed-tar\" Field Value string MimeTypeTarXz A MimeType value for archives. public const string MimeTypeTarXz = \"application/x-xz-compressed-tar\" Field Value string MimeTypeTarZstandard A MimeType value for archives. public const string MimeTypeTarZstandard = \"application/x-zstd-compressed-tar\" Field Value string MimeTypeZip A MimeType value for archives. public const string MimeTypeZip = \"application/zip\" Field Value string Properties Destination The subdirectory below the implementation directory to extract the archive into as a Unix-style path; null or Empty for top-level. public string? Destination { get; set; } Property Value string DownloadSize The effective size of the file on the server. public override long DownloadSize { get; } Property Value long Extract The directory to extract into relative to the implementation root as a Unix-style path; null or Empty for entire archive. public string? Extract { get; set; } Property Value string MimeType The type of the archive as a MIME type. If missing, the type is guessed from the extension on the Href attribute. This value is case-insensitive. [TypeConverter(typeof(ArchiveMimeTypeConverter))] public string? MimeType { get; set; } Property Value string StartOffset The number of bytes at the beginning of the file which should be ignored. The value in Size does not include the skipped bytes. public int StartOffset { get; set; } Property Value int Remarks This is useful for some self-extracting archives which are made up of a shell script followed by a normal archive in a single file. Methods Clone() Creates a deep copy of this Archive instance. public override RetrievalMethod Clone() Returns RetrievalMethod The new copy of the Archive. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetFileExtension(string) Gets the default file extension for a particular archive MIME type. public static string GetFileExtension(string mimeType) Parameters mimeType string The MIME type to get the extension for. Returns string The file extension including the leading dot, e.g. '.zip'. '.*' if unknown. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GuessMimeType(string) Tries to guess the MIME type of an archive file by looking at its file extension. public static string GuessMimeType(string fileName) Parameters fileName string The file name to analyze. Returns string Exceptions NotSupportedException The file extension does not correspond to a known archive type. Normalize(FeedUri?) Sets missing default values and handles legacy elements. public override void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions UriFormatException Href is relative and feedUri is a remote URI. InvalidDataException A required property is not set or invalid. ToString() Returns the archive in the form \"Location (MimeType, Size + StartOffset, Extract) => Destination\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(Archive?, Archive?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Archive? left, Archive? right) Parameters left Archive The left object right Archive The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Archive?, Archive?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Archive? left, Archive? right) Parameters left Archive The left object right Archive The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Arg.html": { + "href": "api/ZeroInstall.Model.Arg.html", + "title": "Class Arg | Zero Install .NET API", + "keywords": "Class Arg Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A single command-line arguments to be passed to an executable. [Serializable] [Equatable] public class Arg : ArgBase, IEquatable, IEquatable, ICloneable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement ArgBase Arg Implements IEquatable IEquatable ICloneable ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties Value A single command-line arguments to be passed to an executable. Will be automatically escaped to allow proper concatenation of multiple arguments containing spaces. public required string Value { get; set; } Property Value string Methods Clone() Creates a deep copy of this Arg instance. public override ArgBase Clone() Returns ArgBase The new copy of the Arg. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Arg?) protected bool Equals(Arg? other) Parameters other Arg Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns Value. Not safe for parsing! public override string ToString() Returns string Operators operator ==(Arg?, Arg?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Arg? left, Arg? right) Parameters left Arg The left object right Arg The right object Returns bool true if the objects are equal; otherwise, false. implicit operator Arg(string) Convenience cast for turning strings into plain Args. public static implicit operator Arg(string value) Parameters value string Returns Arg operator !=(Arg?, Arg?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Arg? left, Arg? right) Parameters left Arg The left object right Arg The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.ArgBase.html": { + "href": "api/ZeroInstall.Model.ArgBase.html", + "title": "Class ArgBase | Zero Install .NET API", + "keywords": "Class ArgBase Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Common base class for Arg and ForEachArgs. [TypeConverter(typeof(ArgBaseConverter))] public abstract class ArgBase : FeedElement, IEquatable, IEquatable, ICloneable Inheritance object XmlUnknown FeedElement ArgBase Implements IEquatable IEquatable ICloneable Derived Arg ForEachArgs Inherited Members FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(object) FeedElement.Equals(FeedElement) FeedElement.GetHashCode() XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Clone() Creates a deep copy of this ArgBase instance. public abstract ArgBase Clone() Returns ArgBase The new copy of the ArgBase. Normalize() Converts legacy elements, sets default values, etc.. public abstract void Normalize() Exceptions InvalidDataException A required property is not set or invalid. Operators implicit operator ArgBase(string) Convenience cast for turning strings into plain Args. public static implicit operator ArgBase(string value) Parameters value string Returns ArgBase" + }, + "api/ZeroInstall.Model.Binding.html": { + "href": "api/ZeroInstall.Model.Binding.html", + "title": "Class Binding | Zero Install .NET API", + "keywords": "Class Binding Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Bindings specify how the chosen implementation is made known to the running program. public abstract class Binding : FeedElement, IEquatable, IEquatable, ICloneable Inheritance object XmlUnknown FeedElement Binding Implements IEquatable IEquatable ICloneable Derived EnvironmentBinding ExecutableInBinding OverlayBinding Inherited Members FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(object) FeedElement.Equals(FeedElement) FeedElement.GetHashCode() XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks Bindings can appear in Dependencys, in which case they tell a component how to find its dependency, or in Element, where they tell a component how to find itself. Methods Clone() Creates a deep copy of this Binding instance. public abstract Binding Clone() Returns Binding The new copy of the Binding. Normalize() Converts legacy elements, sets default values, etc.. public virtual void Normalize() Exceptions InvalidDataException A required property is not set or invalid." + }, + "api/ZeroInstall.Model.Capabilities.AppRegistration.html": { + "href": "api/ZeroInstall.Model.Capabilities.AppRegistration.html", + "title": "Class AppRegistration | Zero Install .NET API", + "keywords": "Class AppRegistration Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll Indicates that an application should be listed in the \"Set your Default Programs\" UI (Windows Vista and later). [Serializable] [Equatable] public sealed class AppRegistration : Capability, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown Capability AppRegistration Implements IEquatable ICloneable IEquatable IEquatable Inherited Members Capability.ID XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Remarks The actual integration information is pulled from the other Capabilitys. Properties CapabilityRegPath The registry path relative to HKEY_CURRENT_USER or HKEY_LOCAL_MACHINE which should be used to store the application's capability registration information. public required string CapabilityRegPath { get; set; } Property Value string ConflictIDs Identifiers from a namespace global to all Capabilitys. Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time. [Browsable(false)] [IgnoreEquality] public override IEnumerable ConflictIDs { get; } Property Value IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. WindowsMachineWideOnly Indicates whether this capability can be registered only machine-wide and not per-user on Windows systems. public override bool WindowsMachineWideOnly { get; } Property Value bool Methods Clone() Creates a deep copy of this Capability instance. public override Capability Clone() Returns Capability The new copy of the Capability. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the capability in the form \"CapabilityRegPath\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(AppRegistration?, AppRegistration?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(AppRegistration? left, AppRegistration? right) Parameters left AppRegistration The left object right AppRegistration The right object Returns bool true if the objects are equal; otherwise, false. operator !=(AppRegistration?, AppRegistration?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(AppRegistration? left, AppRegistration? right) Parameters left AppRegistration The left object right AppRegistration The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.AutoPlay.html": { + "href": "api/ZeroInstall.Model.Capabilities.AutoPlay.html", + "title": "Class AutoPlay | Zero Install .NET API", + "keywords": "Class AutoPlay Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll An application's ability to handle one or more AutoPlay events. [Serializable] [Equatable] public sealed class AutoPlay : IconCapability, IEquatable, ICloneable, IEquatable, IEquatable, IIconContainer, IDescriptionContainer, IEquatable, IEquatable Inheritance object XmlUnknown Capability DefaultCapability IconCapability AutoPlay Implements IEquatable ICloneable IEquatable IEquatable IIconContainer IDescriptionContainer IEquatable IEquatable Inherited Members IconCapability.Descriptions IconCapability.Icons IconCapability.GetIcon(string) DefaultCapability.ExplicitOnly Capability.WindowsMachineWideOnly Capability.ID XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties ConflictIDs Identifiers from a namespace global to all Capabilitys. Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time. [Browsable(false)] [IgnoreEquality] public override IEnumerable ConflictIDs { get; } Property Value IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Events The IDs of the events this action can handle. [Browsable(false)] [OrderedEquality] public List Events { get; } Property Value List Provider The name of the application as shown in the AutoPlay selection list. public required string Provider { get; set; } Property Value string Verb The command to execute when the handler gets called. [Browsable(false)] public required Verb Verb { get; set; } Property Value Verb Methods Clone() Creates a deep copy of this Capability instance. public override Capability Clone() Returns Capability The new copy of the Capability. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the capability in the form \"ID\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(AutoPlay?, AutoPlay?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(AutoPlay? left, AutoPlay? right) Parameters left AutoPlay The left object right AutoPlay The right object Returns bool true if the objects are equal; otherwise, false. operator !=(AutoPlay?, AutoPlay?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(AutoPlay? left, AutoPlay? right) Parameters left AutoPlay The left object right AutoPlay The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.AutoPlayEvent.html": { + "href": "api/ZeroInstall.Model.Capabilities.AutoPlayEvent.html", + "title": "Class AutoPlayEvent | Zero Install .NET API", + "keywords": "Class AutoPlayEvent Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll A specific AutoPlay event such as \"Audio CD inserted\". [Serializable] [Equatable] public class AutoPlayEvent : XmlUnknown, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown AutoPlayEvent Implements IEquatable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Fields NameBurnBluRay Canonical Name. public const string NameBurnBluRay = \"HandleBDBurningOnArrival\" Field Value string NameBurnCD Canonical Name. public const string NameBurnCD = \"HandleCDBurningOnArrival\" Field Value string NameBurnDvd Canonical Name. public const string NameBurnDvd = \"HandleDVDBurningOnArrival\" Field Value string NamePlayBluRay Canonical Name. public const string NamePlayBluRay = \"PlayBluRayOnArrival\" Field Value string NamePlayCDAudio Canonical Name. public const string NamePlayCDAudio = \"PlayCDAudioOnArrival\" Field Value string NamePlayDvdAudioO Canonical Name. public const string NamePlayDvdAudioO = \"PlayDVDAudioOnArrival\" Field Value string NamePlayDvdMovie Canonical Name. public const string NamePlayDvdMovie = \"PlayDVDMovieOnArrival\" Field Value string NamePlayMusicFiles Canonical Name. public const string NamePlayMusicFiles = \"PlayMusicFilesOnArrival\" Field Value string NamePlaySuperVideoCDMovie Canonical Name. public const string NamePlaySuperVideoCDMovie = \"PlaySuperVideoCDMovieOnArrival\" Field Value string NamePlayVideoCDMovie Canonical Name. public const string NamePlayVideoCDMovie = \"PlayVideoCDMovieOnArrival\" Field Value string NamePlayVideoFiles Canonical Name. public const string NamePlayVideoFiles = \"PlayVideoFilesOnArrival\" Field Value string Properties Name The name of the event. May only contain alphanumeric characters, spaces ( ), dots (.), underscores (_), hyphens (-) and plus signs (+). public required string Name { get; set; } Property Value string Methods Clone() Creates a deep copy of this AutoPlayEvent instance. public AutoPlayEvent Clone() Returns AutoPlayEvent The new copy of the AutoPlayEvent. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(AutoPlayEvent?) protected bool Equals(AutoPlayEvent? other) Parameters other AutoPlayEvent Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the event in the form \"Name\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(AutoPlayEvent?, AutoPlayEvent?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(AutoPlayEvent? left, AutoPlayEvent? right) Parameters left AutoPlayEvent The left object right AutoPlayEvent The right object Returns bool true if the objects are equal; otherwise, false. operator !=(AutoPlayEvent?, AutoPlayEvent?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(AutoPlayEvent? left, AutoPlayEvent? right) Parameters left AutoPlayEvent The left object right AutoPlayEvent The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.Capability.html": { + "href": "api/ZeroInstall.Model.Capabilities.Capability.html", + "title": "Class Capability | Zero Install .NET API", + "keywords": "Class Capability Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll A capability tells the desktop environment what an application can do and in which fashion this can be represented to the user. [Equatable] public abstract class Capability : XmlUnknown, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown Capability Implements IEquatable ICloneable IEquatable Derived AppRegistration ComServer DefaultCapability RemoveHook Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties ConflictIDs Identifiers from a namespace global to all Capabilitys. Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time. [Browsable(false)] [IgnoreEquality] public abstract IEnumerable ConflictIDs { get; } Property Value IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. ID An ID that differentiates this capability from other capabilities of the same type within the feed. May only contain alphanumeric characters, spaces ( ), dots (.), underscores (_), hyphens (-) and plus signs (+). public required string ID { get; set; } Property Value string Remarks Also serves as a programmatic identifier within the desktop environment. In case of conflicts, the first capability listed with a specific ID will take precedence. WindowsMachineWideOnly Indicates whether this capability can be registered only machine-wide and not per-user on Windows systems. [Browsable(false)] [IgnoreEquality] public virtual bool WindowsMachineWideOnly { get; } Property Value bool Methods Clone() Creates a deep copy of this Capability instance. public abstract Capability Clone() Returns Capability The new copy of the Capability. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Capability?) protected bool Equals(Capability? other) Parameters other Capability Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public virtual void Normalize() Exceptions InvalidDataException A required property is not set or invalid. Operators operator ==(Capability?, Capability?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Capability? left, Capability? right) Parameters left Capability The left object right Capability The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Capability?, Capability?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Capability? left, Capability? right) Parameters left Capability The left object right Capability The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.CapabilityList.html": { + "href": "api/ZeroInstall.Model.Capabilities.CapabilityList.html", + "title": "Class CapabilityList | Zero Install .NET API", + "keywords": "Class CapabilityList Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll Groups a number of application Capabilitys (for a specific operating system) that can be registered in a desktop environment. [Serializable] [Equatable] public sealed class CapabilityList : XmlUnknown, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown CapabilityList Implements IEquatable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Fields XmlNamespace The XML namespace used for storing application capabilities. public const string XmlNamespace = \"http://0install.de/schema/desktop-integration/capabilities\" Field Value string XsdLocation The URI to retrieve an XSD containing the XML Schema information for this class in serialized form. public const string XsdLocation = \"https://docs.0install.net/specifications/capabilities.xsd\" Field Value string Properties Entries A list of Capabilitys. [Browsable(false)] [OrderedEquality] public List Entries { get; } Property Value List OS Determines for which operating system the Capabilitys are applicable. public OS OS { get; set; } Property Value OS Methods Clone() Creates a deep copy of this CapabilityList instance. public CapabilityList Clone() Returns CapabilityList The new copy of the CapabilityList. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetCapability(string) Retrieves the first Capability that matches a specific type and ID. Safe for missing elements. public T? GetCapability(string id) where T : Capability Parameters id string The ID to match. Returns T The first matching Capability; null if no match was found. Type Parameters T The capability type to match. Exceptions KeyNotFoundException No capability matching id and T was found. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the capability list in the form \"OS\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(CapabilityList?, CapabilityList?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(CapabilityList? left, CapabilityList? right) Parameters left CapabilityList The left object right CapabilityList The right object Returns bool true if the objects are equal; otherwise, false. operator !=(CapabilityList?, CapabilityList?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(CapabilityList? left, CapabilityList? right) Parameters left CapabilityList The left object right CapabilityList The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.CapabilityListExtensions.html": { + "href": "api/ZeroInstall.Model.Capabilities.CapabilityListExtensions.html", + "title": "Class CapabilityListExtensions | Zero Install .NET API", + "keywords": "Class CapabilityListExtensions Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll Contains extension methods for CapabilityLists. public static class CapabilityListExtensions Inheritance object CapabilityListExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods CompatibleCapabilities(IEnumerable) Flattens a set of CapabilityLists into a single stream of Capabilitys, filtering out OSes that do not match CurrentSystem. [LinqTunnel] public static IEnumerable CompatibleCapabilities(this IEnumerable capabilityLists) Parameters capabilityLists IEnumerable Returns IEnumerable" + }, + "api/ZeroInstall.Model.Capabilities.ComServer.html": { + "href": "api/ZeroInstall.Model.Capabilities.ComServer.html", + "title": "Class ComServer | Zero Install .NET API", + "keywords": "Class ComServer Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll An application's ability to act as a COM server. [Serializable] [Equatable] public sealed class ComServer : Capability, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown Capability ComServer Implements IEquatable ICloneable IEquatable IEquatable Inherited Members Capability.WindowsMachineWideOnly Capability.ID Capability.Normalize() XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties ConflictIDs Identifiers from a namespace global to all Capabilitys. Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time. [Browsable(false)] [IgnoreEquality] public override IEnumerable ConflictIDs { get; } Property Value IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Methods Clone() Creates a deep copy of this Capability instance. public override Capability Clone() Returns Capability The new copy of the Capability. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the capability in the form \"-\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(ComServer?, ComServer?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ComServer? left, ComServer? right) Parameters left ComServer The left object right ComServer The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ComServer?, ComServer?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ComServer? left, ComServer? right) Parameters left ComServer The left object right ComServer The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.ContextMenu.html": { + "href": "api/ZeroInstall.Model.Capabilities.ContextMenu.html", + "title": "Class ContextMenu | Zero Install .NET API", + "keywords": "Class ContextMenu Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll An entry in the file manager's context menu for all file types. [Serializable] [Equatable] public sealed class ContextMenu : VerbCapability, IEquatable, ICloneable, IEquatable, IEquatable, IIconContainer, IDescriptionContainer, IEquatable, IEquatable, IEquatable Inheritance object XmlUnknown Capability DefaultCapability IconCapability VerbCapability ContextMenu Implements IEquatable ICloneable IEquatable IEquatable IIconContainer IDescriptionContainer IEquatable IEquatable IEquatable Inherited Members VerbCapability.Verbs VerbCapability.Normalize() IconCapability.Descriptions IconCapability.Icons IconCapability.GetIcon(string) DefaultCapability.ExplicitOnly Capability.WindowsMachineWideOnly Capability.ID XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties ConflictIDs Identifiers from a namespace global to all Capabilitys. Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time. [Browsable(false)] [IgnoreEquality] public override IEnumerable ConflictIDs { get; } Property Value IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Extensions A list of file extensions this context menu entry is displayed for. Only applicable when Target is Files. The context menu is shown for all file types when this empty. [Browsable(false)] [OrderedEquality] public List Extensions { get; } Property Value List Target Controls which file system object types this context menu entry is displayed for. public ContextMenuTarget Target { get; set; } Property Value ContextMenuTarget Methods Clone() Creates a deep copy of this Capability instance. public override Capability Clone() Returns Capability The new copy of the Capability. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the capability in the form \"ID\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(ContextMenu?, ContextMenu?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ContextMenu? left, ContextMenu? right) Parameters left ContextMenu The left object right ContextMenu The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ContextMenu?, ContextMenu?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ContextMenu? left, ContextMenu? right) Parameters left ContextMenu The left object right ContextMenu The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.ContextMenuTarget.html": { + "href": "api/ZeroInstall.Model.Capabilities.ContextMenuTarget.html", + "title": "Enum ContextMenuTarget | Zero Install .NET API", + "keywords": "Enum ContextMenuTarget Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll Describes how important a dependency is (i.e. whether ignoring it is an option). public enum ContextMenuTarget Fields All = 3 The context menu entry is displayed for all filesystem objects (files and directories). Directories = 2 The context menu entry is displayed for all directories. ExecutableFiles = 1 The context menu entry is displayed for executable files. Files = 0 The context menu entry is displayed for all files." + }, + "api/ZeroInstall.Model.Capabilities.DefaultCapability.html": { + "href": "api/ZeroInstall.Model.Capabilities.DefaultCapability.html", + "title": "Class DefaultCapability | Zero Install .NET API", + "keywords": "Class DefaultCapability Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll Abstract base class for capabilities that can be applied as default handlers for something at the user's request. [Equatable] public abstract class DefaultCapability : Capability, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown Capability DefaultCapability Implements IEquatable ICloneable IEquatable IEquatable Derived IconCapability Inherited Members Capability.WindowsMachineWideOnly Capability.ID Capability.ConflictIDs Capability.Normalize() Capability.Clone() Capability.Equals(Capability) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties ExplicitOnly When set to true this capability is not applied as a default handler without explicit confirmation from the user. public bool ExplicitOnly { get; set; } Property Value bool Remarks Use this to exclude exotic capabilities from default integration categories. Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(DefaultCapability?) protected bool Equals(DefaultCapability? other) Parameters other DefaultCapability Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Operators operator ==(DefaultCapability?, DefaultCapability?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(DefaultCapability? left, DefaultCapability? right) Parameters left DefaultCapability The left object right DefaultCapability The right object Returns bool true if the objects are equal; otherwise, false. operator !=(DefaultCapability?, DefaultCapability?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(DefaultCapability? left, DefaultCapability? right) Parameters left DefaultCapability The left object right DefaultCapability The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.DefaultProgram.html": { + "href": "api/ZeroInstall.Model.Capabilities.DefaultProgram.html", + "title": "Class DefaultProgram | Zero Install .NET API", + "keywords": "Class DefaultProgram Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll Can act as the default provider for a well-known service such web-browser, e-mail client. [Serializable] [Equatable] public sealed class DefaultProgram : VerbCapability, IEquatable, ICloneable, IEquatable, IEquatable, IIconContainer, IDescriptionContainer, IEquatable, IEquatable, IEquatable Inheritance object XmlUnknown Capability DefaultCapability IconCapability VerbCapability DefaultProgram Implements IEquatable ICloneable IEquatable IEquatable IIconContainer IDescriptionContainer IEquatable IEquatable IEquatable Inherited Members VerbCapability.Verbs IconCapability.Descriptions IconCapability.Icons IconCapability.GetIcon(string) DefaultCapability.ExplicitOnly Capability.ID XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Fields ServiceCalender Canonical Service for calender tools. public const string ServiceCalender = \"Calender\" Field Value string ServiceContacts Canonical Service for address books. public const string ServiceContacts = \"Contacts\" Field Value string ServiceInternet Canonical Service for web browsers. public const string ServiceInternet = \"StartMenuInternet\" Field Value string ServiceInternetCall Canonical Service for internet call tools. public const string ServiceInternetCall = \"Internet Call\" Field Value string ServiceJava Canonical Service for Java Virtual Machines. public const string ServiceJava = \"JVM\" Field Value string ServiceMail Canonical Service for mail clients. public const string ServiceMail = \"Mail\" Field Value string ServiceMedia Canonical Service for media players. public const string ServiceMedia = \"Media\" Field Value string ServiceMessenger Canonical Service for instant messengers. public const string ServiceMessenger = \"IM\" Field Value string Properties ConflictIDs Identifiers from a namespace global to all Capabilitys. Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time. [Browsable(false)] [IgnoreEquality] public override IEnumerable ConflictIDs { get; } Property Value IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. InstallCommands Lists the commands the application registers for use by Windows' \"Set Program Access and Defaults\". Will be transparently replaced with Zero Install commands at runtime. public InstallCommands InstallCommands { get; set; } Property Value InstallCommands Remarks These strings are used for registry filtering. They are never actually executed. Service The name of the service the application provides. Well-known values on Windows are: Mail, Media, IM, JVM, Calender, Contacts, Internet Call public required string Service { get; set; } Property Value string WindowsMachineWideOnly Indicates whether this capability can be registered only machine-wide and not per-user on Windows systems. public override bool WindowsMachineWideOnly { get; } Property Value bool Methods Clone() Creates a deep copy of this Capability instance. public override Capability Clone() Returns Capability The new copy of the Capability. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the capability in the form \"Service (ID)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(DefaultProgram?, DefaultProgram?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(DefaultProgram? left, DefaultProgram? right) Parameters left DefaultProgram The left object right DefaultProgram The right object Returns bool true if the objects are equal; otherwise, false. operator !=(DefaultProgram?, DefaultProgram?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(DefaultProgram? left, DefaultProgram? right) Parameters left DefaultProgram The left object right DefaultProgram The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.FileType.html": { + "href": "api/ZeroInstall.Model.Capabilities.FileType.html", + "title": "Class FileType | Zero Install .NET API", + "keywords": "Class FileType Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll An application's ability to open a certain file type. [Serializable] [Equatable] public sealed class FileType : VerbCapability, IEquatable, ICloneable, IEquatable, IEquatable, IIconContainer, IDescriptionContainer, IEquatable, IEquatable, IEquatable Inheritance object XmlUnknown Capability DefaultCapability IconCapability VerbCapability FileType Implements IEquatable ICloneable IEquatable IEquatable IIconContainer IDescriptionContainer IEquatable IEquatable IEquatable Inherited Members VerbCapability.Verbs IconCapability.Descriptions IconCapability.Icons IconCapability.GetIcon(string) DefaultCapability.ExplicitOnly Capability.WindowsMachineWideOnly Capability.ID XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties ConflictIDs Identifiers from a namespace global to all Capabilitys. Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time. [Browsable(false)] [IgnoreEquality] public override IEnumerable ConflictIDs { get; } Property Value IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Extensions A list of all file extensions associated with this file type. [Browsable(false)] [OrderedEquality] public List Extensions { get; } Property Value List Methods Clone() Creates a deep copy of this Capability instance. public override Capability Clone() Returns Capability The new copy of the Capability. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the capability in the form \"ID\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(FileType?, FileType?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(FileType? left, FileType? right) Parameters left FileType The left object right FileType The right object Returns bool true if the objects are equal; otherwise, false. operator !=(FileType?, FileType?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(FileType? left, FileType? right) Parameters left FileType The left object right FileType The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.FileTypeExtension.html": { + "href": "api/ZeroInstall.Model.Capabilities.FileTypeExtension.html", + "title": "Class FileTypeExtension | Zero Install .NET API", + "keywords": "Class FileTypeExtension Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll A specific file extension used to identify a file type. [Serializable] [Equatable] public class FileTypeExtension : XmlUnknown, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FileTypeExtension Implements IEquatable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Fields TypeApplication Canonical PerceivedType. public const string TypeApplication = \"application\" Field Value string TypeAudio Canonical PerceivedType. public const string TypeAudio = \"audio\" Field Value string TypeCompressed Canonical PerceivedType. public const string TypeCompressed = \"compressed\" Field Value string TypeContacts Canonical PerceivedType. public const string TypeContacts = \"contacts\" Field Value string TypeDocument Canonical PerceivedType. public const string TypeDocument = \"document\" Field Value string TypeFolder Canonical PerceivedType. public const string TypeFolder = \"folder\" Field Value string TypeGameMedia Canonical PerceivedType. public const string TypeGameMedia = \"gamemedia\" Field Value string TypeImage Canonical PerceivedType. public const string TypeImage = \"image\" Field Value string TypeSystem Canonical PerceivedType. public const string TypeSystem = \"system\" Field Value string TypeText Canonical PerceivedType. public const string TypeText = \"text\" Field Value string TypeVideo Canonical PerceivedType. public const string TypeVideo = \"video\" Field Value string Properties MimeType The MIME type associated with the file extension. public string? MimeType { get; set; } Property Value string PerceivedType Defines the broad category of file types this extension falls into. Well-known values on Windows are: folder, text, image, audio, video, compressed, document, system, application public string? PerceivedType { get; set; } Property Value string Value The file extension including the leading dot (e.g., \".jpg\"). public required string Value { get; set; } Property Value string Methods Clone() Creates a deep copy of this FileTypeExtension instance. public FileTypeExtension Clone() Returns FileTypeExtension The new copy of the FileTypeExtension. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(FileTypeExtension?) protected bool Equals(FileTypeExtension? other) Parameters other FileTypeExtension Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the extension in the form \"Value (MimeType)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(FileTypeExtension?, FileTypeExtension?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(FileTypeExtension? left, FileTypeExtension? right) Parameters left FileTypeExtension The left object right FileTypeExtension The right object Returns bool true if the objects are equal; otherwise, false. operator !=(FileTypeExtension?, FileTypeExtension?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(FileTypeExtension? left, FileTypeExtension? right) Parameters left FileTypeExtension The left object right FileTypeExtension The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.IconCapability.html": { + "href": "api/ZeroInstall.Model.Capabilities.IconCapability.html", + "title": "Class IconCapability | Zero Install .NET API", + "keywords": "Class IconCapability Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll Abstract base class for capabilities that can have multiple Icons and descriptions. [Serializable] [Equatable] public abstract class IconCapability : DefaultCapability, IEquatable, ICloneable, IEquatable, IEquatable, IIconContainer, IDescriptionContainer, IEquatable Inheritance object XmlUnknown Capability DefaultCapability IconCapability Implements IEquatable ICloneable IEquatable IEquatable IIconContainer IDescriptionContainer IEquatable Derived AutoPlay VerbCapability Inherited Members DefaultCapability.ExplicitOnly DefaultCapability.Equals(DefaultCapability) Capability.WindowsMachineWideOnly Capability.ID Capability.ConflictIDs Capability.Normalize() Capability.Clone() Capability.Equals(Capability) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties Descriptions Full descriptions for different languages, which can be several paragraphs long. [Browsable(false)] [OrderedEquality] public LocalizableStringCollection Descriptions { get; } Property Value LocalizableStringCollection Icons Zero or more icons to represent the capability. Used for things like file icons. [Browsable(false)] [OrderedEquality] public List Icons { get; } Property Value List Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(IconCapability?) protected bool Equals(IconCapability? other) Parameters other IconCapability Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GetIcon(string) Returns the first icon with a specific MIME type. public Icon? GetIcon(string mimeType) Parameters mimeType string The MimeType to try to find. Will only return exact matches. Returns Icon The best matching icon that was found or null if no matching icon was found. Operators operator ==(IconCapability?, IconCapability?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(IconCapability? left, IconCapability? right) Parameters left IconCapability The left object right IconCapability The right object Returns bool true if the objects are equal; otherwise, false. operator !=(IconCapability?, IconCapability?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(IconCapability? left, IconCapability? right) Parameters left IconCapability The left object right IconCapability The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.InstallCommands.html": { + "href": "api/ZeroInstall.Model.Capabilities.InstallCommands.html", + "title": "Struct InstallCommands | Zero Install .NET API", + "keywords": "Struct InstallCommands Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll Lists the commands the application normally registers for use by Windows' \"Set Program Access and Defaults\". Used by registry virtualization to stand in for the actual Zero Install commands at runtime. [TypeConverter(typeof(InstallCommandsConverter))] [Serializable] public record struct InstallCommands : IEquatable Implements IEquatable Inherited Members ValueType.Equals(object) ValueType.GetHashCode() ValueType.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Constructors InstallCommands(string?, string?, string?, string?, string?, string?) Lists the commands the application normally registers for use by Windows' \"Set Program Access and Defaults\". Used by registry virtualization to stand in for the actual Zero Install commands at runtime. public InstallCommands(string? Reinstall, string? ReinstallArgs, string? ShowIcons, string? ShowIconsArgs, string? HideIcons, string? HideIconsArgs) Parameters Reinstall string The path (relative to the installation directory) to the executable used to set an application as the default program without any arguments. ReinstallArgs string Additional arguments for the executable specified in Reinstall. ShowIcons string The path (relative to the installation directory) to the executable used to create icons/shortcuts to the application without any arguments. ShowIconsArgs string Additional arguments for the executable specified in ShowIcons. HideIcons string The path (relative to the installation directory) to the executable used to remove icons/shortcuts to the application without any arguments. HideIconsArgs string Additional arguments for the executable specified in HideIcons. Properties HideIcons The path (relative to the installation directory) to the executable used to remove icons/shortcuts to the application without any arguments. public string? HideIcons { readonly get; set; } Property Value string HideIconsArgs Additional arguments for the executable specified in HideIcons. public string? HideIconsArgs { readonly get; set; } Property Value string Reinstall The path (relative to the installation directory) to the executable used to set an application as the default program without any arguments. public string? Reinstall { readonly get; set; } Property Value string ReinstallArgs Additional arguments for the executable specified in Reinstall. public string? ReinstallArgs { readonly get; set; } Property Value string ShowIcons The path (relative to the installation directory) to the executable used to create icons/shortcuts to the application without any arguments. public string? ShowIcons { readonly get; set; } Property Value string ShowIconsArgs Additional arguments for the executable specified in ShowIcons. public string? ShowIconsArgs { readonly get; set; } Property Value string" + }, + "api/ZeroInstall.Model.Capabilities.KnownProtocolPrefix.html": { + "href": "api/ZeroInstall.Model.Capabilities.KnownProtocolPrefix.html", + "title": "Class KnownProtocolPrefix | Zero Install .NET API", + "keywords": "Class KnownProtocolPrefix Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll Names a well-known protocol prefix. Used for protocols that are shared across many applications (e.g. HTTP, FTP) but not for application-specific protocols. [Serializable] [Equatable] public class KnownProtocolPrefix : XmlUnknown, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown KnownProtocolPrefix Implements IEquatable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties Value The value of the prefix (e.g. \"http\"). public required string Value { get; set; } Property Value string Methods Clone() Creates a deep copy of this KnownProtocolPrefix instance. public KnownProtocolPrefix Clone() Returns KnownProtocolPrefix The new copy of the KnownProtocolPrefix. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(KnownProtocolPrefix?) protected bool Equals(KnownProtocolPrefix? other) Parameters other KnownProtocolPrefix Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the prefix in the form \"Value\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(KnownProtocolPrefix?, KnownProtocolPrefix?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(KnownProtocolPrefix? left, KnownProtocolPrefix? right) Parameters left KnownProtocolPrefix The left object right KnownProtocolPrefix The right object Returns bool true if the objects are equal; otherwise, false. operator !=(KnownProtocolPrefix?, KnownProtocolPrefix?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(KnownProtocolPrefix? left, KnownProtocolPrefix? right) Parameters left KnownProtocolPrefix The left object right KnownProtocolPrefix The right object Returns bool true if the objects are not equal; otherwise, false. See Also KnownPrefixes" + }, + "api/ZeroInstall.Model.Capabilities.RemoveHook.html": { + "href": "api/ZeroInstall.Model.Capabilities.RemoveHook.html", + "title": "Class RemoveHook | Zero Install .NET API", + "keywords": "Class RemoveHook Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll A hook/callback into the application to be called during 0install remove. [Serializable] [Equatable] public sealed class RemoveHook : Capability, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown Capability RemoveHook Implements IEquatable ICloneable IEquatable IEquatable Inherited Members Capability.WindowsMachineWideOnly Capability.ID Capability.Normalize() XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Arguments Command-line arguments to be passed to the command. Will be automatically escaped to allow proper concatenation of multiple arguments containing spaces. [Browsable(false)] [OrderedEquality] public List Arguments { get; } Property Value List Command The name of the command in the Feed to use when a removal of the app is requested; leave null for NameRun. [TypeConverter(typeof(CommandNameConverter))] public string? Command { get; set; } Property Value string ConflictIDs Identifiers from a namespace global to all Capabilitys. Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time. [Browsable(false)] [IgnoreEquality] public override IEnumerable ConflictIDs { get; } Property Value IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. Methods Clone() Creates a deep copy of this Capability instance. public override Capability Clone() Returns Capability The new copy of the Capability. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the capability in the form \"Command\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(RemoveHook?, RemoveHook?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(RemoveHook? left, RemoveHook? right) Parameters left RemoveHook The left object right RemoveHook The right object Returns bool true if the objects are equal; otherwise, false. operator !=(RemoveHook?, RemoveHook?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(RemoveHook? left, RemoveHook? right) Parameters left RemoveHook The left object right RemoveHook The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.UrlProtocol.html": { + "href": "api/ZeroInstall.Model.Capabilities.UrlProtocol.html", + "title": "Class UrlProtocol | Zero Install .NET API", + "keywords": "Class UrlProtocol Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll An application's ability to handle a certain URL protocol such as HTTP. [Serializable] [Equatable] public sealed class UrlProtocol : VerbCapability, IEquatable, ICloneable, IEquatable, IEquatable, IIconContainer, IDescriptionContainer, IEquatable, IEquatable, IEquatable Inheritance object XmlUnknown Capability DefaultCapability IconCapability VerbCapability UrlProtocol Implements IEquatable ICloneable IEquatable IEquatable IIconContainer IDescriptionContainer IEquatable IEquatable IEquatable Inherited Members VerbCapability.Verbs IconCapability.Descriptions IconCapability.Icons IconCapability.GetIcon(string) DefaultCapability.ExplicitOnly Capability.WindowsMachineWideOnly Capability.ID XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties ConflictIDs Identifiers from a namespace global to all Capabilitys. Collisions in this namespace indicate that the concerned Capabilitys are in conflict cannot be registered on a single system at the same time. [Browsable(false)] [IgnoreEquality] public override IEnumerable ConflictIDs { get; } Property Value IEnumerable Remarks These identifiers are not guaranteed to stay the same between versions. They should not be stored in files but instead always generated on demand. KnownPrefixes A well-known protocol prefix such as \"http\". Should be empty and set in ID instead if it is a custom protocol. [Browsable(false)] [OrderedEquality] public List KnownPrefixes { get; } Property Value List Methods Clone() Creates a deep copy of this Capability instance. public override Capability Clone() Returns Capability The new copy of the Capability. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the capability in the form \"ID\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(UrlProtocol?, UrlProtocol?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(UrlProtocol? left, UrlProtocol? right) Parameters left UrlProtocol The left object right UrlProtocol The right object Returns bool true if the objects are equal; otherwise, false. operator !=(UrlProtocol?, UrlProtocol?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(UrlProtocol? left, UrlProtocol? right) Parameters left UrlProtocol The left object right UrlProtocol The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.Verb.html": { + "href": "api/ZeroInstall.Model.Capabilities.Verb.html", + "title": "Class Verb | Zero Install .NET API", + "keywords": "Class Verb Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll The mapping of an action/verb (e.g. open, edit) to a Command. [Serializable] [Equatable] public sealed class Verb : XmlUnknown, IEquatable, IDescriptionContainer, ICloneable, IEquatable Inheritance object XmlUnknown Verb Implements IEquatable IDescriptionContainer ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Fields NameEdit Canonical Name for opening a file in editing mode. public const string NameEdit = \"edit\" Field Value string NameOpen Canonical Name for opening a file. public const string NameOpen = \"open\" Field Value string NameOpenAs Canonical Name for opening a file in an application of the user's choice. public const string NameOpenAs = \"openas\" Field Value string NameOpenNew Canonical Name for opening a file in a new window. public const string NameOpenNew = \"opennew\" Field Value string NamePlay Canonical Name for opening a media file and starting playback immediately. public const string NamePlay = \"play\" Field Value string NamePreview Canonical Name for displaying a quick, simple response that allows the user to rapidly preview and dismiss items. public const string NamePreview = \"Preview\" Field Value string NamePrint Canonical Name for printing a file while displaying as little as necessary to complete the task. public const string NamePrint = \"print\" Field Value string Properties Arguments Command-line arguments to be passed to the command. Will be automatically escaped to allow proper concatenation of multiple arguments containing spaces. \"${item}\" gets replaced with the path of the file being opened. [Browsable(false)] [OrderedEquality] public List Arguments { get; } Property Value List ArgumentsLiteral Command-line arguments to be passed to the command in escaped form. \"%V\" gets replaced with the path of the file being opened. This is ignored if Arguments has elements. public string? ArgumentsLiteral { get; set; } Property Value string Command The name of the command in the Feed to use when launching via this capability; leave null for NameRun. [TypeConverter(typeof(CommandNameConverter))] public string? Command { get; set; } Property Value string Descriptions Full descriptions for different languages, which can be several paragraphs long. [Browsable(false)] [OrderedEquality] public LocalizableStringCollection Descriptions { get; } Property Value LocalizableStringCollection Extended Set this to true to hide the verb in the Windows context menu unless the Shift key is pressed when opening the menu. public bool Extended { get; set; } Property Value bool Name The name of the verb. Must be an alphanumeric string. Use canonical names to get automatic localization; specify Descriptions otherwise. [TypeConverter(typeof(VerbNameConverter))] public required string Name { get; set; } Property Value string SingleElementOnly Set this to true to hide the verb if more than one element is selected. public bool SingleElementOnly { get; set; } Property Value bool Remarks Use this to help avoid running out of resources if the user opens too many files. Methods Clone() Creates a deep copy of this Verb instance. public Verb Clone() Returns Verb The new copy of the Verb. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the extension in the form \"Name = Command\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(Verb?, Verb?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Verb? left, Verb? right) Parameters left Verb The left object right Verb The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Verb?, Verb?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Verb? left, Verb? right) Parameters left Verb The left object right Verb The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.VerbCapability.html": { + "href": "api/ZeroInstall.Model.Capabilities.VerbCapability.html", + "title": "Class VerbCapability | Zero Install .NET API", + "keywords": "Class VerbCapability Namespace ZeroInstall.Model.Capabilities Assembly ZeroInstall.Model.dll Abstract base class for capabilities that can have multiple Verbs. [Equatable] public abstract class VerbCapability : IconCapability, IEquatable, ICloneable, IEquatable, IEquatable, IIconContainer, IDescriptionContainer, IEquatable, IEquatable Inheritance object XmlUnknown Capability DefaultCapability IconCapability VerbCapability Implements IEquatable ICloneable IEquatable IEquatable IIconContainer IDescriptionContainer IEquatable IEquatable Derived ContextMenu DefaultProgram FileType UrlProtocol Inherited Members IconCapability.Descriptions IconCapability.Icons IconCapability.GetIcon(string) IconCapability.Equals(IconCapability) DefaultCapability.ExplicitOnly DefaultCapability.Equals(DefaultCapability) Capability.WindowsMachineWideOnly Capability.ID Capability.ConflictIDs Capability.Clone() Capability.Equals(Capability) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties Verbs A list of all available operations for the element. [Browsable(false)] [OrderedEquality] public List Verbs { get; } Property Value List Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(VerbCapability?) protected bool Equals(VerbCapability? other) Parameters other VerbCapability Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. Operators operator ==(VerbCapability?, VerbCapability?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(VerbCapability? left, VerbCapability? right) Parameters left VerbCapability The left object right VerbCapability The right object Returns bool true if the objects are equal; otherwise, false. operator !=(VerbCapability?, VerbCapability?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(VerbCapability? left, VerbCapability? right) Parameters left VerbCapability The left object right VerbCapability The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Capabilities.html": { + "href": "api/ZeroInstall.Model.Capabilities.html", + "title": "Namespace ZeroInstall.Model.Capabilities | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Model.Capabilities Extends the feed format with structures for describing application capabilities. This forms the basis for desktop integration. Classes AppRegistration Indicates that an application should be listed in the \"Set your Default Programs\" UI (Windows Vista and later). AutoPlay An application's ability to handle one or more AutoPlay events. AutoPlayEvent A specific AutoPlay event such as \"Audio CD inserted\". Capability A capability tells the desktop environment what an application can do and in which fashion this can be represented to the user. CapabilityList Groups a number of application Capabilitys (for a specific operating system) that can be registered in a desktop environment. CapabilityListExtensions Contains extension methods for CapabilityLists. ComServer An application's ability to act as a COM server. ContextMenu An entry in the file manager's context menu for all file types. DefaultCapability Abstract base class for capabilities that can be applied as default handlers for something at the user's request. DefaultProgram Can act as the default provider for a well-known service such web-browser, e-mail client. FileType An application's ability to open a certain file type. FileTypeExtension A specific file extension used to identify a file type. IconCapability Abstract base class for capabilities that can have multiple Icons and descriptions. KnownProtocolPrefix Names a well-known protocol prefix. Used for protocols that are shared across many applications (e.g. HTTP, FTP) but not for application-specific protocols. RemoveHook A hook/callback into the application to be called during 0install remove. UrlProtocol An application's ability to handle a certain URL protocol such as HTTP. Verb The mapping of an action/verb (e.g. open, edit) to a Command. VerbCapability Abstract base class for capabilities that can have multiple Verbs. Structs InstallCommands Lists the commands the application normally registers for use by Windows' \"Set Program Access and Defaults\". Used by registry virtualization to stand in for the actual Zero Install commands at runtime. Enums ContextMenuTarget Describes how important a dependency is (i.e. whether ignoring it is an option)." + }, + "api/ZeroInstall.Model.Catalog.html": { + "href": "api/ZeroInstall.Model.Catalog.html", + "title": "Class Catalog | Zero Install .NET API", + "keywords": "Class Catalog Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Contains a list of Feeds, reduced to only contain information relevant for overview lists. [Serializable] [XmlNamespace(\"xsi\", \"http://www.w3.org/2001/XMLSchema-instance\")] [Equatable] public class Catalog : XmlUnknown, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown Catalog Implements IEquatable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks See also: https://docs.0install.net/specifications/catalog/ Fields SchemaLocation Provides XML Editors with location hints for XSD files. public string SchemaLocation Field Value string XmlNamespace The XML namespace used for storing feed catalogs. Used in combination with XmlNamespace. public const string XmlNamespace = \"http://0install.de/schema/injector/catalog\" Field Value string XsdLocation The URI to retrieve an XSD containing the XML Schema information for this class in serialized form. public const string XsdLocation = \"https://docs.0install.net/specifications/catalog.xsd\" Field Value string XsiSchemaLocation Provides XML Editors with location hints for XSD files. public const string XsiSchemaLocation = \"http://0install.de/schema/injector/catalog https://docs.0install.net/specifications/catalog.xsd\" Field Value string Properties Feeds A list of Feeds contained within this catalog. [Browsable(false)] [OrderedEquality] public List Feeds { get; } Property Value List this[FeedUri] Returns the Feed with a specific URI. public Feed this[FeedUri uri] { get; } Parameters uri FeedUri The Uri to look for. Property Value Feed The identified Feed. Exceptions KeyNotFoundException No Feed matching uri was found in Feeds. Methods Clone() Creates a deep copy of this Catalog instance. public Catalog Clone() Returns Catalog The new copy of the Catalog. ContainsFeed(FeedUri) Determines whether this catalog contains a Feed with a specific URI. public bool ContainsFeed(FeedUri uri) Parameters uri FeedUri The Uri to look for. Returns bool true if a matching feed was found; false otherwise. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Catalog?) protected bool Equals(Catalog? other) Parameters other Catalog Returns bool FindByShortName(string?) Returns the first Feed that matches a specific short name. public Feed? FindByShortName(string? shortName) Parameters shortName string The short name to look for. Must match either Name or BinaryName of NameRun. Returns Feed The first matching Feed; null if no match was found. GetFeed(FeedUri) Returns the Feed with a specific URI. Safe for missing elements. public Feed? GetFeed(FeedUri uri) Parameters uri FeedUri The Uri to look for. Returns Feed The identified Feed; null if no matching entry was found. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Normalizes the catalog and all feeds it contains. Flattens inheritance structures, converts legacy elements, sets default values, etc.. public void Normalize(FeedUri? catalogUri = null) Parameters catalogUri FeedUri The URI the catalog was originally loaded from. Exceptions NotSupportedException The catalog requires a newer version of Zero Install. InvalidDataException A required property is not set or invalid. Search(string?) Returns all Feeds that match a specific search query. public IEnumerable Search(string? query) Parameters query string The search query. Must be contained within Name or BinaryName of NameRun. Returns IEnumerable All Feeds matching query. Operators operator ==(Catalog?, Catalog?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Catalog? left, Catalog? right) Parameters left Catalog The left object right Catalog The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Catalog?, Catalog?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Catalog? left, Catalog? right) Parameters left Catalog The left object right Catalog The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Category.html": { + "href": "api/ZeroInstall.Model.Category.html", + "title": "Class Category | Zero Install .NET API", + "keywords": "Class Category Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An application category (e.g. Game or Office). Used for organizing application menus. [Serializable] [Equatable] public sealed class Category : FeedElement, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement Category Implements IEquatable IEquatable ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Fields WellKnownNames Well-known values for Name if TypeNamespace is empty. public static readonly string[] WellKnownNames Field Value string[] Properties Name The category name as specified by the TypeNamespace. [TypeConverter(typeof(CategoryNameConverter))] public string? Name { get; set; } Property Value string TypeNamespace If no type is given, then the category is one of the 'Main' categories defined by the freedesktop.org menu specification (http://standards.freedesktop.org/menu-spec/latest/apa.html). Otherwise, it is a URI giving the namespace for the category. public string? TypeNamespace { get; set; } Property Value string Methods Clone() Creates a plain copy of this category. public Category Clone() Returns Category The cloned category. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns Name directly. Safe for parsing! public override string ToString() Returns string Operators operator ==(Category?, Category?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Category? left, Category? right) Parameters left Category The left object right Category The right object Returns bool true if the objects are equal; otherwise, false. implicit operator Category(string) Convenience cast for turning strings into Categorys. public static implicit operator Category(string value) Parameters value string Returns Category operator !=(Category?, Category?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Category? left, Category? right) Parameters left Category The left object right Category The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Command.html": { + "href": "api/ZeroInstall.Model.Command.html", + "title": "Class Command | Zero Install .NET API", + "keywords": "Class Command Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A command says how to run an Implementation as a program. [Serializable] [Equatable] public class Command : FeedElement, IEquatable, IEquatable, IArgBaseContainer, IBindingContainer, IDependencyContainer, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement Command Implements IEquatable IEquatable IArgBaseContainer IBindingContainer IDependencyContainer ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DependencyContainerExtensions.GetEffectiveRestrictions(IDependencyContainer) Fields NameCompile Canonical Name used by 0compile. public const string NameCompile = \"compile\" Field Value string NameRun Canonical Name corresponding to Main. public const string NameRun = \"run\" Field Value string NameRunGui Conventional Name for GUI-only versions of applications. public const string NameRunGui = \"run-gui\" Field Value string NameTest Canonical Name corresponding to SelfTest. public const string NameTest = \"test\" Field Value string Properties Arguments A list of command-line arguments to be passed to an implementation executable. [Browsable(false)] [OrderedEquality] public List Arguments { get; } Property Value List Bindings A list of Bindings for Implementations to locate Dependencys. [Browsable(false)] [OrderedEquality] public List Bindings { get; } Property Value List Dependencies A list of interfaces this command depends upon. [Browsable(false)] [OrderedEquality] public List Dependencies { get; } Property Value List Name The name of the command. Well-known names are NameRun, NameTest and NameCompile. [TypeConverter(typeof(CommandNameConverter))] public required string Name { get; set; } Property Value string Path The relative path of an executable inside the implementation that should be executed to run this command. public string? Path { get; set; } Property Value string Restrictions A list of interfaces that are restricted to specific versions when used. [Browsable(false)] [OrderedEquality] public List Restrictions { get; } Property Value List Runner A special kind of dependency: the program that is used to run this one. For example, a Python program might specify Python as its runner. [Browsable(false)] public Runner? Runner { get; set; } Property Value Runner WorkingDir Switches the working directory of a process on startup to a location within an implementation. [Browsable(false)] public WorkingDir? WorkingDir { get; set; } Property Value WorkingDir Methods Clone() Creates a deep copy of this Command instance. public Command Clone() Returns Command The new copy of the Command. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Command?) protected bool Equals(Command? other) Parameters other Command Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public virtual void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the Command in the form \"Name (Path)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(Command?, Command?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Command? left, Command? right) Parameters left Command The left object right Command The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Command?, Command?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Command? left, Command? right) Parameters left Command The left object right Command The right object Returns bool true if the objects are not equal; otherwise, false. See Also Commands" + }, + "api/ZeroInstall.Model.Constraint.html": { + "href": "api/ZeroInstall.Model.Constraint.html", + "title": "Class Constraint | Zero Install .NET API", + "keywords": "Class Constraint Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Restricts the set of versions from which the injector may choose an Implementation. [Serializable] [Equatable] public class Constraint : FeedElement, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement Constraint Implements IEquatable IEquatable ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties Before This version and all later versions are unsuitable. public ImplementationVersion? Before { get; set; } Property Value ImplementationVersion NotBefore This is the lowest-numbered version that can be chosen. public ImplementationVersion? NotBefore { get; set; } Property Value ImplementationVersion Methods Clone() Creates a copy of this Constraint instance. public Constraint Clone() Returns Constraint The new copy of the Constraint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Constraint?) protected bool Equals(Constraint? other) Parameters other Constraint Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the constraint in the form \"NotBefore =< Ver %lt; Before\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(Constraint?, Constraint?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Constraint? left, Constraint? right) Parameters left Constraint The left object right Constraint The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Constraint?, Constraint?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Constraint? left, Constraint? right) Parameters left Constraint The left object right Constraint The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.CopyFromStep.html": { + "href": "api/ZeroInstall.Model.CopyFromStep.html", + "title": "Class CopyFromStep | Zero Install .NET API", + "keywords": "Class CopyFromStep Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Copies files or directories from another implementation specified elsewhere in the same feed. [Serializable] [Equatable] public sealed class CopyFromStep : FeedElement, IEquatable, IEquatable, IRecipeStep, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement CopyFromStep Implements IEquatable IEquatable IRecipeStep ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Destination The destination file or directory relative to the implementation root as a Unix-style path; null for top-level. Must be set if Source points to a file. public string? Destination { get; set; } Property Value string ID The ID of the Implementation to copy from. public string? ID { get; set; } Property Value string Implementation Used to hold the Implementation the ID references after Normalize(FeedUri?) has been executed. [Browsable(false)] public Implementation? Implementation { get; set; } Property Value Implementation Source The source file or directory relative to the source implementation root as a Unix-style path; null or Empty for entire implementation. public string? Source { get; set; } Property Value string Methods Clone() Creates a deep copy of this CopyFromStep instance. public IRecipeStep Clone() Returns IRecipeStep The new copy of the CopyFromStep. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Converts legacy elements, sets default values, etc.. public void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions UriFormatException Href is relative and feedUri is a remote URI. ToString() Returns the copy-from step in the form \"Copy from ID (Source => Destination)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(CopyFromStep?, CopyFromStep?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(CopyFromStep? left, CopyFromStep? right) Parameters left CopyFromStep The left object right CopyFromStep The right object Returns bool true if the objects are equal; otherwise, false. operator !=(CopyFromStep?, CopyFromStep?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(CopyFromStep? left, CopyFromStep? right) Parameters left CopyFromStep The left object right CopyFromStep The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Cpu.html": { + "href": "api/ZeroInstall.Model.Cpu.html", + "title": "Enum Cpu | Zero Install .NET API", + "keywords": "Enum Cpu Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Describes a CPU architecture. [TypeConverter(typeof(EnumXmlConverter))] public enum Cpu Extension Methods ArchitectureExtensions.Is32Bit(Cpu) ArchitectureExtensions.Is64Bit(Cpu) ArchitectureExtensions.RunsOn(Cpu, Cpu) Fields AArch64 = 10 Supports ARMv8 CPUs in 64-bit mode. All = 0 Supports all CPU architectures (e.g. developed with cross-platform language like Java). ArmV6L = 8 Supports ARMv6 CPUs in little-endian mode. ArmV7L = 9 Supports ARMv7 CPUs in little-endian mode. I386 = 1 Supports CPUs with the i386 architecture or newer (up to i686). I486 = 2 Supports CPUs with the i486 architecture or newer (up to i686). I586 = 3 Supports CPUs with the i586 architecture or newer (up to i686). I686 = 4 Supports CPUs with the i686. Ppc = 6 Supports CPUs with the PowerPC-architecture (used in older Macs). Ppc64 = 7 Requires a 64-bit capable PowerPC CPU. Source = 99 This is a source release and therefore architecture-independent. Unknown = 100 The supported CPU architecture has not been set yet. X64 = 5 Requires a x86-64 capable CPU." + }, + "api/ZeroInstall.Model.Dependency.html": { + "href": "api/ZeroInstall.Model.Dependency.html", + "title": "Class Dependency | Zero Install .NET API", + "keywords": "Class Dependency Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A reference to an interface that is required as dependency. [Serializable] [Equatable] public class Dependency : Restriction, IEquatable, IEquatable, ICloneable, IEquatable, IInterfaceUriBindingContainer, IInterfaceUri, IBindingContainer, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement Restriction Dependency Implements IEquatable IEquatable ICloneable IEquatable IInterfaceUriBindingContainer IInterfaceUri IBindingContainer ICloneable IEquatable Derived Runner Inherited Members Restriction.InterfaceUri Restriction.OS Restriction.Versions Restriction.Constraints Restriction.DistributionZeroInstall Restriction.Distributions Restriction.DistributionsString Restriction.Equals(Restriction) FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties Bindings A list of Bindings for Implementations to locate Dependencys. [Browsable(false)] [OrderedEquality] public List Bindings { get; } Property Value List Importance Controls how important this dependency is (i.e. whether ignoring it is an option). public Importance Importance { get; set; } Property Value Importance Use This can be used to indicate that this dependency is only needed in some cases. Deprecated; use Commands instead. public string? Use { get; set; } Property Value string XmlTagName protected override string XmlTagName { get; } Property Value string Methods Clone() Creates a deep copy of this Dependency instance. public override Restriction Clone() Returns Restriction The new copy of the Dependency. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Dependency?) protected bool Equals(Dependency? other) Parameters other Dependency Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. IsApplicable(Requirements) Determines whether this reference is applicable for the given requirements. public override bool IsApplicable(Requirements requirements) Parameters requirements Requirements Returns bool Normalize() Flattens inheritance structures, Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the dependency in the form \"Interface (Use)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(Dependency?, Dependency?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Dependency? left, Dependency? right) Parameters left Dependency The left object right Dependency The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Dependency?, Dependency?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Dependency? left, Dependency? right) Parameters left Dependency The left object right Dependency The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.DependencyContainerExtensions.html": { + "href": "api/ZeroInstall.Model.DependencyContainerExtensions.html", + "title": "Class DependencyContainerExtensions | Zero Install .NET API", + "keywords": "Class DependencyContainerExtensions Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Provides extension methods for IDependencyContainer. public static class DependencyContainerExtensions Inheritance object DependencyContainerExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetEffectiveRestrictions(IDependencyContainer) A combination of Restrictions and Dependencies. public static IEnumerable GetEffectiveRestrictions(this IDependencyContainer container) Parameters container IDependencyContainer Returns IEnumerable" + }, + "api/ZeroInstall.Model.Design.ArgBaseConverter.html": { + "href": "api/ZeroInstall.Model.Design.ArgBaseConverter.html", + "title": "Class ArgBaseConverter | Zero Install .NET API", + "keywords": "Class ArgBaseConverter Namespace ZeroInstall.Model.Design Assembly ZeroInstall.Model.dll Converts strings to Args and Args/ForEachArgs to strings. public class ArgBaseConverter : TypeConverter Inheritance object TypeConverter ArgBaseConverter Inherited Members TypeConverter.CanConvertFrom(Type) TypeConverter.CanConvertTo(ITypeDescriptorContext, Type) TypeConverter.CanConvertTo(Type) TypeConverter.ConvertFrom(object) TypeConverter.ConvertFromInvariantString(ITypeDescriptorContext, string) TypeConverter.ConvertFromInvariantString(string) TypeConverter.ConvertFromString(ITypeDescriptorContext, CultureInfo, string) TypeConverter.ConvertFromString(ITypeDescriptorContext, string) TypeConverter.ConvertFromString(string) TypeConverter.ConvertTo(object, Type) TypeConverter.ConvertToInvariantString(ITypeDescriptorContext, object) TypeConverter.ConvertToInvariantString(object) TypeConverter.ConvertToString(ITypeDescriptorContext, CultureInfo, object) TypeConverter.ConvertToString(ITypeDescriptorContext, object) TypeConverter.ConvertToString(object) TypeConverter.CreateInstance(IDictionary) TypeConverter.CreateInstance(ITypeDescriptorContext, IDictionary) TypeConverter.GetConvertFromException(object) TypeConverter.GetConvertToException(object, Type) TypeConverter.GetCreateInstanceSupported() TypeConverter.GetCreateInstanceSupported(ITypeDescriptorContext) TypeConverter.GetProperties(ITypeDescriptorContext, object) TypeConverter.GetProperties(ITypeDescriptorContext, object, Attribute[]) TypeConverter.GetProperties(object) TypeConverter.GetPropertiesSupported() TypeConverter.GetPropertiesSupported(ITypeDescriptorContext) TypeConverter.GetStandardValues() TypeConverter.GetStandardValues(ITypeDescriptorContext) TypeConverter.GetStandardValuesExclusive() TypeConverter.GetStandardValuesExclusive(ITypeDescriptorContext) TypeConverter.GetStandardValuesSupported() TypeConverter.GetStandardValuesSupported(ITypeDescriptorContext) TypeConverter.IsValid(ITypeDescriptorContext, object) TypeConverter.IsValid(object) TypeConverter.SortProperties(PropertyDescriptorCollection, string[]) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods CanConvertFrom(ITypeDescriptorContext?, Type) Returns whether this converter can convert an object of the given type to the type of this converter, using the specified context. public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) Parameters context ITypeDescriptorContext An ITypeDescriptorContext that provides a format context. sourceType Type A Type that represents the type you want to convert from. Returns bool true if this converter can perform the conversion; otherwise, false. ConvertFrom(ITypeDescriptorContext?, CultureInfo?, object) Converts the given object to the type of this converter, using the specified context and culture information. public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value) Parameters context ITypeDescriptorContext An ITypeDescriptorContext that provides a format context. culture CultureInfo The CultureInfo to use as the current culture. value object The object to convert. Returns object An object that represents the converted value. Exceptions NotSupportedException The conversion cannot be performed. ConvertTo(ITypeDescriptorContext?, CultureInfo?, object?, Type) Converts the given value object to the specified type, using the specified context and culture information. public override object? ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value, Type destinationType) Parameters context ITypeDescriptorContext An ITypeDescriptorContext that provides a format context. culture CultureInfo A CultureInfo. If null is passed, the current culture is assumed. value object The object to convert. destinationType Type The Type to convert the value parameter to. Returns object An object that represents the converted value. Exceptions ArgumentNullException The destinationType parameter is null. NotSupportedException The conversion cannot be performed." + }, + "api/ZeroInstall.Model.Design.CategoryNameConverter.html": { + "href": "api/ZeroInstall.Model.Design.CategoryNameConverter.html", + "title": "Class CategoryNameConverter | Zero Install .NET API", + "keywords": "Class CategoryNameConverter Namespace ZeroInstall.Model.Design Assembly ZeroInstall.Model.dll public class CategoryNameConverter : StringConverter Inheritance object TypeConverter StringConverter CategoryNameConverter Inherited Members StringConverter.CanConvertFrom(ITypeDescriptorContext, Type) StringConverter.ConvertFrom(ITypeDescriptorContext, CultureInfo, object) TypeConverter.CanConvertFrom(Type) TypeConverter.CanConvertTo(ITypeDescriptorContext, Type) TypeConverter.CanConvertTo(Type) TypeConverter.ConvertFrom(object) TypeConverter.ConvertFromInvariantString(ITypeDescriptorContext, string) TypeConverter.ConvertFromInvariantString(string) TypeConverter.ConvertFromString(ITypeDescriptorContext, CultureInfo, string) TypeConverter.ConvertFromString(ITypeDescriptorContext, string) TypeConverter.ConvertFromString(string) TypeConverter.ConvertTo(ITypeDescriptorContext, CultureInfo, object, Type) TypeConverter.ConvertTo(object, Type) TypeConverter.ConvertToInvariantString(ITypeDescriptorContext, object) TypeConverter.ConvertToInvariantString(object) TypeConverter.ConvertToString(ITypeDescriptorContext, CultureInfo, object) TypeConverter.ConvertToString(ITypeDescriptorContext, object) TypeConverter.ConvertToString(object) TypeConverter.CreateInstance(IDictionary) TypeConverter.CreateInstance(ITypeDescriptorContext, IDictionary) TypeConverter.GetConvertFromException(object) TypeConverter.GetConvertToException(object, Type) TypeConverter.GetCreateInstanceSupported() TypeConverter.GetCreateInstanceSupported(ITypeDescriptorContext) TypeConverter.GetProperties(ITypeDescriptorContext, object) TypeConverter.GetProperties(ITypeDescriptorContext, object, Attribute[]) TypeConverter.GetProperties(object) TypeConverter.GetPropertiesSupported() TypeConverter.GetPropertiesSupported(ITypeDescriptorContext) TypeConverter.GetStandardValues() TypeConverter.GetStandardValuesExclusive() TypeConverter.GetStandardValuesSupported() TypeConverter.IsValid(ITypeDescriptorContext, object) TypeConverter.IsValid(object) TypeConverter.SortProperties(PropertyDescriptorCollection, string[]) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetStandardValues(ITypeDescriptorContext?) Returns a collection of standard values for the data type this type converter is designed for when provided with a format context. public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext? context) Parameters context ITypeDescriptorContext An ITypeDescriptorContext that provides a format context that can be used to extract additional information about the environment from which this converter is invoked. This parameter or properties of this parameter can be null. Returns TypeConverter.StandardValuesCollection A TypeConverter.StandardValuesCollection that holds a standard set of valid values, or null if the data type does not support a standard set of values. GetStandardValuesExclusive(ITypeDescriptorContext?) Returns whether the collection of standard values returned from GetStandardValues() is an exclusive list of possible values, using the specified context. public override bool GetStandardValuesExclusive(ITypeDescriptorContext? context) Parameters context ITypeDescriptorContext An ITypeDescriptorContext that provides a format context. Returns bool true if the TypeConverter.StandardValuesCollection returned from GetStandardValues() is an exhaustive list of possible values; false if other values are possible. GetStandardValuesSupported(ITypeDescriptorContext?) Returns whether this object supports a standard set of values that can be picked from a list, using the specified context. public override bool GetStandardValuesSupported(ITypeDescriptorContext? context) Parameters context ITypeDescriptorContext An ITypeDescriptorContext that provides a format context. Returns bool true if GetStandardValues() should be called to find a common set of values the object supports; otherwise, false." + }, + "api/ZeroInstall.Model.Design.html": { + "href": "api/ZeroInstall.Model.Design.html", + "title": "Namespace ZeroInstall.Model.Design | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Model.Design TypeConverters used for serialization and to provide a better runtime experience when using PropertyGrids. Classes ArgBaseConverter Converts strings to Args and Args/ForEachArgs to strings. CategoryNameConverter" + }, + "api/ZeroInstall.Model.DownloadRetrievalMethod.html": { + "href": "api/ZeroInstall.Model.DownloadRetrievalMethod.html", + "title": "Class DownloadRetrievalMethod | Zero Install .NET API", + "keywords": "Class DownloadRetrievalMethod Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Represents a retrieval method that downloads data from the net. [Equatable] public abstract class DownloadRetrievalMethod : RetrievalMethod, IEquatable, IEquatable, ICloneable, IRecipeStep, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement RetrievalMethod DownloadRetrievalMethod Implements IEquatable IEquatable ICloneable IRecipeStep ICloneable IEquatable Derived Archive SingleFile Inherited Members RetrievalMethod.Clone() FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties DownloadSize The effective size of the file on the server. [Browsable(false)] public virtual long DownloadSize { get; } Property Value long Href The URL to download the file from. Relative URLs are only allowed in local feed files. [Browsable(false)] public required Uri Href { get; set; } Property Value Uri Size The size of the file in bytes. The file must have the given size or it will be rejected. public long Size { get; set; } Property Value long Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(DownloadRetrievalMethod?) protected bool Equals(DownloadRetrievalMethod? other) Parameters other DownloadRetrievalMethod Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Sets missing default values and handles legacy elements. public override void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions UriFormatException Href is relative and feedUri is a remote URI. InvalidDataException A required property is not set or invalid. Operators operator ==(DownloadRetrievalMethod?, DownloadRetrievalMethod?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(DownloadRetrievalMethod? left, DownloadRetrievalMethod? right) Parameters left DownloadRetrievalMethod The left object right DownloadRetrievalMethod The right object Returns bool true if the objects are equal; otherwise, false. operator !=(DownloadRetrievalMethod?, DownloadRetrievalMethod?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(DownloadRetrievalMethod? left, DownloadRetrievalMethod? right) Parameters left DownloadRetrievalMethod The left object right DownloadRetrievalMethod The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Element.html": { + "href": "api/ZeroInstall.Model.Element.html", + "title": "Class Element | Zero Install .NET API", + "keywords": "Class Element Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Abstract base class for ImplementationBase and Group. Contains those parameters that can be transferred from a Group to an Implementation. [Equatable] public abstract class Element : TargetBase, IEquatable, IEquatable, IEquatable, IBindingContainer, IDependencyContainer, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement TargetBase Element Implements IEquatable IEquatable IEquatable IBindingContainer IDependencyContainer ICloneable IEquatable Derived Group ImplementationBase PackageImplementation Inherited Members TargetBase.Languages TargetBase.Architecture TargetBase.CloneFromTo(TargetBase, TargetBase) TargetBase.Equals(TargetBase) FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DependencyContainerExtensions.GetEffectiveRestrictions(IDependencyContainer) Fields ReleaseDateFormat The Format(string, params object[]) format used by ReleasedString public const string ReleaseDateFormat = \"yyyy-MM-dd\" Field Value string ReleasedVerbatim Used to store the unparsed release date string (instead of Released) if it ContainsTemplateVariables(string). protected string? ReleasedVerbatim Field Value string Properties Bindings A list of Bindings for Implementations to locate Dependencys. [Browsable(false)] [OrderedEquality] public List Bindings { get; } Property Value List Commands A list of commands that can be used to launch this implementation. [Browsable(false)] [OrderedEquality] public List Commands { get; } Property Value List Remarks This will eventually replace Main and SelfTest. Dependencies A list of interfaces this implementation depends upon. [Browsable(false)] [OrderedEquality] public List Dependencies { get; } Property Value List DocDir The relative path of a directory inside the implementation that contains the package's documentation. This is the directory that would end up inside /usr/share/doc on a traditional Linux system. public string? DocDir { get; set; } Property Value string this[string] Returns the Command with a specific name. public Command? this[string name] { get; } Parameters name string The Name to look for; Empty for none. Property Value Command The first matching command; null if name is Empty. Remarks Should only be called after Normalize(FeedUri?) has been called, otherwise nested Implementations will not be considered. Exceptions KeyNotFoundException No matching Command was found. License License terms (typically a Trove category, as used on freshmeat.net). [TypeConverter(typeof(LicenseNameConverter))] public string? License { get; set; } Property Value string Main The relative path of an executable inside the implementation that should be executed by default when the interface is run. If an implementation has no main setting, then it cannot be executed without specifying one manually. This typically means that the interface is for a library. public string? Main { get; set; } Property Value string Remarks This is deprecated in favor of Commands. null corresponds to no Commands. An empty string corresponds to a Command with no Path. Released The date this implementation was made available. For development versions checked out from version control this attribute should not be present. public virtual DateTime Released { get; set; } Property Value DateTime ReleasedString The string form of Released. Only use this if the string ContainsTemplateVariables(string). public virtual string? ReleasedString { get; set; } Property Value string See Also Released Restrictions A list of interfaces that are restricted to specific versions when used. [Browsable(false)] [OrderedEquality] public List Restrictions { get; } Property Value List RolloutPercentage The percentage (0-100) of users that should treat this as Stable. May only be set if Stability is Unset or Testing. This can be used to perform staged rollouts. public virtual int RolloutPercentage { get; set; } Property Value int SelfTest The relative path of an executable inside the implementation that can be executed to test the program. The program must be non-interactive (e.g. it can't open any windows or prompt for input). It should return with an exit status of 0 if the tests pass. Any other status indicates failure. public string? SelfTest { get; set; } Property Value string Remarks This is deprecated in favor of Commands. null corresponds to no Commands. An empty string corresponds to a Command with no Path. Stability The default stability rating for this implementation. public virtual Stability Stability { get; set; } Property Value Stability Version The version number of the implementation. public virtual ImplementationVersion? Version { get; set; } Property Value ImplementationVersion VersionModifier A string to be appended to the version. The purpose of this is to allow complex version numbers (such as \"1.0-rc2\") in older versions of the injector. public virtual string? VersionModifier { get; set; } Property Value string Methods Clone() Creates a deep copy of this Element instance. public abstract Element Clone() Returns Element The new copy of the Element. CloneFromTo(Element, Element) Copies all known values from one instance to another. Helper method for instance cloning. protected static void CloneFromTo(Element from, Element to) Parameters from Element to Element ContainsCommand(string) Determines whether Commands contains a Command with a specific name. public bool ContainsCommand(string name) Parameters name string The Name to look for; Empty for none. Returns bool true if a matching command was found or if name is Empty; false otherwise. EnsureAttributes() Ensures that required values deserialized from XML attributes are set (not null). protected virtual void EnsureAttributes() Exceptions InvalidDataException A required property is not set or invalid. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Element?) protected bool Equals(Element? other) Parameters other Element Returns bool GetCommand(string) Returns the Command with a specific name. Safe for missing elements. public Command? GetCommand(string name) Parameters name string The Name to look for. Returns Command The first matching command; null if no matching one was found. Remarks Should only be called after Normalize(FeedUri?) has been called, otherwise nested Implementations will not be considered. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Flattens inheritance structures, Converts legacy elements, sets default values, etc.. public virtual void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions InvalidDataException A required property is not set or invalid. Operators operator ==(Element?, Element?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Element? left, Element? right) Parameters left Element The left object right Element The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Element?, Element?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Element? left, Element? right) Parameters left Element The left object right Element The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.ElementCollectionExtensions.html": { + "href": "api/ZeroInstall.Model.ElementCollectionExtensions.html", + "title": "Class ElementCollectionExtensions | Zero Install .NET API", + "keywords": "Class ElementCollectionExtensions Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Provides extension methods for Element collections. public static class ElementCollectionExtensions Inheritance object ElementCollectionExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetImplementations(IReadOnlyCollection) Returns a flat list of all Implementations. public static IEnumerable GetImplementations(this IReadOnlyCollection elements) Parameters elements IReadOnlyCollection Returns IEnumerable RemoveImplementation(ICollection, string) Removes an Implementation identified by its ID. public static bool RemoveImplementation(this ICollection elements, string id) Parameters elements ICollection id string Returns bool true if the implementation was removed; false if the implementation could not be found." + }, + "api/ZeroInstall.Model.EntryPoint.html": { + "href": "api/ZeroInstall.Model.EntryPoint.html", + "title": "Class EntryPoint | Zero Install .NET API", + "keywords": "Class EntryPoint Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Associates a Command with a user-friendly name and description. [Serializable] [Equatable] public sealed class EntryPoint : FeedElement, IEquatable, IEquatable, IIconContainer, ISummaryContainer, IDescriptionContainer, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement EntryPoint Implements IEquatable IEquatable IIconContainer ISummaryContainer IDescriptionContainer ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties AppId The Application User Model ID; used by Windows to associate shortcuts and pinned taskbar entries with running processes. May not be longer than 128 characters and may not contain whitespace. public string? AppId { get; set; } Property Value string BinaryName The canonical name of the binary supplying the command (without file extensions). This is used to suggest suitable alias names. public string? BinaryName { get; set; } Property Value string Remarks Will default to Command when left null. Command The name of the Command this entry point represents. [TypeConverter(typeof(CommandNameConverter))] public required string Command { get; set; } Property Value string Descriptions Full descriptions for different languages, which can be several paragraphs long. [Browsable(false)] [OrderedEquality] public LocalizableStringCollection Descriptions { get; } Property Value LocalizableStringCollection Icons Zero or more icons representing the command. Used for desktop icons, menu entries, etc.. [Browsable(false)] [OrderedEquality] public List Icons { get; } Property Value List Names User-friendly names for the command. If not present, Command is used instead. [Browsable(false)] [OrderedEquality] public LocalizableStringCollection Names { get; } Property Value LocalizableStringCollection NeedsTerminal If true, indicates that the Command represented by this entry point requires a terminal in order to run. public bool NeedsTerminal { get; set; } Property Value bool SuggestAutoStart If true, indicates that this entry point should be offered as an auto-start candidate to the user. public bool SuggestAutoStart { get; set; } Property Value bool SuggestSendTo If true, indicates that this entry point should be offered as a candidate for the \"Send To\" context menu to the user. public bool SuggestSendTo { get; set; } Property Value bool Summaries Short one-line descriptions for different languages; the first word should not be upper-case unless it is a proper noun (e.g. \"cures all ills\"). [Browsable(false)] [OrderedEquality] public LocalizableStringCollection Summaries { get; } Property Value LocalizableStringCollection Methods Clone() Creates a deep copy of this EntryPoint instance. public EntryPoint Clone() Returns EntryPoint The new copy of the EntryPoint. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the EntryPoint in the form \"Command (BinaryName)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(EntryPoint?, EntryPoint?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(EntryPoint? left, EntryPoint? right) Parameters left EntryPoint The left object right EntryPoint The right object Returns bool true if the objects are equal; otherwise, false. operator !=(EntryPoint?, EntryPoint?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(EntryPoint? left, EntryPoint? right) Parameters left EntryPoint The left object right EntryPoint The right object Returns bool true if the objects are not equal; otherwise, false. See Also EntryPoints" + }, + "api/ZeroInstall.Model.EnvironmentBinding.html": { + "href": "api/ZeroInstall.Model.EnvironmentBinding.html", + "title": "Class EnvironmentBinding | Zero Install .NET API", + "keywords": "Class EnvironmentBinding Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Make a chosen Implementation available by setting environment variables. [Serializable] [Equatable] public sealed class EnvironmentBinding : Binding, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement Binding EnvironmentBinding Implements IEquatable IEquatable ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Default If the environment variable is not currently set then this value is used for prepending or appending. public string? Default { get; set; } Property Value string Insert The relative path of the item within the implementation to insert into the variable value. Use . to publish the root directory. public string? Insert { get; set; } Property Value string Remarks If this is set Value must be null. Mode Controls how the Insert or Value is added to the variable. public EnvironmentMode Mode { get; set; } Property Value EnvironmentMode Name The name of the environment variable. public required string Name { get; set; } Property Value string Separator Overrides the default separator character (\":\" on POSIX and \";\" on Windows). public string? Separator { get; set; } Property Value string Value A static value to set the variable to. public string? Value { get; set; } Property Value string Remarks If this is set Insert must be null. Methods Clone() Creates a deep copy of this EnvironmentBinding instance. public override Binding Clone() Returns Binding The new copy of the EnvironmentBinding. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the binding in the form \"Name = Value (Mode, Default)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(EnvironmentBinding?, EnvironmentBinding?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(EnvironmentBinding? left, EnvironmentBinding? right) Parameters left EnvironmentBinding The left object right EnvironmentBinding The right object Returns bool true if the objects are equal; otherwise, false. operator !=(EnvironmentBinding?, EnvironmentBinding?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(EnvironmentBinding? left, EnvironmentBinding? right) Parameters left EnvironmentBinding The left object right EnvironmentBinding The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.EnvironmentMode.html": { + "href": "api/ZeroInstall.Model.EnvironmentMode.html", + "title": "Enum EnvironmentMode | Zero Install .NET API", + "keywords": "Enum EnvironmentMode Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Controls how Insert or Value is added to a variable. public enum EnvironmentMode Fields Append = 1 The absolute path of the item is append to the end of the current value of the variable. Prepend = 0 The absolute path of the item is prepended to the current value of the variable. Replace = 2 The old value is overwritten, and the Default attribute is ignored." + }, + "api/ZeroInstall.Model.ExecutableInBinding.html": { + "href": "api/ZeroInstall.Model.ExecutableInBinding.html", + "title": "Class ExecutableInBinding | Zero Install .NET API", + "keywords": "Class ExecutableInBinding Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Make a chosen Implementation available as an executable at runtime. [Equatable] public abstract class ExecutableInBinding : Binding, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement Binding ExecutableInBinding Implements IEquatable IEquatable ICloneable IEquatable Derived ExecutableInPath ExecutableInVar GenericBinding Inherited Members Binding.Clone() Binding.Normalize() FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties Command The name of the Command in the Implementation to launch; leave null for NameRun. [TypeConverter(typeof(CommandNameConverter))] public string? Command { get; set; } Property Value string Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(ExecutableInBinding?) protected bool Equals(ExecutableInBinding? other) Parameters other ExecutableInBinding Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Operators operator ==(ExecutableInBinding?, ExecutableInBinding?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ExecutableInBinding? left, ExecutableInBinding? right) Parameters left ExecutableInBinding The left object right ExecutableInBinding The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ExecutableInBinding?, ExecutableInBinding?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ExecutableInBinding? left, ExecutableInBinding? right) Parameters left ExecutableInBinding The left object right ExecutableInBinding The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.ExecutableInPath.html": { + "href": "api/ZeroInstall.Model.ExecutableInPath.html", + "title": "Class ExecutableInPath | Zero Install .NET API", + "keywords": "Class ExecutableInPath Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Make a chosen Implementation available as an executable in the search PATH. [Serializable] [Equatable] public sealed class ExecutableInPath : ExecutableInBinding, IEquatable, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown FeedElement Binding ExecutableInBinding ExecutableInPath Implements IEquatable IEquatable ICloneable IEquatable IEquatable Inherited Members ExecutableInBinding.Command FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Name The name of the executable (without file extensions). public required string Name { get; set; } Property Value string Methods Clone() Creates a deep copy of this ExecutableInPath instance. public override Binding Clone() Returns Binding The new copy of the ExecutableInPath. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the binding in the form \" Name = Command\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(ExecutableInPath?, ExecutableInPath?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ExecutableInPath? left, ExecutableInPath? right) Parameters left ExecutableInPath The left object right ExecutableInPath The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ExecutableInPath?, ExecutableInPath?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ExecutableInPath? left, ExecutableInPath? right) Parameters left ExecutableInPath The left object right ExecutableInPath The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.ExecutableInVar.html": { + "href": "api/ZeroInstall.Model.ExecutableInVar.html", + "title": "Class ExecutableInVar | Zero Install .NET API", + "keywords": "Class ExecutableInVar Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Make a chosen Implementation available as an executable path in an environment variable. [Serializable] [Equatable] public sealed class ExecutableInVar : ExecutableInBinding, IEquatable, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown FeedElement Binding ExecutableInBinding ExecutableInVar Implements IEquatable IEquatable ICloneable IEquatable IEquatable Inherited Members ExecutableInBinding.Command FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Name The name of the environment variable. public required string Name { get; set; } Property Value string Methods Clone() Creates a deep copy of this ExecutableInVar instance. public override Binding Clone() Returns Binding The new copy of the ExecutableInVar. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the binding in the form \"Name = Command\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(ExecutableInVar?, ExecutableInVar?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ExecutableInVar? left, ExecutableInVar? right) Parameters left ExecutableInVar The left object right ExecutableInVar The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ExecutableInVar?, ExecutableInVar?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ExecutableInVar? left, ExecutableInVar? right) Parameters left ExecutableInVar The left object right ExecutableInVar The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Feed.html": { + "href": "api/ZeroInstall.Model.Feed.html", + "title": "Class Feed | Zero Install .NET API", + "keywords": "Class Feed Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A feed contains all the information required to download and execute an application. [Serializable] [XmlNamespace(\"xsi\", \"http://www.w3.org/2001/XMLSchema-instance\")] [Equatable] public class Feed : XmlUnknown, IEquatable, IElementContainer, ISummaryContainer, IDescriptionContainer, IIconContainer, ICloneable, IEquatable Inheritance object XmlUnknown Feed Implements IEquatable IElementContainer ISummaryContainer IDescriptionContainer IIconContainer ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Remarks See also: https://docs.0install.net/specifications/feed/ Fields SchemaLocation Provides XML Editors with location hints for XSD files. public string? SchemaLocation Field Value string XmlNamespace The XML namespace used for storing feed/interface-related data. public const string XmlNamespace = \"http://zero-install.sourceforge.net/2004/injector/interface\" Field Value string XsdLocation The URI to retrieve an XSD containing the XML Schema information for this class in serialized form. public const string XsdLocation = \"https://docs.0install.net/specifications/feed.xsd\" Field Value string XsiSchemaLocation Provides XML Editors with location hints for XSD files. public const string XsiSchemaLocation = \"http://zero-install.sourceforge.net/2004/injector/interface https://docs.0install.net/specifications/feed.xsd http://0install.de/schema/desktop-integration/capabilities https://docs.0install.net/specifications/capabilities.xsd\" Field Value string Properties CapabilityLists A set of Capability lists for different architectures. [Browsable(false)] [OrderedEquality] public List CapabilityLists { get; } Property Value List CatalogUri The URI of the Catalog this feed was stored within. Used as an implementation detail; not part of the regular feed format! [Browsable(false)] [IgnoreEquality] public FeedUri? CatalogUri { get; set; } Property Value FeedUri Categories A list of well-known categories the applications fits into. May influence the placement in the application menu. [Browsable(false)] [OrderedEquality] public List Categories { get; } Property Value List Descriptions Full descriptions for different languages, which can be several paragraphs long. [Browsable(false)] [OrderedEquality] public LocalizableStringCollection Descriptions { get; } Property Value LocalizableStringCollection Elements A list of Groups and Implementations contained within this interface. [Browsable(false)] [OrderedEquality] public List Elements { get; } Property Value List EntryPoints A list of EntryPoints for starting this interface. [Browsable(false)] [OrderedEquality] public List EntryPoints { get; } Property Value List FeedFor The implementations in this feed are implementations of the given interface. This is used when adding a third-party feed. [Browsable(false)] [OrderedEquality] public List FeedFor { get; } Property Value List Feeds Zero ore more additional feeds containing implementations of this interface. [Browsable(false)] [OrderedEquality] public List Feeds { get; } Property Value List Homepage The URL of a web-page describing feed or program in more detail. [Browsable(false)] public Uri? Homepage { get; set; } Property Value Uri Icons Icons representing the application. Used in the Catalog GUI as well as for desktop icons, menu entries, etc.. [Browsable(false)] [OrderedEquality] public List Icons { get; } Property Value List Implementations A flat list of all Implementations contained in this feed. [Browsable(false)] [IgnoreEquality] public IEnumerable Implementations { get; } Property Value IEnumerable Remarks If this is used before Normalize(FeedUri?) has been called, incomplete Implementations may be returned, because the Group inheritance structure has not been resolved. this[string] Returns the Implementation with a specific ID string. public Implementation this[string id] { get; } Parameters id string The ID to look for. Property Value Implementation The identified Implementation. Remarks If this is used before Normalize(FeedUri?) has been called, incomplete Implementations may be returned, because the Group inheritance structure has not been resolved. Exceptions KeyNotFoundException No Implementation matching id was found in Elements. MinInjectorVersion This attribute gives the oldest version of the injector that can read this file. Older versions will tell the user to upgrade if they are asked to read the file. Versions prior to 0.20 do not perform this check, however. If the attribute is not present, the file can be read by all versions. [Browsable(false)] public ImplementationVersion? MinInjectorVersion { get; set; } Property Value ImplementationVersion Name A short name to identify the feed or program (e.g. \"Foo\"). public required string Name { get; set; } Property Value string NeedsTerminal If true, indicates that the program requires a terminal in order to run. Graphical launchers should therefore run this program in a suitable terminal emulator. [Browsable(false)] public bool NeedsTerminal { get; set; } Property Value bool Publisher The publisher (company or organization) of the program. public string? Publisher { get; set; } Property Value string ReplacedBy This interface Uri of the feed has been replaced by the given interface. Any references to the old URI should be updated to use the new one. [Browsable(false)] public InterfaceReference? ReplacedBy { get; set; } Property Value InterfaceReference See Also ManifestDigest SplashScreens Splash screens Zero Install can display during downloads, etc. for better branding. [Browsable(false)] [OrderedEquality] public List SplashScreens { get; } Property Value List Summaries Short one-line descriptions for different languages; the first word should not be upper-case unless it is a proper noun (e.g. \"cures all ills\"). [Browsable(false)] [OrderedEquality] public LocalizableStringCollection Summaries { get; } Property Value LocalizableStringCollection Uri This attribute is only needed for remote feeds (fetched via HTTP). The value must exactly match the expected URL, to prevent an attacker replacing one correctly-signed feed with another (e.g., returning a feed for the shred program when the user asked for the backup program). [Browsable(false)] public FeedUri? Uri { get; set; } Property Value FeedUri Methods Clone() Creates a deep copy of this Feed instance. public Feed Clone() Returns Feed The new copy of the Feed. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Feed?) protected bool Equals(Feed? other) Parameters other Feed Returns bool GetBestIcon(string, string?) Returns the best matching icon for a specific Command/EntryPoint. Will fall back to Icons. public Icon? GetBestIcon(string mimeType, string? command) Parameters mimeType string The MimeType to try to find. Will only return exact matches. command string The name of the command the icon should represent; null is equivalent to NameRun. Returns Icon The best matching icon that was found or null if no matching icon was found. GetBestName(CultureInfo, string?) Returns the best matching name for a specific Command/EntryPoint. public string GetBestName(CultureInfo language, string? command) Parameters language CultureInfo The language to look for; use InvariantCulture for none. command string The name of the command the name should represent; null is equivalent to NameRun. Returns string The best matching name that was found. GetBestSummary(CultureInfo, string?) Returns the best matching summary for a specific Command/EntryPoint. Will fall back to Summaries. public string? GetBestSummary(CultureInfo language, string? command) Parameters language CultureInfo The language to look for; use InvariantCulture for none. command string The name of the command the summary should represent; null is equivalent to NameRun. Returns string The best matching summary that was found; null if no matching summary was found. GetEntryPoint(string?) Returns the first EntryPoint referencing a specific Command. public EntryPoint? GetEntryPoint(string? command) Parameters command string The command name to search for; null is equivalent to NameRun. Returns EntryPoint The identified EntryPoint; null no matching one was found. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Prepares the feed for solver processing. Flattens inheritance structures, converts legacy elements, sets default values, etc.. Do not call it if you plan on serializing the feed again since it may loose some of its structure. public void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The URI the feed was originally loaded from. Exceptions NotSupportedException The feed requires a newer version of Zero Install. InvalidDataException A required property is not set or invalid. RemoveImplementation(string) Removes an Implementation identified by its ID. public bool RemoveImplementation(string id) Parameters id string Returns bool true if the implementation was removed; false if the implementation could not be found. ResolveInternalReferences() Resolves references between elements within the Feed. public void ResolveInternalReferences() Remarks This method should be called instead of Normalize(FeedUri?) if you plan on serializing the feed again since it preservers the structure. Exceptions InvalidDataException A reference could not be resolved. Strip() Strips the feed down to the application metadata removing specific Implementations. public void Strip() ToString() Returns the feed/interface in the form \"Name (Uri)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(Feed?, Feed?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Feed? left, Feed? right) Parameters left Feed The left object right Feed The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Feed?, Feed?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Feed? left, Feed? right) Parameters left Feed The left object right Feed The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.FeedElement.html": { + "href": "api/ZeroInstall.Model.FeedElement.html", + "title": "Class FeedElement | Zero Install .NET API", + "keywords": "Class FeedElement Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Abstract base class for XML serializable classes that are part of the Zero Install feed model. [Equatable] public abstract class FeedElement : XmlUnknown, IEquatable, IEquatable Inheritance object XmlUnknown FeedElement Implements IEquatable IEquatable Derived ArgBase Binding Category Command Constraint CopyFromStep EntryPoint Icon InterfaceReference RemoveStep RenameStep Restriction RetrievalMethod TargetBase WorkingDir Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks Does not include ZeroInstall.Model.Capabilities. Properties IfZeroInstallVersion Only process this element if the current Zero Install version matches the range. [Browsable(false)] public VersionRange? IfZeroInstallVersion { get; set; } Property Value VersionRange Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(FeedElement?) protected bool Equals(FeedElement? other) Parameters other FeedElement Returns bool FilterMismatch(IRecipeStep) Checks whether an element passes the specified IfZeroInstallVersion restriction, if any. protected static bool FilterMismatch(IRecipeStep step) Parameters step IRecipeStep Returns bool FilterMismatch(T) Checks whether an element passes the specified IfZeroInstallVersion restriction, if any. protected static bool FilterMismatch(T element) where T : FeedElement? Parameters element T Returns bool Type Parameters T GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Operators operator ==(FeedElement?, FeedElement?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(FeedElement? left, FeedElement? right) Parameters left FeedElement The left object right FeedElement The right object Returns bool true if the objects are equal; otherwise, false. operator !=(FeedElement?, FeedElement?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(FeedElement? left, FeedElement? right) Parameters left FeedElement The left object right FeedElement The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.FeedReference.html": { + "href": "api/ZeroInstall.Model.FeedReference.html", + "title": "Class FeedReference | Zero Install .NET API", + "keywords": "Class FeedReference Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A linked feed that contains more implementations of this interface. Is treated by the solver as if it were part of the main feed. [Serializable] [Equatable] public sealed class FeedReference : TargetBase, IEquatable, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement TargetBase FeedReference Implements IEquatable IEquatable IEquatable ICloneable IEquatable Inherited Members TargetBase.Languages TargetBase.Architecture FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Source The URL or local path used to locate the feed. public required FeedUri Source { get; set; } Property Value FeedUri Methods Clone() Creates a deep copy of this FeedReference instance. public FeedReference Clone() Returns FeedReference The new copy of the FeedReference. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the feed reference in the form \"Source (Architecture, Languages)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(FeedReference?, FeedReference?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(FeedReference? left, FeedReference? right) Parameters left FeedReference The left object right FeedReference The right object Returns bool true if the objects are equal; otherwise, false. operator !=(FeedReference?, FeedReference?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(FeedReference? left, FeedReference? right) Parameters left FeedReference The left object right FeedReference The right object Returns bool true if the objects are not equal; otherwise, false. See Also Feeds" + }, + "api/ZeroInstall.Model.FeedTarget.html": { + "href": "api/ZeroInstall.Model.FeedTarget.html", + "title": "Struct FeedTarget | Zero Install .NET API", + "keywords": "Struct FeedTarget Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Associates a FeedUri with the Feed data acquired from there. public readonly record struct FeedTarget : IEquatable Implements IEquatable Inherited Members ValueType.Equals(object) ValueType.GetHashCode() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Constructors FeedTarget(FeedUri, Feed) Associates a FeedUri with the Feed data acquired from there. public FeedTarget(FeedUri Uri, Feed Feed) Parameters Uri FeedUri The URI or local path (must be absolute) to the feed. Feed Feed The data acquired from Uri. Normalize(FeedUri?) has already been called. Properties Feed The data acquired from Uri. Normalize(FeedUri?) has already been called. public Feed Feed { get; init; } Property Value Feed Uri The URI or local path (must be absolute) to the feed. public FeedUri Uri { get; init; } Property Value FeedUri Methods ToString() Returns the fully qualified type name of this instance. public override string ToString() Returns string The fully qualified type name." + }, + "api/ZeroInstall.Model.FeedUri.html": { + "href": "api/ZeroInstall.Model.FeedUri.html", + "title": "Class FeedUri | Zero Install .NET API", + "keywords": "Class FeedUri Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Represents a feed or interface URI or local path. Unlike Uri this class only accepts HTTP(S) URLs and absolute local paths. [TypeConverter(typeof(StringConstructorConverter))] [Equatable] public sealed class FeedUri : Uri, ISpanFormattable, IFormattable, ISerializable, IEquatable Inheritance object Uri FeedUri Implements ISpanFormattable IFormattable ISerializable IEquatable Inherited Members Uri.SchemeDelimiter Uri.UriSchemeFile Uri.UriSchemeFtp Uri.UriSchemeFtps Uri.UriSchemeGopher Uri.UriSchemeHttp Uri.UriSchemeHttps Uri.UriSchemeMailto Uri.UriSchemeNetPipe Uri.UriSchemeNetTcp Uri.UriSchemeNews Uri.UriSchemeNntp Uri.UriSchemeSftp Uri.UriSchemeSsh Uri.UriSchemeTelnet Uri.UriSchemeWs Uri.UriSchemeWss Uri.CheckHostName(string) Uri.CheckSchemeName(string) Uri.Compare(Uri, Uri, UriComponents, UriFormat, StringComparison) Uri.EscapeDataString(string) Uri.EscapeUriString(string) Uri.FromHex(char) Uri.GetComponents(UriComponents, UriFormat) Uri.GetLeftPart(UriPartial) Uri.HexEscape(char) Uri.HexUnescape(string, ref int) Uri.IsBaseOf(Uri) Uri.IsHexDigit(char) Uri.IsHexEncoding(string, int) Uri.IsWellFormedOriginalString() Uri.IsWellFormedUriString(string, UriKind) Uri.MakeRelative(Uri) Uri.MakeRelativeUri(Uri) Uri.TryCreate(string, in UriCreationOptions, out Uri) Uri.TryCreate(string, UriKind, out Uri) Uri.TryCreate(Uri, string, out Uri) Uri.TryCreate(Uri, Uri, out Uri) Uri.TryFormat(Span, out int) Uri.UnescapeDataString(string) Uri.AbsolutePath Uri.AbsoluteUri Uri.Authority Uri.DnsSafeHost Uri.Fragment Uri.Host Uri.HostNameType Uri.IdnHost Uri.IsAbsoluteUri Uri.IsDefaultPort Uri.IsFile Uri.IsLoopback Uri.IsUnc Uri.LocalPath Uri.OriginalString Uri.PathAndQuery Uri.Port Uri.Query Uri.Scheme Uri.Segments Uri.UserEscaped Uri.UserInfo object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Constructors FeedUri(string) Creates a feed URI from a string. public FeedUri(string value) Parameters value string A string to parse as an HTTP(S) URL or an absolute local path. Exceptions UriFormatException value is not a valid HTTP(S) URL or an absolute local path. FeedUri(Uri) Creates a feed URI from an existing Uri. public FeedUri(Uri value) Parameters value Uri An existing Uri. Exceptions UriFormatException value is not a valid HTTP(S) URL or an absolute local path. FeedUri(FeedUri) Passing a FeedUri instance into the FeedUri constructor does nothing useful. Just use the original object. [Obsolete(\"Passing a FeedUri instance into the FeedUri constructor does nothing useful. Just use the original object.\")] public FeedUri(FeedUri value) Parameters value FeedUri Fields FakePrefix This is prepended to a FeedUri if it is meant for demo data and should not be used to actually fetch a feed. public const string FakePrefix = \"fake:\" Field Value string See Also IsFake FromDistributionPrefix This is prepended to FromFeed if data was pulled from a native package manager rather than the feed itself. public const string FromDistributionPrefix = \"distribution:\" Field Value string See Also PackageImplementation IsFromDistribution Properties IsFake Indicates whether this is a fake identifier meant for demo data and should not be used to actually fetch a feed. public bool IsFake { get; } Property Value bool See Also FakePrefix IsFromDistribution Indicates that an ImplementationSelection was generated with data from a native package manager rather than the feed itself. public bool IsFromDistribution { get; } Property Value bool See Also FromDistributionPrefix Methods Equals(object?) Compares two Uri instances for equality. public override bool Equals(object? obj) Parameters obj object Returns bool true if the two instances represent the same URI; otherwise, false. Escape() Escapes the identifier using URL encoding. public string Escape() Returns string Escape(string) Escapes an identifier using URL encoding. [Pure] public static string Escape(string value) Parameters value string Returns string EscapeComponent() Convert the identifier to a list of path components. e.g. \"http://example.com/foo.xml\" becomes [\"http\", \"example.com\", \"foo.xml\"], while \"/root/feed.xml\" becomes [\"file\", \"root__feed.xml\"]. The number of components is determined by the scheme (three for http, two for file). Uses [underscore_escape] to escape each component. public string[] EscapeComponent() Returns string[] GetHashCode() Gets the hash code for the URI. public override int GetHashCode() Returns int The hash value generated for this URI. PrettyEscape() Escapes the identifier using URL encoding except for slashes (encoded as #) and colons (left as-is on POSIX systems). public string PrettyEscape() Returns string PrettyEscape(string) Escapes an identifier using URL encoding except for slashes (encoded as #) and colons (left as-is on POSIX systems). [Pure] public static string PrettyEscape(string value) Parameters value string Returns string PrettyUnescape(string) Unescapes an identifier using URL encoding except for slashes (encoded as #). [Pure] public static FeedUri PrettyUnescape(string escaped) Parameters escaped string Returns FeedUri ToString() Returns a string representation of the URI, not adhering to the escaping rules of RFC 2396. Not safe for parsing! public override string ToString() Returns string ToStringRfc() An alternate version of ToString() that produces results escaped according to RFC 2396. Safe for parsing! public string ToStringRfc() Returns string Unescape(string) Unescapes an identifier using URL encoding. public static FeedUri Unescape(string escaped) Parameters escaped string Returns FeedUri Exceptions UriFormatException The unescaped string is not a valid HTTP(S) URL or an absolute local path. Operators operator ==(FeedUri?, FeedUri?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(FeedUri? left, FeedUri? right) Parameters left FeedUri The left object right FeedUri The right object Returns bool true if the objects are equal; otherwise, false. operator !=(FeedUri?, FeedUri?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(FeedUri? left, FeedUri? right) Parameters left FeedUri The left object right FeedUri The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.ForEachArgs.html": { + "href": "api/ZeroInstall.Model.ForEachArgs.html", + "title": "Class ForEachArgs | Zero Install .NET API", + "keywords": "Class ForEachArgs Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Expands an environment variable to multiple arguments. The variable specified in ItemFrom is split using Separator and the Arguments are added once for each item. [Serializable] [Equatable] public class ForEachArgs : ArgBase, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement ArgBase ForEachArgs Implements IEquatable IEquatable ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties Arguments A list of command-line arguments to be passed to an executable. \"${item}\" will be substituted with each for-each value. [Browsable(false)] [OrderedEquality] public List Arguments { get; } Property Value List ItemFrom The name of the environment variable to be expanded. public required string ItemFrom { get; set; } Property Value string Separator Overrides the default separator character (\":\" on POSIX and \";\" on Windows). public string? Separator { get; set; } Property Value string Methods Clone() Creates a deep copy of this ForEachArgs instance. public override ArgBase Clone() Returns ArgBase The new copy of the ForEachArgs. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(ForEachArgs?) protected bool Equals(ForEachArgs? other) Parameters other ForEachArgs Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the for-each instruction in the form \"ItemFrom\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(ForEachArgs?, ForEachArgs?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ForEachArgs? left, ForEachArgs? right) Parameters left ForEachArgs The left object right ForEachArgs The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ForEachArgs?, ForEachArgs?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ForEachArgs? left, ForEachArgs? right) Parameters left ForEachArgs The left object right ForEachArgs The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.GenericBinding.html": { + "href": "api/ZeroInstall.Model.GenericBinding.html", + "title": "Class GenericBinding | Zero Install .NET API", + "keywords": "Class GenericBinding Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Zero Install will not know how to run a program using generic bindings itself, but it will include them in any selections documents it creates, which can then be executed by your custom code. [Serializable] [Equatable] public sealed class GenericBinding : ExecutableInBinding, IEquatable, IEquatable, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown FeedElement Binding ExecutableInBinding GenericBinding Implements IEquatable IEquatable ICloneable IEquatable IEquatable Inherited Members ExecutableInBinding.Command Binding.Normalize() FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Path If your binding needs a path within the selected implementation, it is suggested that the path attribute be used for this. Other attributes and child elements should be namespaced to avoid collisions. public string? Path { get; set; } Property Value string Methods Clone() Creates a deep copy of this GenericBinding instance. public override Binding Clone() Returns Binding The new copy of the GenericBinding. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the binding in the form \"Path = Command\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(GenericBinding?, GenericBinding?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(GenericBinding? left, GenericBinding? right) Parameters left GenericBinding The left object right GenericBinding The right object Returns bool true if the objects are equal; otherwise, false. operator !=(GenericBinding?, GenericBinding?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(GenericBinding? left, GenericBinding? right) Parameters left GenericBinding The left object right GenericBinding The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Group.html": { + "href": "api/ZeroInstall.Model.Group.html", + "title": "Class Group | Zero Install .NET API", + "keywords": "Class Group Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll All attributes of a group are inherited by any child Groups and Implementations as defaults, but can be overridden there. All Dependencys and Bindings are inherited (sub-groups may add more Dependencys and Bindings to the list, but cannot remove any). [Serializable] [Equatable] public sealed class Group : Element, IEquatable, IEquatable, IEquatable, IBindingContainer, IDependencyContainer, ICloneable, IEquatable, IElementContainer, IEquatable Inheritance object XmlUnknown FeedElement TargetBase Element Group Implements IEquatable IEquatable IEquatable IBindingContainer IDependencyContainer ICloneable IEquatable IElementContainer IEquatable Inherited Members Element.ReleaseDateFormat Element.Version Element.VersionModifier Element.Released Element.ReleasedString Element.Stability Element.RolloutPercentage Element.License Element.Main Element.SelfTest Element.DocDir Element.Dependencies Element.Restrictions Element.Bindings Element.Commands Element.ContainsCommand(string) Element.this[string] Element.GetCommand(string) TargetBase.Languages TargetBase.Architecture FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Extension Methods DependencyContainerExtensions.GetEffectiveRestrictions(IDependencyContainer) Properties Elements A list of Groups and Implementations contained within this group. [Browsable(false)] [OrderedEquality] public List Elements { get; } Property Value List Methods Clone() Creates a deep copy of this Element instance. public override Element Clone() Returns Element The new copy of the Element. CloneGroup() Creates a deep copy of this Group instance. public Group CloneGroup() Returns Group The new copy of the Group. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Flattens inheritance structures, Converts legacy elements, sets default values, etc.. public override void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the group in the form \"Comma-separated list of set values\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(Group?, Group?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Group? left, Group? right) Parameters left Group The left object right Group The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Group?, Group?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Group? left, Group? right) Parameters left Group The left object right Group The right object Returns bool true if the objects are not equal; otherwise, false. See Also Elements" + }, + "api/ZeroInstall.Model.IArgBaseContainer.html": { + "href": "api/ZeroInstall.Model.IArgBaseContainer.html", + "title": "Interface IArgBaseContainer | Zero Install .NET API", + "keywords": "Interface IArgBaseContainer Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An object that contains ArgBases. public interface IArgBaseContainer Properties Arguments A list of command-line arguments to be passed to an executable. List Arguments { get; } Property Value List" + }, + "api/ZeroInstall.Model.IBindingContainer.html": { + "href": "api/ZeroInstall.Model.IBindingContainer.html", + "title": "Interface IBindingContainer | Zero Install .NET API", + "keywords": "Interface IBindingContainer Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An object that contains Bindings. public interface IBindingContainer Properties Bindings A list of Bindings for Implementations to locate Dependencys. List Bindings { get; } Property Value List" + }, + "api/ZeroInstall.Model.IDependencyContainer.html": { + "href": "api/ZeroInstall.Model.IDependencyContainer.html", + "title": "Interface IDependencyContainer | Zero Install .NET API", + "keywords": "Interface IDependencyContainer Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An object that contains Dependencys and Restrictions. public interface IDependencyContainer Extension Methods DependencyContainerExtensions.GetEffectiveRestrictions(IDependencyContainer) Properties Dependencies A list of interfaces this implementation depends upon. List Dependencies { get; } Property Value List Restrictions A list of interfaces that are restricted to specific versions when used. List Restrictions { get; } Property Value List" + }, + "api/ZeroInstall.Model.IDescriptionContainer.html": { + "href": "api/ZeroInstall.Model.IDescriptionContainer.html", + "title": "Interface IDescriptionContainer | Zero Install .NET API", + "keywords": "Interface IDescriptionContainer Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An object that has localizable descriptions. public interface IDescriptionContainer Properties Descriptions Full descriptions for different languages, which can be several paragraphs long. [Browsable(false)] LocalizableStringCollection Descriptions { get; } Property Value LocalizableStringCollection" + }, + "api/ZeroInstall.Model.IElementContainer.html": { + "href": "api/ZeroInstall.Model.IElementContainer.html", + "title": "Interface IElementContainer | Zero Install .NET API", + "keywords": "Interface IElementContainer Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An object that contains Groups and Implementations. Supports a composite pattern. public interface IElementContainer Properties Elements A list of Groups and Implementations contained within this element. List Elements { get; } Property Value List" + }, + "api/ZeroInstall.Model.IIconContainer.html": { + "href": "api/ZeroInstall.Model.IIconContainer.html", + "title": "Interface IIconContainer | Zero Install .NET API", + "keywords": "Interface IIconContainer Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An object that contains Iconss. public interface IIconContainer Properties Icons Zero or more icons. [Browsable(false)] List Icons { get; } Property Value List" + }, + "api/ZeroInstall.Model.IInterfaceUri.html": { + "href": "api/ZeroInstall.Model.IInterfaceUri.html", + "title": "Interface IInterfaceUri | Zero Install .NET API", + "keywords": "Interface IInterfaceUri Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An object that contains an interface URI. public interface IInterfaceUri Properties InterfaceUri An interface URI (URL or file path). FeedUri InterfaceUri { get; set; } Property Value FeedUri" + }, + "api/ZeroInstall.Model.IInterfaceUriBindingContainer.html": { + "href": "api/ZeroInstall.Model.IInterfaceUriBindingContainer.html", + "title": "Interface IInterfaceUriBindingContainer | Zero Install .NET API", + "keywords": "Interface IInterfaceUriBindingContainer Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An object that contains an interface URI string. public interface IInterfaceUriBindingContainer : IInterfaceUri, IBindingContainer Inherited Members IInterfaceUri.InterfaceUri IBindingContainer.Bindings" + }, + "api/ZeroInstall.Model.IRecipeStep.html": { + "href": "api/ZeroInstall.Model.IRecipeStep.html", + "title": "Interface IRecipeStep | Zero Install .NET API", + "keywords": "Interface IRecipeStep Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A retrieval step is a part of a Recipe. public interface IRecipeStep : ICloneable Inherited Members ICloneable.Clone() Methods Normalize(FeedUri?) Converts legacy elements, sets default values, etc.. void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions UriFormatException Href is relative and feedUri is a remote URI." + }, + "api/ZeroInstall.Model.ISummaryContainer.html": { + "href": "api/ZeroInstall.Model.ISummaryContainer.html", + "title": "Interface ISummaryContainer | Zero Install .NET API", + "keywords": "Interface ISummaryContainer Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An object that has localizable summaries and descriptions. public interface ISummaryContainer : IDescriptionContainer Inherited Members IDescriptionContainer.Descriptions Properties Summaries Short one-line descriptions for different languages; the first word should not be upper-case unless it is a proper noun (e.g. \"cures all ills\"). [Browsable(false)] LocalizableStringCollection Summaries { get; } Property Value LocalizableStringCollection" + }, + "api/ZeroInstall.Model.Icon.html": { + "href": "api/ZeroInstall.Model.Icon.html", + "title": "Class Icon | Zero Install .NET API", + "keywords": "Class Icon Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An icon representing the application. Used in the Catalog GUI as well as for desktop icons, menu entries, etc.. [Serializable] [Equatable] public class Icon : FeedElement, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement Icon Implements IEquatable IEquatable ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Fields KnownMimeTypes All known MimeType values for icons. public static readonly string[] KnownMimeTypes Field Value string[] MimeTypeIcns The MimeType value for Apple icons (.icns). public const string MimeTypeIcns = \"image/x-icns\" Field Value string MimeTypeIco The MimeType value for Windows icons (.ico). public const string MimeTypeIco = \"image/vnd.microsoft.icon\" Field Value string MimeTypePng The MimeType value for PNG icons (.png(. public const string MimeTypePng = \"image/png\" Field Value string MimeTypeSvg The MimeType value for SVG icons (.svg). public const string MimeTypeSvg = \"image/svg\" Field Value string Properties Href The URL used to locate the icon. [Browsable(false)] public required Uri Href { get; set; } Property Value Uri MimeType The MIME type of the icon. This value is case-insensitive. [TypeConverter(typeof(IconMimeTypeConverter))] public string? MimeType { get; set; } Property Value string Methods Clone() Creates a deep copy of this Icon instance. public Icon Clone() Returns Icon The new copy of the Icon. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Icon?) protected bool Equals(Icon? other) Parameters other Icon Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the icon in the form \"Location (MimeType)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(Icon?, Icon?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Icon? left, Icon? right) Parameters left Icon The left object right Icon The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Icon?, Icon?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Icon? left, Icon? right) Parameters left Icon The left object right Icon The right object Returns bool true if the objects are not equal; otherwise, false. See Also Icons Icons" + }, + "api/ZeroInstall.Model.IconExtensions.html": { + "href": "api/ZeroInstall.Model.IconExtensions.html", + "title": "Class IconExtensions | Zero Install .NET API", + "keywords": "Class IconExtensions Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Provides extensions methods related to Icons. public static class IconExtensions Inheritance object IconExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetIcon(IEnumerable, string) Returns an icon with a specific mime type if available. public static Icon? GetIcon(this IEnumerable icons, string mimeType) Parameters icons IEnumerable The list of icons to search mimeType string The MimeType to try to find. Will only return exact matches. Returns Icon The first matching icon that was found or null if no matching icon was found." + }, + "api/ZeroInstall.Model.Implementation.html": { + "href": "api/ZeroInstall.Model.Implementation.html", + "title": "Class Implementation | Zero Install .NET API", + "keywords": "Class Implementation Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An implementation is a specific version of an application that can be downloaded and executed (e.g. Firefox 3.6 for Windows). [Serializable] [Equatable] public class Implementation : ImplementationBase, IEquatable, IEquatable, IEquatable, IBindingContainer, IDependencyContainer, ICloneable, IEquatable, IEquatable, IEquatable Inheritance object XmlUnknown FeedElement TargetBase Element ImplementationBase Implementation Implements IEquatable IEquatable IEquatable IBindingContainer IDependencyContainer ICloneable IEquatable IEquatable IEquatable Derived ExternalImplementation Inherited Members ImplementationBase.ID ImplementationBase.LocalPath ImplementationBase.Version ImplementationBase.ManifestDigest ImplementationBase.CloneFromTo(ImplementationBase, ImplementationBase) ImplementationBase.ToString() ImplementationBase.Equals(ImplementationBase) Element.ReleaseDateFormat Element.VersionModifier Element.Released Element.ReleasedVerbatim Element.ReleasedString Element.Stability Element.RolloutPercentage Element.License Element.Main Element.SelfTest Element.DocDir Element.Dependencies Element.Restrictions Element.Bindings Element.Commands Element.ContainsCommand(string) Element.this[string] Element.GetCommand(string) Element.EnsureAttributes() Element.CloneFromTo(Element, Element) Element.Equals(Element) TargetBase.Languages TargetBase.Architecture TargetBase.CloneFromTo(TargetBase, TargetBase) TargetBase.Equals(TargetBase) FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DependencyContainerExtensions.GetEffectiveRestrictions(IDependencyContainer) Properties RetrievalMethods A list of RetrievalMethods for downloading the implementation. [Browsable(false)] [OrderedEquality] public List RetrievalMethods { get; } Property Value List Methods Clone() Creates a deep copy of this Implementation instance. public override Element Clone() Returns Element The new copy of the Implementation. CloneImplementation() Creates a deep copy of this Implementation instance. public Implementation CloneImplementation() Returns Implementation The new copy of the Implementation. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Implementation?) protected bool Equals(Implementation? other) Parameters other Implementation Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Flattens inheritance structures, Converts legacy elements, sets default values, etc.. public override void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions InvalidDataException A required property is not set or invalid. Operators operator ==(Implementation?, Implementation?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Implementation? left, Implementation? right) Parameters left Implementation The left object right Implementation The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Implementation?, Implementation?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Implementation? left, Implementation? right) Parameters left Implementation The left object right Implementation The right object Returns bool true if the objects are not equal; otherwise, false. See Also Elements" + }, + "api/ZeroInstall.Model.ImplementationBase.html": { + "href": "api/ZeroInstall.Model.ImplementationBase.html", + "title": "Class ImplementationBase | Zero Install .NET API", + "keywords": "Class ImplementationBase Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Information for identifying an implementation of a Feed. Common base for Implementation and ImplementationSelection. [Equatable] public abstract class ImplementationBase : Element, IEquatable, IEquatable, IEquatable, IBindingContainer, IDependencyContainer, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown FeedElement TargetBase Element ImplementationBase Implements IEquatable IEquatable IEquatable IBindingContainer IDependencyContainer ICloneable IEquatable IEquatable Derived Implementation ImplementationSelection Inherited Members Element.ReleaseDateFormat Element.VersionModifier Element.Released Element.ReleasedVerbatim Element.ReleasedString Element.Stability Element.RolloutPercentage Element.License Element.Main Element.SelfTest Element.DocDir Element.Dependencies Element.Restrictions Element.Bindings Element.Commands Element.ContainsCommand(string) Element.this[string] Element.GetCommand(string) Element.EnsureAttributes() Element.Clone() Element.CloneFromTo(Element, Element) Element.Equals(Element) TargetBase.Languages TargetBase.Architecture TargetBase.CloneFromTo(TargetBase, TargetBase) TargetBase.Equals(TargetBase) FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DependencyContainerExtensions.GetEffectiveRestrictions(IDependencyContainer) Properties ID A unique identifier for this implementation. Used when storing implementation-specific user preferences. public required string ID { get; set; } Property Value string LocalPath If the feed file is a local file (the interface 'uri' starts with /) then the local-path attribute may contain the pathname of a local directory (either an absolute path or a path relative to the directory containing the feed file). public string? LocalPath { get; set; } Property Value string ManifestDigest A manifest digest is a means of uniquely identifying an Implementation and verifying its contents. public ManifestDigest ManifestDigest { get; set; } Property Value ManifestDigest Version The version number of the implementation. public override required ImplementationVersion Version { get; set; } Property Value ImplementationVersion Methods CloneFromTo(ImplementationBase, ImplementationBase) Copies all known values from one instance to another. Helper method for instance cloning. protected static void CloneFromTo(ImplementationBase from, ImplementationBase to) Parameters from ImplementationBase to ImplementationBase Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(ImplementationBase?) protected bool Equals(ImplementationBase? other) Parameters other ImplementationBase Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Flattens inheritance structures, Converts legacy elements, sets default values, etc.. public override void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the implementation in the form \"Comma-separated list of set values\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(ImplementationBase?, ImplementationBase?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ImplementationBase? left, ImplementationBase? right) Parameters left ImplementationBase The left object right ImplementationBase The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ImplementationBase?, ImplementationBase?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ImplementationBase? left, ImplementationBase? right) Parameters left ImplementationBase The left object right ImplementationBase The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.ImplementationVersion.html": { + "href": "api/ZeroInstall.Model.ImplementationVersion.html", + "title": "Class ImplementationVersion | Zero Install .NET API", + "keywords": "Class ImplementationVersion Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Represents a version number consisting of dot-separated decimals and optional modifier strings. [TypeConverter(typeof(StringConstructorConverter))] [Serializable] [Equatable] public sealed class ImplementationVersion : IComparable, IEquatable Inheritance object ImplementationVersion Implements IComparable IEquatable Inherited Members object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Remarks This class is immutable and thread-safe. This is the syntax for valid version strings: Version := DottedList (\"-\" Modifier? DottedList?)* DottedList := (Integer (\".\" Integer)*) Modifier := \"pre\" | \"rc\" | \"post\" If the string ContainsTemplateVariables(string) the entire string is stored verbatim and not parsed. Constructors ImplementationVersion(string) Creates a new implementation version from a a string. public ImplementationVersion(string value) Parameters value string The string containing the version information. Exceptions FormatException value is not a valid version string. ImplementationVersion(Version) Creates a new implementation version from a .NET Version. public ImplementationVersion(Version version) Parameters version Version The .NET Version to convert. ImplementationVersion(VersionDottedList, params VersionPart[]) Creates a new implementation version. public ImplementationVersion(VersionDottedList firstPart, params VersionPart[] additionalParts) Parameters firstPart VersionDottedList The first part of the version number. additionalParts VersionPart[] All additional parts of the version number. Properties AdditionalParts All additional parts of the version number. [OrderedEquality] public IReadOnlyList AdditionalParts { get; } Property Value IReadOnlyList ContainsTemplateVariables Indicates whether this version number contains a template variable (a substring enclosed in curly brackets, e.g {var}) . [Browsable(false)] [IgnoreEquality] public bool ContainsTemplateVariables { get; } Property Value bool Remarks This must be false in regular feeds; true is only valid for templates. FirstPart The first part of the version number. public VersionDottedList FirstPart { get; } Property Value VersionDottedList Methods CompareTo(ImplementationVersion?) Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. public int CompareTo(ImplementationVersion? other) Parameters other ImplementationVersion An object to compare with this instance. Returns int A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes other in the sort order. Zero This instance occurs in the same position in the sort order as other. Greater than zero This instance follows other in the sort order. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns a string representation of the version. Safe for parsing! public override string ToString() Returns string TryCreate(string, out ImplementationVersion?) Creates a new ImplementationVersion using the specified string representation. public static bool TryCreate(string value, out ImplementationVersion? result) Parameters value string The string to parse. result ImplementationVersion Returns the created ImplementationVersion if successfully; null otherwise. Returns bool true if the ImplementationVersion was successfully created; false otherwise. Operators operator ==(ImplementationVersion?, ImplementationVersion?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ImplementationVersion? left, ImplementationVersion? right) Parameters left ImplementationVersion The left object right ImplementationVersion The right object Returns bool true if the objects are equal; otherwise, false. operator >(ImplementationVersion?, ImplementationVersion?) public static bool operator >(ImplementationVersion? left, ImplementationVersion? right) Parameters left ImplementationVersion right ImplementationVersion Returns bool operator >=(ImplementationVersion?, ImplementationVersion?) public static bool operator >=(ImplementationVersion? left, ImplementationVersion? right) Parameters left ImplementationVersion right ImplementationVersion Returns bool operator !=(ImplementationVersion?, ImplementationVersion?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ImplementationVersion? left, ImplementationVersion? right) Parameters left ImplementationVersion The left object right ImplementationVersion The right object Returns bool true if the objects are not equal; otherwise, false. operator <(ImplementationVersion?, ImplementationVersion?) public static bool operator <(ImplementationVersion? left, ImplementationVersion? right) Parameters left ImplementationVersion right ImplementationVersion Returns bool operator <=(ImplementationVersion?, ImplementationVersion?) public static bool operator <=(ImplementationVersion? left, ImplementationVersion? right) Parameters left ImplementationVersion right ImplementationVersion Returns bool" + }, + "api/ZeroInstall.Model.Importance.html": { + "href": "api/ZeroInstall.Model.Importance.html", + "title": "Enum Importance | Zero Install .NET API", + "keywords": "Enum Importance Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Describes how important a dependency is (i.e. whether ignoring it is an option). public enum Importance Fields Essential = 0 A version of the Dependency must be selected. Recommended = 1 No version of the Dependency is also an option, although selecting a version is preferable to not selecting one." + }, + "api/ZeroInstall.Model.InterfaceReference.html": { + "href": "api/ZeroInstall.Model.InterfaceReference.html", + "title": "Class InterfaceReference | Zero Install .NET API", + "keywords": "Class InterfaceReference Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A reference to an interface URI, e.g. for specifying which interface this feed implements or by which interface it is replaced. [Serializable] [Equatable] public sealed class InterfaceReference : FeedElement, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement InterfaceReference Implements IEquatable IEquatable ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Target The URI used to locate the interface. [Browsable(false)] public required FeedUri Target { get; set; } Property Value FeedUri Methods Clone() Creates a deep copy of this InterfaceReference instance. public InterfaceReference Clone() Returns InterfaceReference The new copy of the InterfaceReference. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Converts legacy elements, sets default values, etc.. public void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the interface reference in the form \"Target\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(InterfaceReference?, InterfaceReference?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(InterfaceReference? left, InterfaceReference? right) Parameters left InterfaceReference The left object right InterfaceReference The right object Returns bool true if the objects are equal; otherwise, false. operator !=(InterfaceReference?, InterfaceReference?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(InterfaceReference? left, InterfaceReference? right) Parameters left InterfaceReference The left object right InterfaceReference The right object Returns bool true if the objects are not equal; otherwise, false. See Also FeedFor ReplacedBy" + }, + "api/ZeroInstall.Model.ManifestDigest.html": { + "href": "api/ZeroInstall.Model.ManifestDigest.html", + "title": "Struct ManifestDigest | Zero Install .NET API", + "keywords": "Struct ManifestDigest Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A manifest digest is a means of uniquely identifying an Implementation and verifying its contents. [TypeConverter(typeof(ManifestDigestConverter))] [Serializable] public record struct ManifestDigest : IEquatable Implements IEquatable Inherited Members ValueType.Equals(object) ValueType.GetHashCode() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Remarks Stores digests of the manifest file using various hashing algorithms. Constructors ManifestDigest(string) Creates a new manifest digest structure by parsing a string. public ManifestDigest(string value) Parameters value string One or more comma separated digest values. Exceptions NotSupportedException value contains no known digest algorithms. ManifestDigest(string?, string?, string?, string?) A manifest digest is a means of uniquely identifying an Implementation and verifying its contents. public ManifestDigest(string? Sha1 = null, string? Sha1New = null, string? Sha256 = null, string? Sha256New = null) Parameters Sha1 string A SHA-1 hash of the old manifest format. Not supported anymore! Sha1New string A SHA-1 hash of the new manifest format. Sha256 string A SHA-256 hash of the new manifest format. (most secure) Sha256New string A SHA-256 hash of the new manifest format with a base32 encoding and no equals sign in the path. Remarks Stores digests of the manifest file using various hashing algorithms. Fields Empty The manifest digest of an empty directory. public static readonly ManifestDigest Empty Field Value ManifestDigest UnknownAlgorithms Contains any unknown hash algorithms specified as pure XML attributes. [NonSerialized] public XmlAttribute[]? UnknownAlgorithms Field Value XmlAttribute[] Properties AvailableDigests Lists all contained manifest digests sorted from best (safest) to worst. [Browsable(false)] public IEnumerable AvailableDigests { get; } Property Value IEnumerable Best Returns the best entry of AvailableDigests; null if there are none. [Browsable(false)] public string? Best { get; } Property Value string Sha1 A SHA-1 hash of the old manifest format. Not supported anymore! public string? Sha1 { readonly get; set; } Property Value string Sha1New A SHA-1 hash of the new manifest format. public string? Sha1New { readonly get; set; } Property Value string Sha256 A SHA-256 hash of the new manifest format. (most secure) public string? Sha256 { readonly get; set; } Property Value string Sha256New A SHA-256 hash of the new manifest format with a base32 encoding and no equals sign in the path. public string? Sha256New { readonly get; set; } Property Value string Methods PartialEquals(ManifestDigest) Indicates whether this digest is at least partially equal to another one. public bool PartialEquals(ManifestDigest other) Parameters other ManifestDigest Returns bool Remarks Two digests are considered partially equal if at least one digest algorithm matches and no values are contradictory. ToString() Returns the manifest digests in the form \"sha1new=abc123,sha256new_ABC123,...\". Safe for parsing! public override string ToString() Returns string TryParse(string) Tries to parse a string containing a digest value. Does nothing if the corresponding algorithm is already set or if the string contains no known digest algorithm. public void TryParse(string digest) Parameters digest string" + }, + "api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer-1.html": { + "href": "api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer-1.html", + "title": "Class ManifestDigestPartialEqualityComparer | Zero Install .NET API", + "keywords": "Class ManifestDigestPartialEqualityComparer Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Uses PartialEquals(ManifestDigest) to compare ImplementationBases. public sealed class ManifestDigestPartialEqualityComparer : IEqualityComparer where T : ImplementationBase Type Parameters T Inheritance object ManifestDigestPartialEqualityComparer Implements IEqualityComparer Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Fields Instance A singleton instance of the comparer. public static readonly ManifestDigestPartialEqualityComparer Instance Field Value ManifestDigestPartialEqualityComparer Methods Equals(T?, T?) Determines whether the specified objects are equal. public bool Equals(T? x, T? y) Parameters x T The first object of type T to compare. y T The second object of type T to compare. Returns bool true if the specified objects are equal; otherwise, false. GetHashCode(T) Always returns 0. The concept of hashing is not applicable to partial equality. public int GetHashCode(T obj) Parameters obj T Returns int" + }, + "api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer.html": { + "href": "api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer.html", + "title": "Class ManifestDigestPartialEqualityComparer | Zero Install .NET API", + "keywords": "Class ManifestDigestPartialEqualityComparer Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Uses PartialEquals(ManifestDigest) to compare ManifestDigests. public sealed class ManifestDigestPartialEqualityComparer : IEqualityComparer Inheritance object ManifestDigestPartialEqualityComparer Implements IEqualityComparer Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Fields Instance A singleton instance of the comparer. public static readonly ManifestDigestPartialEqualityComparer Instance Field Value ManifestDigestPartialEqualityComparer Methods Equals(ManifestDigest, ManifestDigest) Determines whether the specified objects are equal. public bool Equals(ManifestDigest x, ManifestDigest y) Parameters x ManifestDigest The first object of type T to compare. y ManifestDigest The second object of type T to compare. Returns bool true if the specified objects are equal; otherwise, false. GetHashCode(ManifestDigest) Always returns 0. The concept of hashing is not applicable to partial equality. public int GetHashCode(ManifestDigest obj) Parameters obj ManifestDigest Returns int" + }, + "api/ZeroInstall.Model.ModelUtils.html": { + "href": "api/ZeroInstall.Model.ModelUtils.html", + "title": "Class ModelUtils | Zero Install .NET API", + "keywords": "Class ModelUtils Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Provides utility methods for interface and feed URIs. public static class ModelUtils Inheritance object ModelUtils Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties Version The version of Zero Install feed model (used for compatibility checks). public static ImplementationVersion Version { get; } Property Value ImplementationVersion Methods ContainsTemplateVariables(string) Determines whether a string contains a template variable (a substring enclosed in curly brackets, e.g {var}). public static bool ContainsTemplateVariables(string value) Parameters value string Returns bool GetAbsoluteHref(Uri, string?) Turns a relative HREF into an absolute one, using the file containing the reference as the base. public static Uri GetAbsoluteHref(Uri href, string? source) Parameters href Uri The potentially relative HREF; will remain untouched if absolute. source string The file containing the reference; can be null. Returns Uri An absolute HREF. Exceptions UriFormatException href is a relative URI that cannot be resolved. GetAbsoluteHref(Uri, FeedUri?) Turns a relative HREF into an absolute one, using the file containing the reference as the base. public static Uri GetAbsoluteHref(Uri href, FeedUri? source = null) Parameters href Uri The potentially relative HREF; will remain untouched if absolute. source FeedUri The file containing the reference; can be null. Returns Uri An absolute HREF. Exceptions UriFormatException href is a relative URI that cannot be resolved. GetAbsolutePath(string, string?) Turns a relative path into an absolute one, using the file containing the reference as the base. public static string GetAbsolutePath(string path, string? source) Parameters path string The potentially relative path; will remain untouched if absolute. source string The file containing the reference; can be null. Returns string An absolute path. Exceptions UriFormatException path is a relative URI that cannot be resolved. GetAbsolutePath(string, FeedUri?) Turns a relative path into an absolute one, using the file containing the reference as the base. public static string GetAbsolutePath(string path, FeedUri? source = null) Parameters path string The potentially relative path; will remain untouched if absolute. source FeedUri The file containing the reference; can be null. Returns string An absolute path. Exceptions UriFormatException path is a relative URI that cannot be resolved." + }, + "api/ZeroInstall.Model.OS.html": { + "href": "api/ZeroInstall.Model.OS.html", + "title": "Enum OS | Zero Install .NET API", + "keywords": "Enum OS Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Describes an operating system family. [TypeConverter(typeof(EnumXmlConverter))] public enum OS Extension Methods ArchitectureExtensions.RunsOn(OS, OS) Fields All = 0 Supports all operating systems (e.g. developed with cross-platform language like Java). Cygwin = 7 A Unix-compatibility layer for Windows. Darwin = 5 MacOSX, without the proprietary bits. FreeBsd = 4 Supports only FreeBSD. Linux = 2 Supports only Linux operating systems. MacOSX = 6 Supports only MacOS X. Posix = 1 Everything except Windows. Solaris = 3 Supports only Solaris. Unknown = 100 The supported operating system has not been set yet. Windows = 8 Supports only Windows NT 5.0+ (Windows 2000, XP, 2003, Vista, 2008, 7, 2008 R2, ...)." + }, + "api/ZeroInstall.Model.OverlayBinding.html": { + "href": "api/ZeroInstall.Model.OverlayBinding.html", + "title": "Class OverlayBinding | Zero Install .NET API", + "keywords": "Class OverlayBinding Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Make a chosen Implementation available by overlaying it onto another part of the file-system. [Serializable] [Equatable] public sealed class OverlayBinding : Binding, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement Binding OverlayBinding Implements IEquatable IEquatable ICloneable IEquatable Inherited Members Binding.Normalize() FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Remarks This is to support legacy programs which use hard-coded paths. Properties MountPoint The mount point on which src is to appear in the filesystem. If missing, '/' (on POSIX) or '%systemdrive%' (on Windows) is assumed. public string? MountPoint { get; set; } Property Value string Source The relative path of the directory in the implementation to publish. The default is to publish everything. public string? Source { get; set; } Property Value string Methods Clone() Creates a deep copy of this OverlayBinding instance. public override Binding Clone() Returns Binding The new copy of the OverlayBinding. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the binding in the form \"Source => MountPoint\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(OverlayBinding?, OverlayBinding?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(OverlayBinding? left, OverlayBinding? right) Parameters left OverlayBinding The left object right OverlayBinding The right object Returns bool true if the objects are equal; otherwise, false. operator !=(OverlayBinding?, OverlayBinding?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(OverlayBinding? left, OverlayBinding? right) Parameters left OverlayBinding The left object right OverlayBinding The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.PackageImplementation.html": { + "href": "api/ZeroInstall.Model.PackageImplementation.html", + "title": "Class PackageImplementation | Zero Install .NET API", + "keywords": "Class PackageImplementation Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An implementation provided by a distribution-specific package manager instead of Zero Install. [Serializable] [Equatable] public sealed class PackageImplementation : Element, IEquatable, IEquatable, IEquatable, IBindingContainer, IDependencyContainer, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown FeedElement TargetBase Element PackageImplementation Implements IEquatable IEquatable IEquatable IBindingContainer IDependencyContainer ICloneable IEquatable IEquatable Inherited Members Element.ReleaseDateFormat Element.VersionModifier Element.Released Element.ReleasedString Element.Stability Element.RolloutPercentage Element.License Element.Main Element.SelfTest Element.DocDir Element.Dependencies Element.Restrictions Element.Bindings Element.Commands Element.ContainsCommand(string) Element.this[string] Element.GetCommand(string) Element.Normalize(FeedUri) TargetBase.Languages TargetBase.Architecture FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Extension Methods DependencyContainerExtensions.GetEffectiveRestrictions(IDependencyContainer) Remarks Any Bindings inside Dependencys for the Feed will be ignored; it is assumed that the requiring component knows how to use the packaged version without further help. Fields DistributionNames Well-known values for Distributions. public static readonly string[] DistributionNames Field Value string[] Properties Distributions A list of distribution names (e.g. Debian, RPM) where Package applies. Applies everywhere if empty. [Browsable(false)] [OrderedEquality] public List Distributions { get; } Property Value List DistributionsString Used for XML serialization. [TypeConverter(typeof(DistributionNameConverter))] [IgnoreEquality] public string DistributionsString { get; set; } Property Value string See Also Distributions Package The name of the package in the distribution-specific package manager. public string? Package { get; set; } Property Value string Version The range of versions to accept for the specified Package. public VersionRange? Version { get; set; } Property Value VersionRange Methods Clone() Creates a deep copy of this PackageImplementation instance. public override Element Clone() Returns Element The new copy of the PackageImplementation. CloneImplementation() Creates a deep copy of this PackageImplementation instance. public PackageImplementation CloneImplementation() Returns PackageImplementation The new copy of the PackageImplementation. EnsureAttributes() Ensures that required values deserialized from XML attributes are set (not null). protected override void EnsureAttributes() Exceptions InvalidDataException A required property is not set or invalid. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the implementation in the form \"Package (Distributions)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(PackageImplementation?, PackageImplementation?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(PackageImplementation? left, PackageImplementation? right) Parameters left PackageImplementation The left object right PackageImplementation The right object Returns bool true if the objects are equal; otherwise, false. operator !=(PackageImplementation?, PackageImplementation?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(PackageImplementation? left, PackageImplementation? right) Parameters left PackageImplementation The left object right PackageImplementation The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Preferences.FeedPreferences.html": { + "href": "api/ZeroInstall.Model.Preferences.FeedPreferences.html", + "title": "Class FeedPreferences | Zero Install .NET API", + "keywords": "Class FeedPreferences Namespace ZeroInstall.Model.Preferences Assembly ZeroInstall.Model.dll Stores user-specific preferences for a Feed. [Equatable] public sealed class FeedPreferences : XmlUnknown, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedPreferences Implements IEquatable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Implementations A list of implementation-specific user-overrides. [OrderedEquality] public List Implementations { get; } Property Value List this[string] Retrieves an existing entry from Implementations by ID or creates a new one if no appropriate one exists. public ImplementationPreferences this[string id] { get; } Parameters id string The ID to search for. Property Value ImplementationPreferences The found or newly created ImplementationPreferences. LastChecked The point in time this feed was last checked for updates. public UnixTime LastChecked { get; set; } Property Value UnixTime Methods Clone() Creates a deep copy of this FeedPreferences instance. public FeedPreferences Clone() Returns FeedPreferences The new copy of the FeedPreferences. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. LoadFor(FeedUri) Loads FeedPreferences for a specific feed. public static FeedPreferences LoadFor(FeedUri feedUri) Parameters feedUri FeedUri The feed to load the preferences for. Returns FeedPreferences The loaded FeedPreferences. Exceptions IOException A problem occurred while reading the file. UnauthorizedAccessException Read access to the file is not permitted. InvalidDataException A problem occurred while deserializing an XML file. LoadForSafe(FeedUri) Tries to load FeedPreferences for a specific feed. Automatically falls back to defaults on errors. public static FeedPreferences LoadForSafe(FeedUri feedUri) Parameters feedUri FeedUri The feed to load the preferences for. Returns FeedPreferences The loaded FeedPreferences or default value if there was a problem. Normalize() Removes superfluous entries from Implementations. public void Normalize() SaveFor(FeedUri) Saves these FeedPreferences for a specific feed. public void SaveFor(FeedUri feedUri) Parameters feedUri FeedUri The feed to save the preferences for. Exceptions IOException A problem occurred while writing the file. UnauthorizedAccessException Write access to the file is not permitted. ToString() Returns the preferences in the form \"FeedPreferences: LastChecked\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(FeedPreferences?, FeedPreferences?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(FeedPreferences? left, FeedPreferences? right) Parameters left FeedPreferences The left object right FeedPreferences The right object Returns bool true if the objects are equal; otherwise, false. operator !=(FeedPreferences?, FeedPreferences?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(FeedPreferences? left, FeedPreferences? right) Parameters left FeedPreferences The left object right FeedPreferences The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Preferences.ImplementationPreferences.html": { + "href": "api/ZeroInstall.Model.Preferences.ImplementationPreferences.html", + "title": "Class ImplementationPreferences | Zero Install .NET API", + "keywords": "Class ImplementationPreferences Namespace ZeroInstall.Model.Preferences Assembly ZeroInstall.Model.dll Stores user-specific preferences for an Implementation. [Equatable] public sealed class ImplementationPreferences : XmlUnknown, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown ImplementationPreferences Implements IEquatable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties ID A unique identifier for the implementation. Corresponds to ID. public required string ID { get; set; } Property Value string IsSuperfluous Indicates whether this configuration object stores no information other than the ID and is thus superfluous. [Browsable(false)] [IgnoreEquality] public bool IsSuperfluous { get; } Property Value bool RolloutPercentage A random number used to compare against RolloutPercentage. [Browsable(false)] public int RolloutPercentage { get; set; } Property Value int UserStability A user-specified override for Stability specified in the feed. public Stability UserStability { get; set; } Property Value Stability Methods Clone() Creates a deep copy of this ImplementationPreferences instance. public ImplementationPreferences Clone() Returns ImplementationPreferences The new copy of the ImplementationPreferences. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the preferences in the form \"ImplementationPreferences: ID\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(ImplementationPreferences?, ImplementationPreferences?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ImplementationPreferences? left, ImplementationPreferences? right) Parameters left ImplementationPreferences The left object right ImplementationPreferences The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ImplementationPreferences?, ImplementationPreferences?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ImplementationPreferences? left, ImplementationPreferences? right) Parameters left ImplementationPreferences The left object right ImplementationPreferences The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Preferences.InterfacePreferences.html": { + "href": "api/ZeroInstall.Model.Preferences.InterfacePreferences.html", + "title": "Class InterfacePreferences | Zero Install .NET API", + "keywords": "Class InterfacePreferences Namespace ZeroInstall.Model.Preferences Assembly ZeroInstall.Model.dll Stores user-specific preferences for an interface. [Equatable] public sealed class InterfacePreferences : XmlUnknown, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown InterfacePreferences Implements IEquatable ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Feeds Zero ore more additional feeds containing implementations of this interface. [OrderedEquality] public List Feeds { get; } Property Value List StabilityPolicy Implementations at this stability level or higher are preferred. Lower levels are used only if there is no other choice. public Stability StabilityPolicy { get; set; } Property Value Stability Uri The URI of the interface to be configured. [Browsable(false)] public required FeedUri Uri { get; set; } Property Value FeedUri Methods Clone() Creates a deep copy of this InterfacePreferences instance. public InterfacePreferences Clone() Returns InterfacePreferences The new copy of the InterfacePreferences. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. LoadFor(FeedUri) Loads InterfacePreferences for a specific interface. public static InterfacePreferences LoadFor(FeedUri interfaceUri) Parameters interfaceUri FeedUri The interface to load the preferences for. Returns InterfacePreferences The loaded InterfacePreferences. Exceptions IOException A problem occurred while reading the file. UnauthorizedAccessException Read access to the file is not permitted. InvalidDataException A problem occurred while deserializing an XML file. LoadForSafe(FeedUri) Tries to load InterfacePreferences for a specific interface. Automatically falls back to defaults on errors. public static InterfacePreferences LoadForSafe(FeedUri interfaceUri) Parameters interfaceUri FeedUri The interface to load the preferences for. Returns InterfacePreferences The loaded InterfacePreferences or default value if there was a problem. SaveFor(FeedUri) Saves these InterfacePreferences for a specific interface. public void SaveFor(FeedUri interfaceUri) Parameters interfaceUri FeedUri The interface to save the preferences for. Exceptions IOException A problem occurred while writing the file. UnauthorizedAccessException Write access to the file is not permitted. ToString() Returns the preferences in the form \"InterfacePreferences: Uri\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(InterfacePreferences?, InterfacePreferences?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(InterfacePreferences? left, InterfacePreferences? right) Parameters left InterfacePreferences The left object right InterfacePreferences The right object Returns bool true if the objects are equal; otherwise, false. operator !=(InterfacePreferences?, InterfacePreferences?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(InterfacePreferences? left, InterfacePreferences? right) Parameters left InterfacePreferences The left object right InterfacePreferences The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Preferences.html": { + "href": "api/ZeroInstall.Model.Preferences.html", + "title": "Namespace ZeroInstall.Model.Preferences | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Model.Preferences Structures for user-specified preferences and overrides for interfaces, feeds and implementations. Classes FeedPreferences Stores user-specific preferences for a Feed. ImplementationPreferences Stores user-specific preferences for an Implementation. InterfacePreferences Stores user-specific preferences for an interface." + }, + "api/ZeroInstall.Model.Recipe.html": { + "href": "api/ZeroInstall.Model.Recipe.html", + "title": "Class Recipe | Zero Install .NET API", + "keywords": "Class Recipe Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Retrieves an implementation by applying a list of IRecipeSteps, such as downloading and combining multiple archives. [Serializable] [Equatable] public sealed class Recipe : RetrievalMethod, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement RetrievalMethod Recipe Implements IEquatable IEquatable ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties ContainsUnknownSteps Indicates whether this recipe contains steps of unknown type and therefore can not be processed. [Browsable(false)] [IgnoreEquality] public bool ContainsUnknownSteps { get; } Property Value bool Steps An ordered list of IRecipeSteps to execute. [OrderedEquality] public List Steps { get; } Property Value List Methods Clone() Creates a deep copy of this Recipe instance. public override RetrievalMethod Clone() Returns RetrievalMethod The new copy of the Recipe. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Converts legacy elements, sets default values, etc.. public override void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions UriFormatException Href is relative and feedUri is a remote URI. InvalidDataException A required property is not set or invalid. ToString() Returns the recipe in the form \"Recipe (X steps)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(Recipe?, Recipe?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Recipe? left, Recipe? right) Parameters left Recipe The left object right Recipe The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Recipe?, Recipe?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Recipe? left, Recipe? right) Parameters left Recipe The left object right Recipe The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.RemoveStep.html": { + "href": "api/ZeroInstall.Model.RemoveStep.html", + "title": "Class RemoveStep | Zero Install .NET API", + "keywords": "Class RemoveStep Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Removes or moves a file or directory. It is an error if the path is outside the implementation. [Serializable] [Equatable] public sealed class RemoveStep : FeedElement, IEquatable, IEquatable, IRecipeStep, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement RemoveStep Implements IEquatable IEquatable IRecipeStep ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Path The file or directory to be removed relative to the implementation root as a Unix-style path. public required string Path { get; set; } Property Value string Methods Clone() Creates a deep copy of this RemoveStep instance. public IRecipeStep Clone() Returns IRecipeStep The new copy of the RemoveStep. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Converts legacy elements, sets default values, etc.. public void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions UriFormatException Href is relative and feedUri is a remote URI. ToString() Returns the remove step in the form \"Path\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(RemoveStep?, RemoveStep?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(RemoveStep? left, RemoveStep? right) Parameters left RemoveStep The left object right RemoveStep The right object Returns bool true if the objects are equal; otherwise, false. operator !=(RemoveStep?, RemoveStep?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(RemoveStep? left, RemoveStep? right) Parameters left RemoveStep The left object right RemoveStep The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.RenameStep.html": { + "href": "api/ZeroInstall.Model.RenameStep.html", + "title": "Class RenameStep | Zero Install .NET API", + "keywords": "Class RenameStep Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Renames or moves a file or directory. It is an error if the source or destination are outside the implementation. [Serializable] [Equatable] public sealed class RenameStep : FeedElement, IEquatable, IEquatable, IRecipeStep, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement RenameStep Implements IEquatable IEquatable IRecipeStep ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Destination The destination file or directory relative to the implementation root as a Unix-style path. public required string Destination { get; set; } Property Value string Source The source file or directory relative to the implementation root as a Unix-style path. public required string Source { get; set; } Property Value string Methods Clone() Creates a deep copy of this RenameStep instance. public IRecipeStep Clone() Returns IRecipeStep The new copy of the RenameStep. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Converts legacy elements, sets default values, etc.. public void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions UriFormatException Href is relative and feedUri is a remote URI. ToString() Returns the rename step in the form \"Source => Destination\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(RenameStep?, RenameStep?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(RenameStep? left, RenameStep? right) Parameters left RenameStep The left object right RenameStep The right object Returns bool true if the objects are equal; otherwise, false. operator !=(RenameStep?, RenameStep?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(RenameStep? left, RenameStep? right) Parameters left RenameStep The left object right RenameStep The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Requirements.html": { + "href": "api/ZeroInstall.Model.Requirements.html", + "title": "Class Requirements | Zero Install .NET API", + "keywords": "Class Requirements Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A set of requirements/restrictions imposed by the user on the Implementation selection process. Used as input for the solver. [Serializable] [Equatable] public record Requirements : IEquatable Inheritance object Requirements Implements IEquatable Inherited Members object.Equals(object) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Constructors Requirements() Creates an empty requirements object. Use this to fill in values incrementally, e.g. when parsing command-line arguments. public Requirements() Requirements(FeedUri, string?, Architecture) Creates a new requirements object. public Requirements(FeedUri interfaceUri, string? command = null, Architecture architecture = default) Parameters interfaceUri FeedUri The URI or local path (must be absolute) to the interface to solve the dependencies for. command string The name of the command in the implementation to execute. Will default to NameRun or NameCompile if null. Will not try to find any command if set to Empty. architecture Architecture The architecture to find executables for. Find for the current system if left at default value. Properties Architecture The architecture to find executables for. Find for the current system if left at default value. [JsonIgnore] public Architecture Architecture { get; set; } Property Value Architecture Remarks Will default to CurrentSystem if left at default value. Will not try to find any command if set to Empty. Command The name of the command in the implementation to execute. Will default to NameRun or NameCompile if null. Will not try to find any command if set to Empty. [TypeConverter(typeof(CommandNameConverter))] [JsonProperty(\"command\")] public string? Command { get; set; } Property Value string CpuString Used for XML and JSON serialization. [Browsable(false)] [JsonProperty(\"cpu\", DefaultValueHandling = DefaultValueHandling.Ignore)] public string CpuString { get; set; } Property Value string See Also Architecture Distributions Specifies that the selected implementations must be from one of the given distributions (e.g. Debian, RPM). The special value DistributionZeroInstall may be used to require implementations provided by Zero Install (i.e. one not provided by a PackageImplementation). [Browsable(false)] [JsonIgnore] [UnorderedEquality] public List Distributions { get; } Property Value List Remarks Used internally by solvers, copied from Distributions, not set directly by user, not serialized. ExtraRestrictions The ranges of versions of specific sub-implementations that can be chosen. [JsonProperty(\"extra_restrictions\")] [UnorderedEquality] public Dictionary ExtraRestrictions { get; } Property Value Dictionary InterfaceUri The URI or local path (must be absolute) to the interface to solve the dependencies for. [JsonProperty(\"interface\")] public required FeedUri InterfaceUri { get; set; } Property Value FeedUri Languages The preferred languages for the implementation. [JsonIgnore] [SetEquality] public LanguageSet Languages { get; } Property Value LanguageSet Message Message to display when interacting with user. [JsonProperty(\"message\", DefaultValueHandling = DefaultValueHandling.Ignore)] public string? Message { get; set; } Property Value string OSString Used for XML and JSON serialization. [Browsable(false)] [JsonProperty(\"os\", DefaultValueHandling = DefaultValueHandling.Ignore)] public string OSString { get; set; } Property Value string See Also Architecture Source Used for XML and JSON serialization. [Browsable(false)] [JsonProperty(\"source\")] public bool Source { get; set; } Property Value bool See Also Architecture Methods AddRestriction(FeedUri, VersionRange) Adds version restriction for a specific feeds. Merges with any existing restrictions for that feed. public void AddRestriction(FeedUri feedUri, VersionRange versions) Parameters feedUri FeedUri The feed URI to apply the restriction for. versions VersionRange The version range set to restrict to. Equals(Requirements?) Indicates whether the current object is equal to another object of the same type. public virtual bool Equals(Requirements? other) Parameters other Requirements An object to compare with this object. Returns bool true if the current object is equal to the other parameter; otherwise, false. ForCurrentSystem() Substitutes blank values with default values appropriate for the current system. public Requirements ForCurrentSystem() Returns Requirements GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToCommandLineArgs() Transforms the requirements into a command-line arguments. public string[] ToCommandLineArgs() Returns string[] ToString() Returns the requirements in the form \"InterfaceUri (Command)\". Not safe for parsing! public override string ToString() Returns string Operators implicit operator Requirements(FeedUri) Convenience cast for creating simple Requirements from a FeedUri. public static implicit operator Requirements(FeedUri uri) Parameters uri FeedUri Returns Requirements" + }, + "api/ZeroInstall.Model.Restriction.html": { + "href": "api/ZeroInstall.Model.Restriction.html", + "title": "Class Restriction | Zero Install .NET API", + "keywords": "Class Restriction Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Restricts the versions of an Implementation that are allowed without creating a dependency on the implementation if its was not already chosen. [Serializable] [Equatable] public class Restriction : FeedElement, IEquatable, IEquatable, IInterfaceUri, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement Restriction Implements IEquatable IEquatable IInterfaceUri ICloneable IEquatable Derived Dependency Inherited Members FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Fields DistributionZeroInstall Special value for Distributions that requires require an implementation provided by Zero Install (i.e. one not provided by a PackageImplementation). public const string DistributionZeroInstall = \"0install\" Field Value string Properties Constraints A list of version Constraints that must be fulfilled. [Browsable(false)] [OrderedEquality] public List Constraints { get; } Property Value List Distributions Specifies that the selected implementation must be from one of the given distributions (e.g. Debian, RPM). The special value DistributionZeroInstall may be used to require an implementation provided by Zero Install (i.e. one not provided by a PackageImplementation). [Browsable(false)] [OrderedEquality] public List Distributions { get; } Property Value List DistributionsString Specifies that the selected implementation must be from one of the space-separated distributions (e.g. Debian, RPM). The special value '0install' may be used to require an implementation provided by Zero Install (i.e. one not provided by a PackageImplementation). [TypeConverter(typeof(DistributionNameConverter))] [IgnoreEquality] public string DistributionsString { get; set; } Property Value string See Also Distributions InterfaceUri The URI or local path used to identify the interface. public required FeedUri InterfaceUri { get; set; } Property Value FeedUri OS Determines for which operating systems this dependency is required. public OS OS { get; set; } Property Value OS Versions A more flexible alternative to Constraints. Each range is in the form \"START..!END\". The range matches versions where START <= VERSION < END. The start or end may be omitted. A single version number may be used instead of a range to match only that version, or !VERSION to match everything except that version. public VersionRange? Versions { get; set; } Property Value VersionRange XmlTagName protected virtual string XmlTagName { get; } Property Value string Methods Clone() Creates a deep copy of this Restriction instance. public virtual Restriction Clone() Returns Restriction The new copy of the Restriction. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Restriction?) protected bool Equals(Restriction? other) Parameters other Restriction Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. IsApplicable(Requirements) Determines whether this reference is applicable for the given requirements. public virtual bool IsApplicable(Requirements requirements) Parameters requirements Requirements Returns bool Normalize() Flattens inheritance structures, Converts legacy elements, sets default values, etc.. public virtual void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the dependency in the form \"Interface\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(Restriction?, Restriction?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Restriction? left, Restriction? right) Parameters left Restriction The left object right Restriction The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Restriction?, Restriction?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Restriction? left, Restriction? right) Parameters left Restriction The left object right Restriction The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.RetrievalMethod.html": { + "href": "api/ZeroInstall.Model.RetrievalMethod.html", + "title": "Class RetrievalMethod | Zero Install .NET API", + "keywords": "Class RetrievalMethod Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A retrieval method is a way of getting a copy of an Implementation. public abstract class RetrievalMethod : FeedElement, IEquatable, IEquatable, ICloneable Inheritance object XmlUnknown FeedElement RetrievalMethod Implements IEquatable IEquatable ICloneable Derived DownloadRetrievalMethod Recipe ExternalRetrievalMethod Inherited Members FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(object) FeedElement.Equals(FeedElement) FeedElement.GetHashCode() XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Clone() Creates a deep copy of this RetrievalMethod instance. public abstract RetrievalMethod Clone() Returns RetrievalMethod The new copy of the RetrievalMethod. Normalize(FeedUri?) Sets missing default values and handles legacy elements. public virtual void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions UriFormatException Href is relative and feedUri is a remote URI. InvalidDataException A required property is not set or invalid." + }, + "api/ZeroInstall.Model.Runner.html": { + "href": "api/ZeroInstall.Model.Runner.html", + "title": "Class Runner | Zero Install .NET API", + "keywords": "Class Runner Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A special kind of dependency: the program that is used to run this one. For example, a Python program might specify Python as its runner. [Serializable] [Equatable] public class Runner : Dependency, IEquatable, IEquatable, ICloneable, IEquatable, IInterfaceUriBindingContainer, IInterfaceUri, IBindingContainer, ICloneable, IEquatable, IArgBaseContainer, IEquatable Inheritance object XmlUnknown FeedElement Restriction Dependency Runner Implements IEquatable IEquatable ICloneable IEquatable IInterfaceUriBindingContainer IInterfaceUri IBindingContainer ICloneable IEquatable IArgBaseContainer IEquatable Inherited Members Dependency.Importance Dependency.Use Dependency.Bindings Dependency.IsApplicable(Requirements) Dependency.Equals(Dependency) Restriction.InterfaceUri Restriction.OS Restriction.Versions Restriction.Constraints Restriction.DistributionZeroInstall Restriction.Distributions Restriction.DistributionsString Restriction.Equals(Restriction) FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties Arguments A list of command-line arguments to be passed to the runner before the path of the implementation. [Browsable(false)] [OrderedEquality] public List Arguments { get; } Property Value List Command The name of the command in the InterfaceUri to use; leave null for NameRun. [TypeConverter(typeof(CommandNameConverter))] public string? Command { get; set; } Property Value string XmlTagName protected override string XmlTagName { get; } Property Value string Methods Clone() Creates a deep copy of this Runner instance. public override Restriction Clone() Returns Restriction The new copy of the Runner. CloneRunner() Creates a deep copy of this Runner instance. public Runner CloneRunner() Returns Runner The new copy of the Runner. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Runner?) protected bool Equals(Runner? other) Parameters other Runner Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize() Flattens inheritance structures, Converts legacy elements, sets default values, etc.. public override void Normalize() Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the runner in the form \"Interface (Command)\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(Runner?, Runner?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Runner? left, Runner? right) Parameters left Runner The left object right Runner The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Runner?, Runner?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Runner? left, Runner? right) Parameters left Runner The left object right Runner The right object Returns bool true if the objects are not equal; otherwise, false. See Also Runner" + }, + "api/ZeroInstall.Model.Selection.ImplementationSelection.html": { + "href": "api/ZeroInstall.Model.Selection.ImplementationSelection.html", + "title": "Class ImplementationSelection | Zero Install .NET API", + "keywords": "Class ImplementationSelection Namespace ZeroInstall.Model.Selection Assembly ZeroInstall.Model.dll An executable implementation of a Feed as a part of a Selections. [Equatable] public sealed class ImplementationSelection : ImplementationBase, IEquatable, IEquatable, IEquatable, IDependencyContainer, ICloneable, IEquatable, IEquatable, IInterfaceUriBindingContainer, IInterfaceUri, IBindingContainer, ICloneable, IComparable, IEquatable Inheritance object XmlUnknown FeedElement TargetBase Element ImplementationBase ImplementationSelection Implements IEquatable IEquatable IEquatable IDependencyContainer ICloneable IEquatable IEquatable IInterfaceUriBindingContainer IInterfaceUri IBindingContainer ICloneable IComparable IEquatable Inherited Members ImplementationBase.ID ImplementationBase.LocalPath ImplementationBase.Version ImplementationBase.ManifestDigest Element.ReleaseDateFormat Element.VersionModifier Element.Released Element.ReleasedString Element.Stability Element.RolloutPercentage Element.License Element.Main Element.SelfTest Element.DocDir Element.Dependencies Element.Restrictions Element.Bindings Element.Commands Element.ContainsCommand(string) Element.this[string] Element.GetCommand(string) TargetBase.Languages TargetBase.Architecture FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Extension Methods DependencyContainerExtensions.GetEffectiveRestrictions(IDependencyContainer) Remarks This class does not contain information on how to download the implementation in case it is not in cache. That must be obtained from a Implementation instance. Constructors ImplementationSelection() Used for XML serialization. public ImplementationSelection() ImplementationSelection(IReadOnlyList) Creates a new implementation selection. public ImplementationSelection(IReadOnlyList candidates) Parameters candidates IReadOnlyList All candidates that were considered for selection (including the selected one). These are used to present the user with possible alternatives. Properties Candidates All Implementations that were considered by the solver when this one was chosen. null when selections are loaded from a file. [Browsable(false)] [IgnoreEquality] public IReadOnlyList? Candidates { get; } Property Value IReadOnlyList Distribution The name of the distribution (e.g. Debian, RPM) where this implementation comes from, if any. [Browsable(false)] [IgnoreEquality] public string? Distribution { get; } Property Value string FromFeed The URL or local path of the feed that contains this implementation. FromDistributionPrefix is prepended if data is pulled from a native package manager. If null or Empty use InterfaceUri instead. public FeedUri? FromFeed { get; set; } Property Value FeedUri InterfaceUri The URI or local path of the interface this implementation is for. public required FeedUri InterfaceUri { get; set; } Property Value FeedUri QuickTestFile A file which, if present, indicates that the selection is still valid. This is sometimes used with distribution-provided selections. If not present and the ID starts with \"package:\", you'll need to query the distribution's package manager to check that this version is still installed. public string? QuickTestFile { get; set; } Property Value string Methods Clone() Creates a deep copy of this ImplementationSelection instance. public override Element Clone() Returns Element The new copy of the ImplementationSelection. CompareTo(ImplementationSelection?) Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. public int CompareTo(ImplementationSelection? other) Parameters other ImplementationSelection An object to compare with this instance. Returns int A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes other in the sort order. Zero This instance occurs in the same position in the sort order as other. Greater than zero This instance follows other in the sort order. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Flattens inheritance structures, Converts legacy elements, sets default values, etc.. public override void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions InvalidDataException A required property is not set or invalid. ToString() Returns the implementation in the form \"Comma-separated list of set values\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(ImplementationSelection?, ImplementationSelection?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ImplementationSelection? left, ImplementationSelection? right) Parameters left ImplementationSelection The left object right ImplementationSelection The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ImplementationSelection?, ImplementationSelection?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ImplementationSelection? left, ImplementationSelection? right) Parameters left ImplementationSelection The left object right ImplementationSelection The right object Returns bool true if the objects are not equal; otherwise, false. See Also Implementations" + }, + "api/ZeroInstall.Model.Selection.SelectionCandidate.html": { + "href": "api/ZeroInstall.Model.Selection.SelectionCandidate.html", + "title": "Class SelectionCandidate | Zero Install .NET API", + "keywords": "Class SelectionCandidate Namespace ZeroInstall.Model.Selection Assembly ZeroInstall.Model.dll Represents an Implementation that is available to a solver for selection. public sealed class SelectionCandidate : IEquatable Inheritance object SelectionCandidate Implements IEquatable Inherited Members object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Constructors SelectionCandidate(FeedUri, FeedPreferences, Implementation, Requirements, bool) Creates a new selection candidate. public SelectionCandidate(FeedUri feedUri, FeedPreferences feedPreferences, Implementation implementation, Requirements requirements, bool offlineUncached = false) Parameters feedUri FeedUri The file name or URL of the feed listing the implementation. feedPreferences FeedPreferences The FeedPreferences for FeedUri. implementation Implementation The implementation this selection candidate references. requirements Requirements A set of requirements/restrictions the implementation needs to fulfill for IsSuitable to be true. offlineUncached bool Mark this candidate as unsuitable because it is uncached and the network mode is set to offline. Properties Architecture For platform-specific binaries, the platform for which an Implementation was compiled, in the form os-cpu. Either the os or cpu part may be *, which will make it available on any OS or CPU. public string Architecture { get; } Property Value string EffectiveStability The UserStability if it is set, otherwise Stability. [Browsable(false)] public Stability EffectiveStability { get; } Property Value Stability FeedPreferences The FeedPreferences for FeedUri. [Browsable(false)] public FeedPreferences FeedPreferences { get; } Property Value FeedPreferences FeedUri The file name or URL of the feed listing the implementation. public FeedUri FeedUri { get; } Property Value FeedUri Implementation The implementation this selection candidate references. [Browsable(false)] public Implementation Implementation { get; } Property Value Implementation IsSuitable Indicates whether this implementation fulfills all specified Requirements. [Browsable(false)] public bool IsSuitable { get; } Property Value bool Notes Human-readable notes about the implementation, e.g. \"not suitable for this architecture\". public string? Notes { get; } Property Value string Released The date this implementation was made available. For development versions checked out from version control this attribute should not be present. public DateTime Released { get; } Property Value DateTime Stability The feed-specified stability rating for this implementation. public Stability Stability { get; } Property Value Stability UserStability A user-specified override for the Stability specified in the feed. public Stability UserStability { get; set; } Property Value Stability Version The version number of the implementation. public ImplementationVersion Version { get; } Property Value ImplementationVersion Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(SelectionCandidate?) Indicates whether the current object is equal to another object of the same type. public bool Equals(SelectionCandidate? other) Parameters other SelectionCandidate An object to compare with this object. Returns bool true if the current object is equal to the other parameter; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the selection candidate in the form \"SelectionCandidate: Implementation\". Not safe for parsing! public override string ToString() Returns string" + }, + "api/ZeroInstall.Model.Selection.SelectionCandidateExtensions.html": { + "href": "api/ZeroInstall.Model.Selection.SelectionCandidateExtensions.html", + "title": "Class SelectionCandidateExtensions | Zero Install .NET API", + "keywords": "Class SelectionCandidateExtensions Namespace ZeroInstall.Model.Selection Assembly ZeroInstall.Model.dll Provides extension methods for SelectionCandidate. public static class SelectionCandidateExtensions Inheritance object SelectionCandidateExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetSuitableVersions(IEnumerable) Returns a deduplicated list of suitable version numbers, sorted from newest to oldest. public static IEnumerable GetSuitableVersions(this IEnumerable candidates) Parameters candidates IEnumerable Returns IEnumerable" + }, + "api/ZeroInstall.Model.Selection.Selections.html": { + "href": "api/ZeroInstall.Model.Selection.Selections.html", + "title": "Class Selections | Zero Install .NET API", + "keywords": "Class Selections Namespace ZeroInstall.Model.Selection Assembly ZeroInstall.Model.dll Represents a set of ImplementationBases chosen by a solver. [Serializable] [Equatable] public sealed class Selections : XmlUnknown, IEquatable, IInterfaceUri, ICloneable, IEquatable Inheritance object XmlUnknown Selections Implements IEquatable IInterfaceUri ICloneable IEquatable Inherited Members XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Remarks See also: https://docs.0install.net/specifications/selections/ Properties Command The name of the Command in the interface to be started. public string? Command { get; set; } Property Value string Implementations A list of ImplementationSelections chosen in this selection. [UnorderedEquality] public List Implementations { get; } Property Value List InterfaceUri The URI or local path of the interface this selection is based on. public required FeedUri InterfaceUri { get; set; } Property Value FeedUri this[FeedUri] Returns the ImplementationSelection for a specific interface. public ImplementationSelection this[FeedUri interfaceUri] { get; } Parameters interfaceUri FeedUri The InterfaceUri to look for. Property Value ImplementationSelection The first matching implementation. Exceptions KeyNotFoundException No matching implementation was found. MainImplementation The main implementation in the selection (the actual program to launch). Identified by InterfaceUri. public ImplementationSelection MainImplementation { get; } Property Value ImplementationSelection Exceptions KeyNotFoundException No ImplementationSelection matching InterfaceUri was found in Implementations. Name The name specified by the feed at InterfaceUri. public string? Name { get; set; } Property Value string Source Indicates whether the selection was generated for Source. public bool Source { get; set; } Property Value bool Methods Clone() Creates a deep copy of this Selections instance. public Selections Clone() Returns Selections The new copy of the Selections. ContainsImplementation(FeedUri) Determines whether an ImplementationSelection for a specific interface is listed in the selection. public bool ContainsImplementation(FeedUri interfaceUri) Parameters interfaceUri FeedUri The InterfaceUri to look for. Returns bool true if an implementation was found; false otherwise. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GetImplementation(FeedUri) Returns the ImplementationSelection for a specific interface. Safe for missing elements. public ImplementationSelection? GetImplementation(FeedUri interfaceUri) Parameters interfaceUri FeedUri The InterfaceUri to look for. Returns ImplementationSelection The first matching implementation; null if no matching one was found. Normalize() Calls Normalize(FeedUri?) for all Implementations. public void Normalize() Exceptions InvalidDataException A required property is not set or invalid. RestrictionsFor(FeedUri) Gets a list of all Restrictions and Dependency that point to a specific interfaceUri. public IEnumerable RestrictionsFor(FeedUri interfaceUri) Parameters interfaceUri FeedUri Returns IEnumerable ToString() Returns the selections as XML. Not safe for parsing! public override string ToString() Returns string Operators operator ==(Selections?, Selections?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Selections? left, Selections? right) Parameters left Selections The left object right Selections The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Selections?, Selections?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Selections? left, Selections? right) Parameters left Selections The left object right Selections The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Selection.TestCase.html": { + "href": "api/ZeroInstall.Model.Selection.TestCase.html", + "title": "Class TestCase | Zero Install .NET API", + "keywords": "Class TestCase Namespace ZeroInstall.Model.Selection Assembly ZeroInstall.Model.dll A test case describing Requirements and the Selections they are expected to lead to. Used for automated testing of Solvers. public class TestCase Inheritance object TestCase Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties AddDownloads public bool AddDownloads { get; set; } Property Value bool Feeds A list of input Feeds for the solver. public List Feeds { get; } Property Value List Name public required string Name { get; set; } Property Value string Problem A string describing the expected solver error message or null if no failure is expected. public string? Problem { get; set; } Property Value string Requirements The input requirements for the solver. public required Requirements Requirements { get; set; } Property Value Requirements Selections The expected output of the solver. public Selections? Selections { get; set; } Property Value Selections Methods ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + }, + "api/ZeroInstall.Model.Selection.TestCaseSet.html": { + "href": "api/ZeroInstall.Model.Selection.TestCaseSet.html", + "title": "Class TestCaseSet | Zero Install .NET API", + "keywords": "Class TestCaseSet Namespace ZeroInstall.Model.Selection Assembly ZeroInstall.Model.dll A set of test case describing Requirements and the Selections they are expected to lead to. Used for automated testing of Solvers. [XmlNamespace(\"xsi\", \"http://www.w3.org/2001/XMLSchema-instance\")] public class TestCaseSet Inheritance object TestCaseSet Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties TestCases A list of input Feeds for the solver. public List TestCases { get; } Property Value List" + }, + "api/ZeroInstall.Model.Selection.html": { + "href": "api/ZeroInstall.Model.Selection.html", + "title": "Namespace ZeroInstall.Model.Selection | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Model.Selection Structures for representing Solver results. Classes ImplementationSelection An executable implementation of a Feed as a part of a Selections. SelectionCandidate Represents an Implementation that is available to a solver for selection. SelectionCandidateExtensions Provides extension methods for SelectionCandidate. Selections Represents a set of ImplementationBases chosen by a solver. TestCase A test case describing Requirements and the Selections they are expected to lead to. Used for automated testing of Solvers. TestCaseSet A set of test case describing Requirements and the Selections they are expected to lead to. Used for automated testing of Solvers." + }, + "api/ZeroInstall.Model.SingleFile.html": { + "href": "api/ZeroInstall.Model.SingleFile.html", + "title": "Class SingleFile | Zero Install .NET API", + "keywords": "Class SingleFile Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Retrieves an implementation by downloading a single file. [Serializable] [Equatable] public sealed class SingleFile : DownloadRetrievalMethod, IEquatable, IEquatable, ICloneable, IRecipeStep, ICloneable, IEquatable, IEquatable Inheritance object XmlUnknown FeedElement RetrievalMethod DownloadRetrievalMethod SingleFile Implements IEquatable IEquatable ICloneable IRecipeStep ICloneable IEquatable IEquatable Inherited Members DownloadRetrievalMethod.Href DownloadRetrievalMethod.Size DownloadRetrievalMethod.DownloadSize FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Destination The file's target path relative to the implementation root as a Unix-style path. public required string Destination { get; set; } Property Value string Executable Set this to true to mark the file as executable. public bool Executable { get; set; } Property Value bool Methods Clone() Creates a deep copy of this SingleFile instance. public override RetrievalMethod Clone() Returns RetrievalMethod The new copy of the SingleFile. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Normalize(FeedUri?) Sets missing default values and handles legacy elements. public override void Normalize(FeedUri? feedUri = null) Parameters feedUri FeedUri The feed the data was originally loaded from. Exceptions UriFormatException Href is relative and feedUri is a remote URI. InvalidDataException A required property is not set or invalid. ToString() Returns the file in the form \"Location (Size) => Destination\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(SingleFile?, SingleFile?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(SingleFile? left, SingleFile? right) Parameters left SingleFile The left object right SingleFile The right object Returns bool true if the objects are equal; otherwise, false. operator !=(SingleFile?, SingleFile?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(SingleFile? left, SingleFile? right) Parameters left SingleFile The left object right SingleFile The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.Stability.html": { + "href": "api/ZeroInstall.Model.Stability.html", + "title": "Enum Stability | Zero Install .NET API", + "keywords": "Enum Stability Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A stability rating for an Implementation. public enum Stability Fields Buggy = 6 Known bugs, none security-related. Developer = 5 More extreme version of Testing, expected to have bugs. Insecure = 7 Known bugs, some or all security-related. Packaged = 2 Indicates that an implementation is provided as a PackageImplementation. Preferred = 1 Set by user as a personal preference overriding other stability criteria. Stable = 3 No serious problems. Testing = 4 Any new release. Unset = 0 Inherit stability from Group or default to Testing" + }, + "api/ZeroInstall.Model.TargetBase.html": { + "href": "api/ZeroInstall.Model.TargetBase.html", + "title": "Class TargetBase | Zero Install .NET API", + "keywords": "Class TargetBase Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Abstract base class for Element and FeedReference. Contains language and architecture parameters. [Equatable] public abstract class TargetBase : FeedElement, IEquatable, IEquatable, IEquatable Inheritance object XmlUnknown FeedElement TargetBase Implements IEquatable IEquatable IEquatable Derived Element FeedReference Inherited Members FeedElement.IfZeroInstallVersion FeedElement.FilterMismatch(T) FeedElement.FilterMismatch(IRecipeStep) FeedElement.Equals(FeedElement) XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.EnsureAttribute(object, string) XmlUnknown.EnsureAttributeSafeID(string, string) XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties Architecture For platform-specific binaries, the platform for which an Implementation was compiled. public Architecture Architecture { get; set; } Property Value Architecture Remarks The injector knows that certain platforms are backwards-compatible with others, so binaries with arch=\"Linux-i486\" will still be available on Linux-i686 machines, for example. Languages The natural language(s) which an Implementation supports. [SetEquality] public LanguageSet Languages { get; set; } Property Value LanguageSet Examples For example, the value \"en_GB fr\" would be used for a package supporting British English and French. Methods CloneFromTo(TargetBase, TargetBase) Copies all known values from one instance to another. Helper method for instance cloning. protected static void CloneFromTo(TargetBase from, TargetBase to) Parameters from TargetBase to TargetBase Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(TargetBase?) protected bool Equals(TargetBase? other) Parameters other TargetBase Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Operators operator ==(TargetBase?, TargetBase?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(TargetBase? left, TargetBase? right) Parameters left TargetBase The left object right TargetBase The right object Returns bool true if the objects are equal; otherwise, false. operator !=(TargetBase?, TargetBase?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(TargetBase? left, TargetBase? right) Parameters left TargetBase The left object right TargetBase The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.VersionDottedList.html": { + "href": "api/ZeroInstall.Model.VersionDottedList.html", + "title": "Struct VersionDottedList | Zero Install .NET API", + "keywords": "Struct VersionDottedList Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Represents a dotted-list part of a ImplementationVersion. [Serializable] public readonly struct VersionDottedList : IEquatable, IComparable Implements IEquatable IComparable Inherited Members object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Remarks This is the syntax for valid dot-separated decimals: DottedList := (Integer (\".\" Integer)*) Constructors VersionDottedList(params long[]) Creates a new version dotted-list. public VersionDottedList(params long[] decimals) Parameters decimals long[] The numeric parts of the dotted-list. Properties Decimals The individual decimals. public IReadOnlyList? Decimals { get; } Property Value IReadOnlyList Methods CompareTo(VersionDottedList) Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. public int CompareTo(VersionDottedList other) Parameters other VersionDottedList An object to compare with this instance. Returns int A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes other in the sort order. Zero This instance occurs in the same position in the sort order as other. Greater than zero This instance follows other in the sort order. Equals(object?) Indicates whether this instance and a specified object are equal. public override bool Equals(object? obj) Parameters obj object The object to compare with the current instance. Returns bool true if obj and this instance are the same type and represent the same value; otherwise, false. Equals(VersionDottedList) Indicates whether the current object is equal to another object of the same type. public bool Equals(VersionDottedList other) Parameters other VersionDottedList An object to compare with this object. Returns bool true if the current object is equal to the other parameter; otherwise, false. GetHashCode() Returns the hash code for this instance. public override int GetHashCode() Returns int A 32-bit signed integer that is the hash code for this instance. IsValid(string) Checks whether a string represents a valid dotted-list. public static bool IsValid(string value) Parameters value string Returns bool Parse(string) Parses a string into a version dotted-list. public static VersionDottedList Parse(string value) Parameters value string Returns VersionDottedList Exceptions FormatException value is not a valid version dotted-list. ToString() Returns the fully qualified type name of this instance. public override string ToString() Returns string The fully qualified type name. Operators operator ==(VersionDottedList, VersionDottedList) public static bool operator ==(VersionDottedList left, VersionDottedList right) Parameters left VersionDottedList right VersionDottedList Returns bool operator >(VersionDottedList, VersionDottedList) public static bool operator >(VersionDottedList left, VersionDottedList right) Parameters left VersionDottedList right VersionDottedList Returns bool operator >=(VersionDottedList, VersionDottedList) public static bool operator >=(VersionDottedList left, VersionDottedList right) Parameters left VersionDottedList right VersionDottedList Returns bool operator !=(VersionDottedList, VersionDottedList) public static bool operator !=(VersionDottedList left, VersionDottedList right) Parameters left VersionDottedList right VersionDottedList Returns bool operator <(VersionDottedList, VersionDottedList) public static bool operator <(VersionDottedList left, VersionDottedList right) Parameters left VersionDottedList right VersionDottedList Returns bool operator <=(VersionDottedList, VersionDottedList) public static bool operator <=(VersionDottedList left, VersionDottedList right) Parameters left VersionDottedList right VersionDottedList Returns bool" + }, + "api/ZeroInstall.Model.VersionModifier.html": { + "href": "api/ZeroInstall.Model.VersionModifier.html", + "title": "Enum VersionModifier | Zero Install .NET API", + "keywords": "Enum VersionModifier Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll public enum VersionModifier Fields None = 0 No modifier; empty string Post = 1 Post-release Pre = -2 Pre-release RC = -1 Release candidate" + }, + "api/ZeroInstall.Model.VersionPart.html": { + "href": "api/ZeroInstall.Model.VersionPart.html", + "title": "Struct VersionPart | Zero Install .NET API", + "keywords": "Struct VersionPart Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Represents a part of a ImplementationVersion containing nothing, a VersionModifier, a DottedList or both. [Serializable] public readonly struct VersionPart : IEquatable, IComparable Implements IEquatable IComparable Inherited Members object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Constructors VersionPart(VersionModifier, VersionDottedList) Creates a new version part. public VersionPart(VersionModifier modifier = VersionModifier.None, VersionDottedList dottedList = default) Parameters modifier VersionModifier The optional modifier prefix. dottedList VersionDottedList The dotted list part. Properties DottedList The dotted list part. public VersionDottedList DottedList { get; } Property Value VersionDottedList Modifier The optional modifier prefix. public VersionModifier Modifier { get; } Property Value VersionModifier Methods CompareTo(VersionPart) Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. public int CompareTo(VersionPart other) Parameters other VersionPart An object to compare with this instance. Returns int A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes other in the sort order. Zero This instance occurs in the same position in the sort order as other. Greater than zero This instance follows other in the sort order. Equals(object?) Indicates whether this instance and a specified object are equal. public override bool Equals(object? obj) Parameters obj object The object to compare with the current instance. Returns bool true if obj and this instance are the same type and represent the same value; otherwise, false. Equals(VersionPart) Indicates whether the current object is equal to another object of the same type. public bool Equals(VersionPart other) Parameters other VersionPart An object to compare with this object. Returns bool true if the current object is equal to the other parameter; otherwise, false. GetHashCode() Returns the hash code for this instance. public override int GetHashCode() Returns int A 32-bit signed integer that is the hash code for this instance. Parse(string) Parses a string into a version part. public static VersionPart Parse(string value) Parameters value string Returns VersionPart Exceptions FormatException value is not a valid version part. ToString() Returns the fully qualified type name of this instance. public override string ToString() Returns string The fully qualified type name. Operators operator ==(VersionPart, VersionPart) public static bool operator ==(VersionPart left, VersionPart right) Parameters left VersionPart right VersionPart Returns bool operator >(VersionPart, VersionPart) public static bool operator >(VersionPart left, VersionPart right) Parameters left VersionPart right VersionPart Returns bool operator >=(VersionPart, VersionPart) public static bool operator >=(VersionPart left, VersionPart right) Parameters left VersionPart right VersionPart Returns bool operator !=(VersionPart, VersionPart) public static bool operator !=(VersionPart left, VersionPart right) Parameters left VersionPart right VersionPart Returns bool operator <(VersionPart, VersionPart) public static bool operator <(VersionPart left, VersionPart right) Parameters left VersionPart right VersionPart Returns bool operator <=(VersionPart, VersionPart) public static bool operator <=(VersionPart left, VersionPart right) Parameters left VersionPart right VersionPart Returns bool" + }, + "api/ZeroInstall.Model.VersionRange.html": { + "href": "api/ZeroInstall.Model.VersionRange.html", + "title": "Class VersionRange | Zero Install .NET API", + "keywords": "Class VersionRange Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Represents a (possibly disjoint) set of ranges of ImplementationVersions. [TypeConverter(typeof(StringConstructorConverter))] [Serializable] [Equatable] public sealed class VersionRange : IEquatable Inheritance object VersionRange Implements IEquatable Inherited Members object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Remarks This class is immutable. Ranges are separated by pipes (|). Each range is in the form \"START..!END\". The range matches versions where START <= VERSION < END. The start or end may be omitted. A single version number may be used instead of a range to match only that version, or !VERSION to match everything except that version. Constructors VersionRange() Creates an empty version range (matches everything). public VersionRange() VersionRange(string) Creates a new version range set from a a string. public VersionRange(string value) Parameters value string The string containing the version ranges. Exceptions FormatException value is not a valid version range string. VersionRange(params VersionRangePart[]) Creates a new version range set. public VersionRange(params VersionRangePart[] parts) Parameters parts VersionRangePart[] The individual ranges. Fields None An \"impossible\" range matching no versions. public static readonly VersionRange None Field Value VersionRange Properties Parts The individual ranges. [OrderedEquality] public IReadOnlyList Parts { get; } Property Value IReadOnlyList Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Intersect(VersionRange) Intersects another version range set with this one and returns a new set as the result. public VersionRange Intersect(VersionRange other) Parameters other VersionRange Returns VersionRange Match(ImplementationVersion) Determines whether a specific version lies within this range set. public bool Match(ImplementationVersion version) Parameters version ImplementationVersion Returns bool ToString() Returns a string representation of the version range set. Safe for parsing! public override string ToString() Returns string TryCreate(string, out VersionRange?) Creates a new VersionRange using the specified string representation. public static bool TryCreate(string value, out VersionRange? result) Parameters value string The string to parse. result VersionRange Returns the created VersionRange if successfully; null otherwise. Returns bool true if the VersionRange was successfully created; false otherwise. Operators operator ==(VersionRange?, VersionRange?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(VersionRange? left, VersionRange? right) Parameters left VersionRange The left object right VersionRange The right object Returns bool true if the objects are equal; otherwise, false. implicit operator VersionRange?(Constraint?) Convenience cast for Constraints into VersionRanges. public static implicit operator VersionRange?(Constraint? constraint) Parameters constraint Constraint Returns VersionRange implicit operator VersionRange?(ImplementationVersion?) Convenience cast for ImplementationVersions into VersionRanges that match that exact version. public static implicit operator VersionRange?(ImplementationVersion? version) Parameters version ImplementationVersion Returns VersionRange operator !=(VersionRange?, VersionRange?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(VersionRange? left, VersionRange? right) Parameters left VersionRange The left object right VersionRange The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Model.VersionRangePart.html": { + "href": "api/ZeroInstall.Model.VersionRangePart.html", + "title": "Class VersionRangePart | Zero Install .NET API", + "keywords": "Class VersionRangePart Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Represents an individual non-disjoint part of a VersionRange. public abstract record VersionRangePart : IEquatable Inheritance object VersionRangePart Implements IEquatable Derived VersionRangePartExact VersionRangePartExclude VersionRangePartRange Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Intersect(VersionRange) Intersects a set of version ranges with this individual range and returns the surviving parts. public abstract IEnumerable Intersect(VersionRange versions) Parameters versions VersionRange Returns IEnumerable Match(ImplementationVersion) Determines whether a specific version lies within this range. public abstract bool Match(ImplementationVersion version) Parameters version ImplementationVersion Returns bool Parse(string) Parses a string into a version range part. public static VersionRangePart Parse(string value) Parameters value string Returns VersionRangePart Exceptions FormatException value is not a valid version range string." + }, + "api/ZeroInstall.Model.VersionRangePartExact.html": { + "href": "api/ZeroInstall.Model.VersionRangePartExact.html", + "title": "Class VersionRangePartExact | Zero Install .NET API", + "keywords": "Class VersionRangePartExact Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An exact version number like 2.0 as a part of a VersionRange. public sealed record VersionRangePartExact : VersionRangePart, IEquatable, IEquatable Inheritance object VersionRangePart VersionRangePartExact Implements IEquatable IEquatable Inherited Members VersionRangePart.Parse(string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) Constructors VersionRangePartExact(ImplementationVersion) An exact version number like 2.0 as a part of a VersionRange. public VersionRangePartExact(ImplementationVersion Version) Parameters Version ImplementationVersion The exact version to match. Properties Version The exact version to match. public ImplementationVersion Version { get; init; } Property Value ImplementationVersion Methods Intersect(VersionRange) Intersects a set of version ranges with this individual range and returns the surviving parts. public override IEnumerable Intersect(VersionRange versions) Parameters versions VersionRange Returns IEnumerable Match(ImplementationVersion) Determines whether a specific version lies within this range. public override bool Match(ImplementationVersion version) Parameters version ImplementationVersion Returns bool ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + }, + "api/ZeroInstall.Model.VersionRangePartExclude.html": { + "href": "api/ZeroInstall.Model.VersionRangePartExclude.html", + "title": "Class VersionRangePartExclude | Zero Install .NET API", + "keywords": "Class VersionRangePartExclude Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll An exclusion like !2.0 as a part of a VersionRange. public sealed record VersionRangePartExclude : VersionRangePart, IEquatable, IEquatable Inheritance object VersionRangePart VersionRangePartExclude Implements IEquatable IEquatable Inherited Members VersionRangePart.Parse(string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) Constructors VersionRangePartExclude(ImplementationVersion) An exclusion like !2.0 as a part of a VersionRange. public VersionRangePartExclude(ImplementationVersion Version) Parameters Version ImplementationVersion The version to be excluded. Properties Version The version to be excluded. public ImplementationVersion Version { get; init; } Property Value ImplementationVersion Methods Intersect(VersionRange) Intersects a set of version ranges with this individual range and returns the surviving parts. public override IEnumerable Intersect(VersionRange versions) Parameters versions VersionRange Returns IEnumerable Match(ImplementationVersion) Determines whether a specific version lies within this range. public override bool Match(ImplementationVersion version) Parameters version ImplementationVersion Returns bool ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + }, + "api/ZeroInstall.Model.VersionRangePartRange.html": { + "href": "api/ZeroInstall.Model.VersionRangePartRange.html", + "title": "Class VersionRangePartRange | Zero Install .NET API", + "keywords": "Class VersionRangePartRange Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll A version range like 1.0..!2.0 as a part of a VersionRange. public record VersionRangePartRange : VersionRangePart, IEquatable, IEquatable Inheritance object VersionRangePart VersionRangePartRange Implements IEquatable IEquatable Inherited Members VersionRangePart.Parse(string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Constructors VersionRangePartRange(ImplementationVersion?, ImplementationVersion?) A version range like 1.0..!2.0 as a part of a VersionRange. public VersionRangePartRange(ImplementationVersion? LowerInclusive, ImplementationVersion? UpperExclusive) Parameters LowerInclusive ImplementationVersion The lower inclusive bound. May be null. UpperExclusive ImplementationVersion The upper exclusive bound. May be null. Properties LowerInclusive The lower inclusive bound. May be null. public ImplementationVersion? LowerInclusive { get; init; } Property Value ImplementationVersion UpperExclusive The upper exclusive bound. May be null. public ImplementationVersion? UpperExclusive { get; init; } Property Value ImplementationVersion Methods Intersect(VersionRange) Intersects a set of version ranges with this individual range and returns the surviving parts. public override IEnumerable Intersect(VersionRange versions) Parameters versions VersionRange Returns IEnumerable Match(ImplementationVersion) Determines whether a specific version lies within this range. public override bool Match(ImplementationVersion version) Parameters version ImplementationVersion Returns bool ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + }, + "api/ZeroInstall.Model.WorkingDir.html": { + "href": "api/ZeroInstall.Model.WorkingDir.html", + "title": "Class WorkingDir | Zero Install .NET API", + "keywords": "Class WorkingDir Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Switches the working directory of a process on startup to a location within an implementation. Useful for supporting legacy Windows applications which do not properly locate their installation directory. [Serializable] [Equatable] public sealed class WorkingDir : FeedElement, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement WorkingDir Implements IEquatable IEquatable ICloneable IEquatable Inherited Members FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties Source The relative path of the directory in the implementation to set as the working directory. Defaults to use the root of the implementation if unset. public string? Source { get; set; } Property Value string Methods Clone() Creates a deep copy of this WorkingDir instance. public WorkingDir Clone() Returns WorkingDir The new copy of the WorkingDir. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the binding in the form \"Source\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(WorkingDir?, WorkingDir?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(WorkingDir? left, WorkingDir? right) Parameters left WorkingDir The left object right WorkingDir The right object Returns bool true if the objects are equal; otherwise, false. operator !=(WorkingDir?, WorkingDir?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(WorkingDir? left, WorkingDir? right) Parameters left WorkingDir The left object right WorkingDir The right object Returns bool true if the objects are not equal; otherwise, false. See Also WorkingDir" + }, + "api/ZeroInstall.Model.XmlUnknown.html": { + "href": "api/ZeroInstall.Model.XmlUnknown.html", + "title": "Class XmlUnknown | Zero Install .NET API", + "keywords": "Class XmlUnknown Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Abstract base class for XML serializable classes that are intended to retain any unknown XML elements or attributes loaded from an XML file. public abstract class XmlUnknown : IEquatable Inheritance object XmlUnknown Implements IEquatable Derived AccessPoint AccessPointList AppEntry AppList AutoPlayEvent Capability CapabilityList FileTypeExtension KnownProtocolPrefix Verb Catalog Feed FeedElement FeedPreferences ImplementationPreferences InterfacePreferences Selections Inherited Members object.Equals(object) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks Inheriting from this class will prevent the UnknownElement event from being triggered. Fields UnknownAttributes Contains any unknown additional XML attributes. public XmlAttribute[]? UnknownAttributes Field Value XmlAttribute[] UnknownElements Contains any unknown additional XML elements. public XmlElement[]? UnknownElements Field Value XmlElement[] Methods EnsureAttribute(object?, string) Ensures that a value deserialized from an XML attribute is set (not null). protected void EnsureAttribute(object? value, string attributeName) Parameters value object The mapped value to check. attributeName string The name of the XML attribute. Exceptions InvalidDataException value is null. EnsureAttributeSafeID(string?, string) Ensures that a value deserialized from an XML attribute is set (not null) and only contains alphanumeric characters, spaces ( ), dots (.), underscores (_), hyphens (-) and plus signs (+). protected void EnsureAttributeSafeID(string? value, string attributeName) Parameters value string The mapped value to check. attributeName string The name of the XML attribute. Exceptions InvalidDataException value is invalid. Equals(XmlUnknown?) Indicates whether the current object is equal to another object of the same type. public bool Equals(XmlUnknown? other) Parameters other XmlUnknown An object to compare with this object. Returns bool true if the current object is equal to the other parameter; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToShortXml() Returns a shortened XML representation (with attributes but without child elements). public string ToShortXml() Returns string Remarks Intended for use in error messages. Not suitable for parsing. Use ToXmlString(object, string) instead if you need a full XML representation." + }, + "api/ZeroInstall.Model.ZeroInstallDeployment.html": { + "href": "api/ZeroInstall.Model.ZeroInstallDeployment.html", + "title": "Class ZeroInstallDeployment | Zero Install .NET API", + "keywords": "Class ZeroInstallDeployment Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Registers and discovers Zero Install deployments on this system. public static class ZeroInstallDeployment Inheritance object ZeroInstallDeployment Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods FindOther(bool) Tries to find a deployment of Zero Install that is not the currently running one. public static string? FindOther(bool needsMachineWide = false) Parameters needsMachineWide bool true if a machine-wide deployment is required; false if a user-specific deployment will also do. Returns string The directory path of an deployment of Zero Install; null if none was found. GetPath(bool) Tries to find a deployment of Zero Install. public static string? GetPath(bool machineWide) Parameters machineWide bool true to look for machine-wide deployments; false to look for user-specific deployments. Returns string The directory path of an deployment of Zero Install; null if none was found. IsLibraryMode(bool) Indicates whether a deployment of Zero Install was made in library mode. public static bool IsLibraryMode(bool machineWide) Parameters machineWide bool true to look for machine-wide deployments; false to look for user-specific deployments. Returns bool Register(string, bool, bool) Registers a Zero Install deployment in the Windows registry if possible. public static void Register(string path, bool machineWide, bool libraryMode) Parameters path string The directory path of the deployment of Zero Install. machineWide bool true if path is a machine-wide location; false if it is a user-specific location. libraryMode bool Indicates whether the deployment was made in library mode. Unregister(bool) Unregisters a Zero Install deployment from the Windows registry if possible. public static void Unregister(bool machineWide) Parameters machineWide bool true if a machine-wide registration should be removed; false if a user-specific registration should be removed." + }, + "api/ZeroInstall.Model.ZeroInstallEnvironment.html": { + "href": "api/ZeroInstall.Model.ZeroInstallEnvironment.html", + "title": "Class ZeroInstallEnvironment | Zero Install .NET API", + "keywords": "Class ZeroInstallEnvironment Namespace ZeroInstall.Model Assembly ZeroInstall.Model.dll Provides access to Zero Install-related environment variables. public static class ZeroInstallEnvironment Inheritance object ZeroInstallEnvironment Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields CliName The name of the environment variable for Cli. public const string CliName = \"ZEROINSTALL\" Field Value string ExternalFetcherName The name of the environment variable for ExternalFetch. public const string ExternalFetcherName = \"ZEROINSTALL_EXTERNAL_FETCHER\" Field Value string FeedUriName The name of the environment variable for FeedUri. public const string FeedUriName = \"ZEROINSTALL_FEED_URI\" Field Value string GuiName The name of the environment variable for Gui. public const string GuiName = \"ZEROINSTALL_GUI\" Field Value string Properties Cli A command-line for launching the CLI version of Zero Install. public static string? Cli { get; } Property Value string ExternalFetch A command-line that downloads a set of Implementations piped in as XML via stdin. public static string? ExternalFetch { get; } Property Value string FeedUri The URI of the feed used to start this program. public static FeedUri? FeedUri { get; } Property Value FeedUri Gui A command-line for launching the graphical version of Zero Install. public static string? Gui { get; } Property Value string Methods LegacyMutexName(string?) Old name for an AppMutex to detect running instances of Zero Install. public static string LegacyMutexName(string? path = null) Parameters path string The directory where the Zero Install instance is located. Leave null for the currently running instance. Returns string Remarks Usually (but not guaranteed to be) different for multiple instances deployed in different paths. LegacyUpdateMutexName(string?) Old name for an AppMutex to block instances of Zero Install from starting during an update. public static string LegacyUpdateMutexName(string? path = null) Parameters path string The directory where the Zero Install instance is located. Leave null for the currently running instance. Returns string Remarks Usually (but not guaranteed to be) different for multiple instances deployed in different paths. MutexName(string?) Name for an AppMutex to detect running instances of Zero Install. public static string MutexName(string? path = null) Parameters path string The directory where the Zero Install instance is located. Leave null for the currently running instance. Returns string Remarks Usually (but not guaranteed to be) different for multiple instances deployed in different paths. UpdateMutexName(string?) Name for an AppMutex to block instances of Zero Install from starting during an update. public static string UpdateMutexName(string? path = null) Parameters path string The directory where the Zero Install instance is located. Leave null for the currently running instance. Returns string Remarks Usually (but not guaranteed to be) different for multiple instances deployed in different paths." + }, + "api/ZeroInstall.Model.html": { + "href": "api/ZeroInstall.Model.html", + "title": "Namespace ZeroInstall.Model | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Model Data model for the Zero Install feed format. NuGet package: ZeroInstall.Model Namespaces ZeroInstall.Model.Capabilities Extends the feed format with structures for describing application capabilities. This forms the basis for desktop integration. ZeroInstall.Model.Design TypeConverters used for serialization and to provide a better runtime experience when using PropertyGrids. ZeroInstall.Model.Preferences Structures for user-specified preferences and overrides for interfaces, feeds and implementations. ZeroInstall.Model.Selection Structures for representing Solver results. Classes ArchitectureExtensions Contains extension methods for Architecture, OS and Cpu. Archive Retrieves an implementation by downloading and extracting an archive. Arg A single command-line arguments to be passed to an executable. ArgBase Common base class for Arg and ForEachArgs. Binding Bindings specify how the chosen implementation is made known to the running program. Catalog Contains a list of Feeds, reduced to only contain information relevant for overview lists. Category An application category (e.g. Game or Office). Used for organizing application menus. Command A command says how to run an Implementation as a program. Constraint Restricts the set of versions from which the injector may choose an Implementation. CopyFromStep Copies files or directories from another implementation specified elsewhere in the same feed. Dependency A reference to an interface that is required as dependency. DependencyContainerExtensions Provides extension methods for IDependencyContainer. DownloadRetrievalMethod Represents a retrieval method that downloads data from the net. Element Abstract base class for ImplementationBase and Group. Contains those parameters that can be transferred from a Group to an Implementation. ElementCollectionExtensions Provides extension methods for Element collections. EntryPoint Associates a Command with a user-friendly name and description. EnvironmentBinding Make a chosen Implementation available by setting environment variables. ExecutableInBinding Make a chosen Implementation available as an executable at runtime. ExecutableInPath Make a chosen Implementation available as an executable in the search PATH. ExecutableInVar Make a chosen Implementation available as an executable path in an environment variable. Feed A feed contains all the information required to download and execute an application. FeedElement Abstract base class for XML serializable classes that are part of the Zero Install feed model. FeedReference A linked feed that contains more implementations of this interface. Is treated by the solver as if it were part of the main feed. FeedUri Represents a feed or interface URI or local path. Unlike Uri this class only accepts HTTP(S) URLs and absolute local paths. ForEachArgs Expands an environment variable to multiple arguments. The variable specified in ItemFrom is split using Separator and the Arguments are added once for each item. GenericBinding Zero Install will not know how to run a program using generic bindings itself, but it will include them in any selections documents it creates, which can then be executed by your custom code. Group All attributes of a group are inherited by any child Groups and Implementations as defaults, but can be overridden there. All Dependencys and Bindings are inherited (sub-groups may add more Dependencys and Bindings to the list, but cannot remove any). Icon An icon representing the application. Used in the Catalog GUI as well as for desktop icons, menu entries, etc.. IconExtensions Provides extensions methods related to Icons. Implementation An implementation is a specific version of an application that can be downloaded and executed (e.g. Firefox 3.6 for Windows). ImplementationBase Information for identifying an implementation of a Feed. Common base for Implementation and ImplementationSelection. ImplementationVersion Represents a version number consisting of dot-separated decimals and optional modifier strings. InterfaceReference A reference to an interface URI, e.g. for specifying which interface this feed implements or by which interface it is replaced. ManifestDigestPartialEqualityComparer Uses PartialEquals(ManifestDigest) to compare ManifestDigests. ManifestDigestPartialEqualityComparer Uses PartialEquals(ManifestDigest) to compare ImplementationBases. ModelUtils Provides utility methods for interface and feed URIs. OverlayBinding Make a chosen Implementation available by overlaying it onto another part of the file-system. PackageImplementation An implementation provided by a distribution-specific package manager instead of Zero Install. Recipe Retrieves an implementation by applying a list of IRecipeSteps, such as downloading and combining multiple archives. RemoveStep Removes or moves a file or directory. It is an error if the path is outside the implementation. RenameStep Renames or moves a file or directory. It is an error if the source or destination are outside the implementation. Requirements A set of requirements/restrictions imposed by the user on the Implementation selection process. Used as input for the solver. Restriction Restricts the versions of an Implementation that are allowed without creating a dependency on the implementation if its was not already chosen. RetrievalMethod A retrieval method is a way of getting a copy of an Implementation. Runner A special kind of dependency: the program that is used to run this one. For example, a Python program might specify Python as its runner. SingleFile Retrieves an implementation by downloading a single file. TargetBase Abstract base class for Element and FeedReference. Contains language and architecture parameters. VersionRange Represents a (possibly disjoint) set of ranges of ImplementationVersions. VersionRangePart Represents an individual non-disjoint part of a VersionRange. VersionRangePartExact An exact version number like 2.0 as a part of a VersionRange. VersionRangePartExclude An exclusion like !2.0 as a part of a VersionRange. VersionRangePartRange A version range like 1.0..!2.0 as a part of a VersionRange. WorkingDir Switches the working directory of a process on startup to a location within an implementation. Useful for supporting legacy Windows applications which do not properly locate their installation directory. XmlUnknown Abstract base class for XML serializable classes that are intended to retain any unknown XML elements or attributes loaded from an XML file. ZeroInstallDeployment Registers and discovers Zero Install deployments on this system. ZeroInstallEnvironment Provides access to Zero Install-related environment variables. Structs Architecture Describes a combination of an operating system and a CPU architecture. FeedTarget Associates a FeedUri with the Feed data acquired from there. ManifestDigest A manifest digest is a means of uniquely identifying an Implementation and verifying its contents. VersionDottedList Represents a dotted-list part of a ImplementationVersion. VersionPart Represents a part of a ImplementationVersion containing nothing, a VersionModifier, a DottedList or both. Interfaces IArgBaseContainer An object that contains ArgBases. IBindingContainer An object that contains Bindings. IDependencyContainer An object that contains Dependencys and Restrictions. IDescriptionContainer An object that has localizable descriptions. IElementContainer An object that contains Groups and Implementations. Supports a composite pattern. IIconContainer An object that contains Iconss. IInterfaceUri An object that contains an interface URI. IInterfaceUriBindingContainer An object that contains an interface URI string. IRecipeStep A retrieval step is a part of a Recipe. ISummaryContainer An object that has localizable summaries and descriptions. Enums Cpu Describes a CPU architecture. EnvironmentMode Controls how Insert or Value is added to a variable. Importance Describes how important a dependency is (i.e. whether ignoring it is an option). OS Describes an operating system family. Stability A stability rating for an Implementation. VersionModifier" + }, + "api/ZeroInstall.Publish.BuilderExtensions.html": { + "href": "api/ZeroInstall.Publish.BuilderExtensions.html", + "title": "Class BuilderExtensions | Zero Install .NET API", + "keywords": "Class BuilderExtensions Namespace ZeroInstall.Publish Assembly ZeroInstall.Publish.dll Helpers for adding RetrievalMethods to IBuilders and setting missing properties. public static class BuilderExtensions Inheritance object BuilderExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Add(IBuilder, DownloadRetrievalMethod, ICommandExecutor, ITaskHandler, string?) Applies a retrieval method to the implementation. Sets missing properties in the process. public static void Add(this IBuilder builder, DownloadRetrievalMethod retrievalMethod, ICommandExecutor executor, ITaskHandler handler, string? localPath = null) Parameters builder IBuilder The builder. retrievalMethod DownloadRetrievalMethod The retrieval method. executor ICommandExecutor Used to modify properties in an undoable fashion. handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. localPath string An optional local file path where the retrievalMethod has already been downloaded. Exceptions OperationCanceledException The user canceled the task. WebException A file could not be downloaded from the internet. IOException There is a problem accessing localPath. UnauthorizedAccessException Read access to localPath is not permitted. Add(IBuilder, RetrievalMethod, ICommandExecutor, ITaskHandler) Applies a retrieval method to the implementation. Sets missing properties in the process. public static void Add(this IBuilder builder, RetrievalMethod retrievalMethod, ICommandExecutor executor, ITaskHandler handler) Parameters builder IBuilder The builder. retrievalMethod RetrievalMethod The retrieval method. executor ICommandExecutor Used to modify properties in an undoable fashion. handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Exceptions OperationCanceledException The user canceled the task. WebException A file could not be downloaded from the internet. CopyFrom(IBuilder, CopyFromStep, ITaskHandler) Copies files or directories from another implementation fetched by an external 0install process. public static void CopyFrom(this IBuilder builder, CopyFromStep metadata, ITaskHandler handler) Parameters builder IBuilder The builder. metadata CopyFromStep The path of the source and destination file or directory. handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Exceptions UnauthorizedAccessException Access to a resource was denied. IOException An IO operation failed." + }, + "api/ZeroInstall.Publish.Capture.CaptureSession.html": { + "href": "api/ZeroInstall.Publish.Capture.CaptureSession.html", + "title": "Class CaptureSession | Zero Install .NET API", + "keywords": "Class CaptureSession Namespace ZeroInstall.Publish.Capture Assembly ZeroInstall.Publish.dll Manages the process of taking two Snapshots and comparing them to generate a Feed. public class CaptureSession Inheritance object CaptureSession Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties InstallationDir The fully qualified path to the installation directory; leave null or empty for auto-detection. public string? InstallationDir { get; set; } Property Value string Methods CollectFiles(string, Uri, ITaskHandler) Creates a archive containing the InstallationDir. public void CollectFiles(string archivePath, Uri archiveUrl, ITaskHandler handler) Parameters archivePath string The path of the archive file to create. archiveUrl Uri The URL where the archive will be uploaded. handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Remarks Sets RetrievalMethod and calls GenerateDigest(ITaskHandler). Exceptions InvalidOperationException Diff(ITaskHandler) was not called or MainCandidate is not set. OperationCanceledException The user canceled the task. IOException There was an error reading the installation files or writing the archive. UnauthorizedAccessException Access to the file system was not permitted. NotSupportedException The MIME type inferred from the archivePath doesn't belong to a known and supported archive type. Diff(ITaskHandler) Collects data from the locations indicated by the differences between the Start(FeedBuilder) state and the current system state. public void Diff(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Exceptions InvalidOperationException No installation directory was detected. OperationCanceledException The user canceled the task. IOException There was an error accessing the registry or file system. UnauthorizedAccessException Access to the registry or file system was not permitted. Finish() Finishes the capture process after Diff(ITaskHandler) has been called an MainCandidate has been set. public void Finish() Exceptions InvalidOperationException Diff(ITaskHandler) was not called or MainCandidate is not set. IOException There was an error accessing the registry or file system. UnauthorizedAccessException Access to the registry or file system was not permitted. Load(string, FeedBuilder) Loads a capture session from a snapshot file. public static CaptureSession Load(string path, FeedBuilder feedBuilder) Parameters path string The file to load from. feedBuilder FeedBuilder All collected data is stored into this builder. You can perform additional modifications before using Build() to get a feed. Returns CaptureSession Exceptions IOException A problem occurred while reading the file. UnauthorizedAccessException Read access to the file is not permitted. InvalidDataException A problem occurred while deserializing the binary data. Save(string) Saves the capture session to a snapshot file. public void Save(string path) Parameters path string The file to save in. Exceptions IOException A problem occurred while writing the file. UnauthorizedAccessException Write access to the file is not permitted. Start(FeedBuilder) Captures the current system state as a snapshot of the system state before the target application was installed. public static CaptureSession Start(FeedBuilder feedBuilder) Parameters feedBuilder FeedBuilder All collected data is stored into this builder. You can perform additional modifications before using Build() to get a feed. Returns CaptureSession Exceptions IOException There was an error accessing the registry or file system. UnauthorizedAccessException Access to the registry or the file system was not permitted." + }, + "api/ZeroInstall.Publish.Capture.CommandMapper.html": { + "href": "api/ZeroInstall.Publish.Capture.CommandMapper.html", + "title": "Class CommandMapper | Zero Install .NET API", + "keywords": "Class CommandMapper Namespace ZeroInstall.Publish.Capture Assembly ZeroInstall.Publish.dll Maps command-lines to the best matching Command. public class CommandMapper Inheritance object CommandMapper Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors CommandMapper(string, IEnumerable) Creates a new command provider. public CommandMapper(string installationDir, IEnumerable commands) Parameters installationDir string The fully qualified path to the installation directory. commands IEnumerable A list of all known-commands available within the installation directory. Properties InstallationDir The fully qualified path to the installation directory. public string InstallationDir { get; } Property Value string Methods GetCommand(string, out string?) Tries to find the best-match Command for a command-line. public Command? GetCommand(string commandLine, out string? additionalArgs) Parameters commandLine string The fully qualified command-line to try to match. additionalArgs string Any additional arguments from commandLine that are not covered by the returned Command. Returns Command The best matching Command or null if no match was found." + }, + "api/ZeroInstall.Publish.Capture.Snapshot.html": { + "href": "api/ZeroInstall.Publish.Capture.Snapshot.html", + "title": "Class Snapshot | Zero Install .NET API", + "keywords": "Class Snapshot Namespace ZeroInstall.Publish.Capture Assembly ZeroInstall.Publish.dll Represents the systems state at a point in time. This is used to determine changes. [Serializable] public class Snapshot Inheritance object Snapshot Derived SnapshotDiff Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties AutoPlayAssocsMachine A list of associations of AutoPlay events with AutoPlay handlers. public List<(string name, string handler)> AutoPlayAssocsMachine { get; } Property Value List<(string name, string client)> AutoPlayAssocsUser A list of associations of AutoPlay events with AutoPlay handlers. public List<(string name, string handler)> AutoPlayAssocsUser { get; } Property Value List<(string name, string client)> AutoPlayHandlersMachine A list of applications registered as AutoPlay handlers. public List AutoPlayHandlersMachine { get; } Property Value List AutoPlayHandlersUser A list of applications registered as AutoPlay handlers. public List AutoPlayHandlersUser { get; } Property Value List ClassIDs A list of COM class IDs. public List ClassIDs { get; } Property Value List ContextMenuAll A list of context menu entries for all filesystem objects (files and directories). public List ContextMenuAll { get; } Property Value List ContextMenuDirectories A list of context menu entries for all directories. public List ContextMenuDirectories { get; } Property Value List ContextMenuExecutableFiles A list of context menu entries for executable files. public List ContextMenuExecutableFiles { get; } Property Value List ContextMenuFiles A list of context menu entries for all files. public List ContextMenuFiles { get; } Property Value List FileAssocs A list of associations of file extensions with programmatic identifiers. public List<(string extension, string progID)> FileAssocs { get; } Property Value List<(string name, string client)> ProgIDs A list of programmatic identifiers. public List ProgIDs { get; } Property Value List ProgramsDirs A list of program installation directories. public List ProgramsDirs { get; } Property Value List ProtocolAssocs A list of protocol associations for well-known protocols (e.g. HTTP, FTP, ...). public List<(string protocol, string progID)> ProtocolAssocs { get; } Property Value List<(string name, string client)> RegisteredApplications A list of applications registered as candidates for default programs. public List RegisteredApplications { get; } Property Value List ServiceAssocs A list of associations of services with clients (e.g. web browsers, mail readers, ...). public List<(string name, string client)> ServiceAssocs { get; } Property Value List<(string name, string client)> Methods Take() Takes a snapshot of the current system state. public static Snapshot Take() Returns Snapshot The newly created snapshot. Exceptions IOException There was an error accessing the registry or file system. UnauthorizedAccessException Read access to the registry or file system was not permitted. PlatformNotSupportedException This method is called while running on a platform for which capturing is not supported." + }, + "api/ZeroInstall.Publish.Capture.SnapshotDiff.html": { + "href": "api/ZeroInstall.Publish.Capture.SnapshotDiff.html", + "title": "Class SnapshotDiff | Zero Install .NET API", + "keywords": "Class SnapshotDiff Namespace ZeroInstall.Publish.Capture Assembly ZeroInstall.Publish.dll Represents the differences between two Snapshots. Extracts information about applications installed. public class SnapshotDiff : Snapshot Inheritance object Snapshot SnapshotDiff Inherited Members Snapshot.ServiceAssocs Snapshot.AutoPlayHandlersUser Snapshot.AutoPlayHandlersMachine Snapshot.AutoPlayAssocsUser Snapshot.AutoPlayAssocsMachine Snapshot.FileAssocs Snapshot.ProtocolAssocs Snapshot.ProgIDs Snapshot.ClassIDs Snapshot.RegisteredApplications Snapshot.ContextMenuFiles Snapshot.ContextMenuExecutableFiles Snapshot.ContextMenuDirectories Snapshot.ContextMenuAll Snapshot.ProgramsDirs Snapshot.Take() object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors SnapshotDiff(Snapshot, Snapshot) Determines which elements have been added to the system between two snapshots. public SnapshotDiff(Snapshot before, Snapshot after) Parameters before Snapshot The first snapshot taken. after Snapshot The second snapshot taken. Remarks Assumes that all internal arrays are sorted alphabetically. Methods CollectAutoPlays(CommandMapper, CapabilityList) Collects data about AutoPlay handlers. public void CollectAutoPlays(CommandMapper commandMapper, CapabilityList capabilities) Parameters commandMapper CommandMapper Provides best-match command-line to Command mapping. capabilities CapabilityList The capability list to add the collected data to. Exceptions IOException There was an error accessing the registry. UnauthorizedAccessException Read access to the registry was not permitted. CollectContextMenus(CommandMapper, CapabilityList) Collects data about context menu entries. public void CollectContextMenus(CommandMapper commandMapper, CapabilityList capabilities) Parameters commandMapper CommandMapper Provides best-match command-line to Command mapping. capabilities CapabilityList The capability list to add the collected data to. Exceptions IOException There was an error accessing the registry. UnauthorizedAccessException Read access to the registry was not permitted. CollectDefaultPrograms(CommandMapper, CapabilityList, ref string?) Collects data about default programs. public void CollectDefaultPrograms(CommandMapper commandMapper, CapabilityList capabilities, ref string? appName) Parameters commandMapper CommandMapper Provides best-match command-line to Command mapping. capabilities CapabilityList The capability list to add the collected data to. appName string Is set to the name of the application as displayed to the user; unchanged if the name was not found. Exceptions IOException There was an error accessing the registry. UnauthorizedAccessException Read access to the registry was not permitted. CollectFileTypes(CommandMapper, CapabilityList) Collects data about file types and also URL protocol handlers. public void CollectFileTypes(CommandMapper commandMapper, CapabilityList capabilities) Parameters commandMapper CommandMapper Provides best-match command-line to Command mapping. capabilities CapabilityList The capability list to add the collected data to. Exceptions IOException There was an error accessing the registry. UnauthorizedAccessException Read access to the registry was not permitted. CollectProtocolAssocs(CommandMapper, CapabilityList) Collects data about well-known URL protocol handlers. public void CollectProtocolAssocs(CommandMapper commandMapper, CapabilityList capabilities) Parameters commandMapper CommandMapper Provides best-match command-line to Command mapping. capabilities CapabilityList The capability list to add the collected data to. Exceptions IOException There was an error accessing the registry. UnauthorizedAccessException Read access to the registry was not permitted. GetAppRegistration(CommandMapper, CapabilityList, ref string?, ref string?) Retrieves data about registered applications. public AppRegistration? GetAppRegistration(CommandMapper commandMapper, CapabilityList capabilities, ref string? appName, ref string? appDescription) Parameters commandMapper CommandMapper Provides best-match command-line to Command mapping. capabilities CapabilityList The capability list to add the collected data to. appName string Is set to the name of the application as displayed to the user; unchanged if the name was not found. appDescription string Is set to a user-friendly description of the application; unchanged if the name was not found. Returns AppRegistration Exceptions IOException There was an error accessing the registry. UnauthorizedAccessException Read access to the registry was not permitted. GetInstallationDir() Locates the directory into which the new application was installed. public string GetInstallationDir() Returns string Exceptions InvalidOperationException No installation directory was detected." + }, + "api/ZeroInstall.Publish.Capture.html": { + "href": "api/ZeroInstall.Publish.Capture.html", + "title": "Namespace ZeroInstall.Publish.Capture | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Publish.Capture Builds feeds by creating and comparing snapshots of the system before and after an application was installed. Classes CaptureSession Manages the process of taking two Snapshots and comparing them to generate a Feed. CommandMapper Maps command-lines to the best matching Command. Snapshot Represents the systems state at a point in time. This is used to determine changes. SnapshotDiff Represents the differences between two Snapshots. Extracts information about applications installed." + }, + "api/ZeroInstall.Publish.EntryPoints.BashScript.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.BashScript.html", + "title": "Class BashScript | Zero Install .NET API", + "keywords": "Class BashScript Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A script written in Perl. public sealed class BashScript : InterpretedScript, IEquatable, IEquatable Inheritance object Candidate InterpretedScript BashScript Implements IEquatable IEquatable Inherited Members InterpretedScript.InterpreterVersions InterpretedScript.CreateCommand() InterpretedScript.Equals(object) InterpretedScript.GetHashCode() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties InterpreterInterface The interface URI of the interpreter to run the script. protected override FeedUri InterpreterInterface { get; } Property Value FeedUri" + }, + "api/ZeroInstall.Publish.EntryPoints.Candidate.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.Candidate.html", + "title": "Class Candidate | Zero Install .NET API", + "keywords": "Class Candidate Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll Collects information about a potential candidate for an entry point. The subclass type determines the type of executable (native binary, interpreted script, etc.). [Equatable] public abstract class Candidate : IEquatable Inheritance object Candidate Implements IEquatable Derived InterpretedScript Java NativeExecutable Inherited Members object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties Architecture The application's target architecture. public Architecture Architecture { get; set; } Property Value Architecture BaseDirectory The base directory containing the entire application. [Browsable(false)] [IgnoreEquality] protected DirectoryInfo? BaseDirectory { get; } Property Value DirectoryInfo Category The main category of the application. May influence the placement in the start menu. [TypeConverter(typeof(CategoryNameConverter))] public string? Category { get; set; } Property Value string CommandName The Name used by CreateCommand(). protected string CommandName { get; } Property Value string Name The application's name. public string? Name { get; set; } Property Value string Remarks A suggestion for Name. NeedsTerminal Indicates whether the application is a command-line application (true) or a GUI application (false). public bool NeedsTerminal { get; set; } Property Value bool RelativePath The path of this entry point relative to BaseDirectory. [Browsable(false)] public string? RelativePath { get; } Property Value string Summary Short one-line description; the first word should not be upper-case unless it is a proper noun (e.g. \"cures all ills\"). public string? Summary { get; set; } Property Value string Remarks A suggestion for Summaries. Version The application's current version. public ImplementationVersion? Version { get; set; } Property Value ImplementationVersion Methods CreateCommand() Creates a Command to launch this entry point. public abstract Command CreateCommand() Returns Command Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Candidate?) protected bool Equals(Candidate? other) Parameters other Candidate Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. IsExecutable(string) Determines whether a file is executable. protected bool IsExecutable(string path) Parameters path string Returns bool ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToVersionRange(ImplementationVersion?) protected static VersionRange? ToVersionRange(ImplementationVersion? version) Parameters version ImplementationVersion Returns VersionRange Operators operator ==(Candidate?, Candidate?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Candidate? left, Candidate? right) Parameters left Candidate The left object right Candidate The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Candidate?, Candidate?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Candidate? left, Candidate? right) Parameters left Candidate The left object right Candidate The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Publish.EntryPoints.DetectCandidates.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.DetectCandidates.html", + "title": "Class DetectCandidates | Zero Install .NET API", + "keywords": "Class DetectCandidates Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll Detects entry point Candidates in a file system directory. public class DetectCandidates : ReadDirectoryBase, ITask Inheritance object MarshalByRefObject TaskBase ReadDirectoryBase DetectCandidates Implements ITask Inherited Members ReadDirectoryBase.Source ReadDirectoryBase.Execute() ReadDirectoryBase.UnitsByte ReadDirectoryBase.FollowSymlinks TaskBase.CancellationToken TaskBase.CredentialProvider TaskBase.Run(CancellationToken, ICredentialProvider, IProgress) TaskBase.Tag TaskBase.CanCancel TaskBase.PreventIdle TaskBase.State TaskBase.UnitsProcessed TaskBase.UnitsTotal MarshalByRefObject.GetLifetimeService() MarshalByRefObject.InitializeLifetimeService() MarshalByRefObject.MemberwiseClone(bool) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors DetectCandidates(string) Detects entry point Candidates in a file system directory. public DetectCandidates(string path) Parameters path string Properties Candidates The list of detected candidates. public IReadOnlyList Candidates { get; } Property Value IReadOnlyList Name A name describing the task in human-readable form. public override string Name { get; } Property Value string Methods HandleDirectory(DirectoryInfo) Called once for every sub-directory below Source. protected override void HandleDirectory(DirectoryInfo directory) Parameters directory DirectoryInfo The directory to handle. HandleFile(FileInfo, FileInfo?) Called once for every file below Source. protected override void HandleFile(FileInfo file, FileInfo? hardlinkTarget = null) Parameters file FileInfo The file to handle. hardlinkTarget FileInfo A previously handled file that is hardlinked to file. May be null." + }, + "api/ZeroInstall.Publish.EntryPoints.DotNetDll.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.DotNetDll.html", + "title": "Class DotNetDll | Zero Install .NET API", + "keywords": "Class DotNetDll Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll [Equatable] public sealed class DotNetDll : DotNetExe, IEquatable, IIconContainer, IEquatable, IEquatable Inheritance object Candidate NativeExecutable WindowsExe DotNetExe DotNetDll Implements IEquatable IIconContainer IEquatable IEquatable Inherited Members DotNetExe.RuntimeVersion DotNetExe.NeedsAspNetCore DotNetExe.CreateCommand() WindowsExe.ExtractIcon() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties ExecutableExtension protected override string ExecutableExtension { get; } Property Value string Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Operators operator ==(DotNetDll?, DotNetDll?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(DotNetDll? left, DotNetDll? right) Parameters left DotNetDll The left object right DotNetDll The right object Returns bool true if the objects are equal; otherwise, false. operator !=(DotNetDll?, DotNetDll?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(DotNetDll? left, DotNetDll? right) Parameters left DotNetDll The left object right DotNetDll The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Publish.EntryPoints.DotNetExe.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.DotNetExe.html", + "title": "Class DotNetExe | Zero Install .NET API", + "keywords": "Class DotNetExe Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll [Equatable] public class DotNetExe : WindowsExe, IEquatable, IIconContainer, IEquatable Inheritance object Candidate NativeExecutable WindowsExe DotNetExe Implements IEquatable IIconContainer IEquatable Derived DotNetDll Inherited Members WindowsExe.ExecutableExtension WindowsExe.GetCpu(PEMachineType) WindowsExe.ExtractIcon() Candidate.IsExecutable(string) Candidate.BaseDirectory Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToVersionRange(ImplementationVersion) Candidate.CommandName Candidate.ToString() Candidate.Equals(Candidate) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties NeedsAspNetCore Indicates whether the app needs the ASP.NET Core Runtime. public bool NeedsAspNetCore { get; set; } Property Value bool RuntimeVersion The version of the .NET Runtime required by the application. [TypeConverter(typeof(StringConstructorConverter))] public ImplementationVersion RuntimeVersion { get; set; } Property Value ImplementationVersion Methods CreateCommand() Creates a Command to launch this entry point. public override Command CreateCommand() Returns Command Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(DotNetExe?) protected bool Equals(DotNetExe? other) Parameters other DotNetExe Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Parse(PEHeader) protected override bool Parse(PEHeader peHeader) Parameters peHeader PEHeader Returns bool Operators operator ==(DotNetExe?, DotNetExe?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(DotNetExe? left, DotNetExe? right) Parameters left DotNetExe The left object right DotNetExe The right object Returns bool true if the objects are equal; otherwise, false. operator !=(DotNetExe?, DotNetExe?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(DotNetExe? left, DotNetExe? right) Parameters left DotNetExe The left object right DotNetExe The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Publish.EntryPoints.DotNetFrameworkExe.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.DotNetFrameworkExe.html", + "title": "Class DotNetFrameworkExe | Zero Install .NET API", + "keywords": "Class DotNetFrameworkExe Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A .NET/Mono executable. [Equatable] public sealed class DotNetFrameworkExe : WindowsExe, IEquatable, IIconContainer, IEquatable Inheritance object Candidate NativeExecutable WindowsExe DotNetFrameworkExe Implements IEquatable IIconContainer IEquatable Inherited Members WindowsExe.ExtractIcon() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties ExternalDependencies Does this application have external dependencies that need to be injected by Zero Install? Only enable if you are sure! public bool ExternalDependencies { get; set; } Property Value bool MinimumRuntimeVersion The minimum version of the .NET Runtime required by the application. [TypeConverter(typeof(DotNetVersionConverter))] public ImplementationVersion? MinimumRuntimeVersion { get; set; } Property Value ImplementationVersion RuntimeType The types of .NET Runtime supported by the application. public DotNetRuntimeType RuntimeType { get; set; } Property Value DotNetRuntimeType Methods CreateCommand() Creates a Command to launch this entry point. public override Command CreateCommand() Returns Command Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Parse(PEHeader) protected override bool Parse(PEHeader peHeader) Parameters peHeader PEHeader Returns bool Operators operator ==(DotNetFrameworkExe?, DotNetFrameworkExe?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(DotNetFrameworkExe? left, DotNetFrameworkExe? right) Parameters left DotNetFrameworkExe The left object right DotNetFrameworkExe The right object Returns bool true if the objects are equal; otherwise, false. operator !=(DotNetFrameworkExe?, DotNetFrameworkExe?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(DotNetFrameworkExe? left, DotNetFrameworkExe? right) Parameters left DotNetFrameworkExe The left object right DotNetFrameworkExe The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Publish.EntryPoints.DotNetRuntimeType.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.DotNetRuntimeType.html", + "title": "Enum DotNetRuntimeType | Zero Install .NET API", + "keywords": "Enum DotNetRuntimeType Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll public enum DotNetRuntimeType Fields DotNetFramework = 0 DotNetFrameworkClientProfile = 1 DotNetFrameworkOrMono = 3 Mono = 2" + }, + "api/ZeroInstall.Publish.EntryPoints.IIconContainer.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.IIconContainer.html", + "title": "Interface IIconContainer | Zero Install .NET API", + "keywords": "Interface IIconContainer Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll An executable with embedded icons. public interface IIconContainer Methods ExtractIcon() Extracts the primary icon of the executable. Icon ExtractIcon() Returns Icon" + }, + "api/ZeroInstall.Publish.EntryPoints.InterpretedScript.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.InterpretedScript.html", + "title": "Class InterpretedScript | Zero Install .NET API", + "keywords": "Class InterpretedScript Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A plain text script that is executed by a runtime interpreter. [Equatable] public abstract class InterpretedScript : Candidate, IEquatable, IEquatable Inheritance object Candidate InterpretedScript Implements IEquatable IEquatable Derived BashScript PerlScript PhpScript PowerShellScript PythonScript RubyScript Inherited Members Candidate.IsExecutable(string) Candidate.BaseDirectory Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToVersionRange(ImplementationVersion) Candidate.CommandName Candidate.ToString() Candidate.Equals(Candidate) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties InterpreterInterface The interface URI of the interpreter to run the script. protected abstract FeedUri InterpreterInterface { get; } Property Value FeedUri InterpreterVersions The range of versions of the script interpreter supported by the application. public VersionRange? InterpreterVersions { get; set; } Property Value VersionRange Methods CreateCommand() Creates a Command to launch this entry point. public override Command CreateCommand() Returns Command Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(InterpretedScript?) protected bool Equals(InterpretedScript? other) Parameters other InterpretedScript Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. HasShebang(FileInfo, string) Determines whether a file is executable and has a shebang line pointing to a specific interpreter. protected bool HasShebang(FileInfo file, string interpreter) Parameters file FileInfo The file to analyze. interpreter string The name of the interpreter to search for (e.g. 'python'). Returns bool Operators operator ==(InterpretedScript?, InterpretedScript?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(InterpretedScript? left, InterpretedScript? right) Parameters left InterpretedScript The left object right InterpretedScript The right object Returns bool true if the objects are equal; otherwise, false. operator !=(InterpretedScript?, InterpretedScript?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(InterpretedScript? left, InterpretedScript? right) Parameters left InterpretedScript The left object right InterpretedScript The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Publish.EntryPoints.Java.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.Java.html", + "title": "Class Java | Zero Install .NET API", + "keywords": "Class Java Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A compiled Java application. [Equatable] public abstract class Java : Candidate, IEquatable, IEquatable Inheritance object Candidate Java Implements IEquatable IEquatable Derived JavaClass JavaJar Inherited Members Candidate.IsExecutable(string) Candidate.BaseDirectory Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.CreateCommand() Candidate.ToVersionRange(ImplementationVersion) Candidate.CommandName Candidate.ToString() Candidate.Equals(Candidate) object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties ExternalDependencies Does this application have external dependencies that need to be injected by Zero Install? Only enable if you are sure! public bool ExternalDependencies { get; set; } Property Value bool GuiOnly Does this application have a graphical interface an no terminal output? Only enable if you are sure! public bool GuiOnly { get; set; } Property Value bool MinimumRuntimeVersion The minimum version of the Java Runtime Environment required by the application. [TypeConverter(typeof(JavaVersionConverter))] public ImplementationVersion? MinimumRuntimeVersion { get; set; } Property Value ImplementationVersion Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Java?) protected bool Equals(Java? other) Parameters other Java Returns bool GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Operators operator ==(Java?, Java?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(Java? left, Java? right) Parameters left Java The left object right Java The right object Returns bool true if the objects are equal; otherwise, false. operator !=(Java?, Java?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(Java? left, Java? right) Parameters left Java The left object right Java The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Publish.EntryPoints.JavaClass.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.JavaClass.html", + "title": "Class JavaClass | Zero Install .NET API", + "keywords": "Class JavaClass Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A compiled Java class file. public sealed class JavaClass : Java, IEquatable, IEquatable Inheritance object Candidate Java JavaClass Implements IEquatable IEquatable Inherited Members Java.MinimumRuntimeVersion Java.ExternalDependencies Java.GuiOnly Java.Equals(object) Java.GetHashCode() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Methods CreateCommand() Creates a Command to launch this entry point. public override Command CreateCommand() Returns Command" + }, + "api/ZeroInstall.Publish.EntryPoints.JavaJar.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.JavaJar.html", + "title": "Class JavaJar | Zero Install .NET API", + "keywords": "Class JavaJar Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A Java JAR archive. public sealed class JavaJar : Java, IEquatable, IEquatable Inheritance object Candidate Java JavaJar Implements IEquatable IEquatable Inherited Members Java.MinimumRuntimeVersion Java.ExternalDependencies Java.GuiOnly Java.Equals(object) Java.GetHashCode() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Methods CreateCommand() Creates a Command to launch this entry point. public override Command CreateCommand() Returns Command" + }, + "api/ZeroInstall.Publish.EntryPoints.MacOSApp.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.MacOSApp.html", + "title": "Class MacOSApp | Zero Install .NET API", + "keywords": "Class MacOSApp Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A binary inside a MacOS X application bundle. public sealed class MacOSApp : PosixExecutable, IEquatable Inheritance object Candidate NativeExecutable PosixExecutable MacOSApp Implements IEquatable Inherited Members NativeExecutable.CreateCommand() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() Candidate.Equals(object) Candidate.GetHashCode() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object)" + }, + "api/ZeroInstall.Publish.EntryPoints.NativeExecutable.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.NativeExecutable.html", + "title": "Class NativeExecutable | Zero Install .NET API", + "keywords": "Class NativeExecutable Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A file that can be executed directly by the operating system without an additional runtime environment. public abstract class NativeExecutable : Candidate, IEquatable Inheritance object Candidate NativeExecutable Implements IEquatable Derived PosixExecutable WindowsBatch WindowsExe Inherited Members Candidate.IsExecutable(string) Candidate.BaseDirectory Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToVersionRange(ImplementationVersion) Candidate.CommandName Candidate.ToString() Candidate.Equals(object) Candidate.Equals(Candidate) Candidate.GetHashCode() object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Methods CreateCommand() Creates a Command to launch this entry point. public override Command CreateCommand() Returns Command" + }, + "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDataDirectory.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDataDirectory.html", + "title": "Struct PEHeader.ImageDataDirectory | Zero Install .NET API", + "keywords": "Struct PEHeader.ImageDataDirectory Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll public struct PEHeader.ImageDataDirectory Inherited Members ValueType.Equals(object) ValueType.GetHashCode() ValueType.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Fields Size public uint Size Field Value uint VirtualAddress public uint VirtualAddress Field Value uint" + }, + "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDosHeader.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDosHeader.html", + "title": "Struct PEHeader.ImageDosHeader | Zero Install .NET API", + "keywords": "Struct PEHeader.ImageDosHeader Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll public struct PEHeader.ImageDosHeader Inherited Members ValueType.Equals(object) ValueType.GetHashCode() ValueType.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Fields e_cblp public ushort e_cblp Field Value ushort e_cp public ushort e_cp Field Value ushort e_cparhdr public ushort e_cparhdr Field Value ushort e_crlc public ushort e_crlc Field Value ushort e_cs public ushort e_cs Field Value ushort e_csum public ushort e_csum Field Value ushort e_ip public ushort e_ip Field Value ushort e_lfanew public uint e_lfanew Field Value uint e_lfarlc public ushort e_lfarlc Field Value ushort e_magic public ushort e_magic Field Value ushort e_maxalloc public ushort e_maxalloc Field Value ushort e_minalloc public ushort e_minalloc Field Value ushort e_oemid public ushort e_oemid Field Value ushort e_oeminfo public ushort e_oeminfo Field Value ushort e_ovno public ushort e_ovno Field Value ushort e_res2_0 public ushort e_res2_0 Field Value ushort e_res2_1 public ushort e_res2_1 Field Value ushort e_res2_2 public ushort e_res2_2 Field Value ushort e_res2_3 public ushort e_res2_3 Field Value ushort e_res2_4 public ushort e_res2_4 Field Value ushort e_res2_5 public ushort e_res2_5 Field Value ushort e_res2_6 public ushort e_res2_6 Field Value ushort e_res2_7 public ushort e_res2_7 Field Value ushort e_res2_8 public ushort e_res2_8 Field Value ushort e_res2_9 public ushort e_res2_9 Field Value ushort e_res_0 public ushort e_res_0 Field Value ushort e_res_1 public ushort e_res_1 Field Value ushort e_res_2 public ushort e_res_2 Field Value ushort e_res_3 public ushort e_res_3 Field Value ushort e_sp public ushort e_sp Field Value ushort e_ss public ushort e_ss Field Value ushort" + }, + "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageFileHeader.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageFileHeader.html", + "title": "Struct PEHeader.ImageFileHeader | Zero Install .NET API", + "keywords": "Struct PEHeader.ImageFileHeader Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll public struct PEHeader.ImageFileHeader Inherited Members ValueType.Equals(object) ValueType.GetHashCode() ValueType.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Fields Characteristics public ushort Characteristics Field Value ushort Machine public PEMachineType Machine Field Value PEMachineType NumberOfSections public ushort NumberOfSections Field Value ushort NumberOfSymbols public uint NumberOfSymbols Field Value uint PointerToSymbolTable public uint PointerToSymbolTable Field Value uint SizeOfOptionalHeader public ushort SizeOfOptionalHeader Field Value ushort TimeDateStamp public uint TimeDateStamp Field Value uint" + }, + "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader32.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader32.html", + "title": "Struct PEHeader.ImageOptionalHeader32 | Zero Install .NET API", + "keywords": "Struct PEHeader.ImageOptionalHeader32 Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll public struct PEHeader.ImageOptionalHeader32 Inherited Members ValueType.Equals(object) ValueType.GetHashCode() ValueType.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Fields AddressOfEntryPoint public uint AddressOfEntryPoint Field Value uint Architecture public PEHeader.ImageDataDirectory Architecture Field Value PEHeader.ImageDataDirectory BaseOfCode public uint BaseOfCode Field Value uint BaseOfData public uint BaseOfData Field Value uint BaseRelocationTable public PEHeader.ImageDataDirectory BaseRelocationTable Field Value PEHeader.ImageDataDirectory BoundImport public PEHeader.ImageDataDirectory BoundImport Field Value PEHeader.ImageDataDirectory CLRRuntimeHeader public PEHeader.ImageDataDirectory CLRRuntimeHeader Field Value PEHeader.ImageDataDirectory CertificateTable public PEHeader.ImageDataDirectory CertificateTable Field Value PEHeader.ImageDataDirectory CheckSum public uint CheckSum Field Value uint Debug public PEHeader.ImageDataDirectory Debug Field Value PEHeader.ImageDataDirectory DelayImportDescriptor public PEHeader.ImageDataDirectory DelayImportDescriptor Field Value PEHeader.ImageDataDirectory DllCharacteristics public ushort DllCharacteristics Field Value ushort ExceptionTable public PEHeader.ImageDataDirectory ExceptionTable Field Value PEHeader.ImageDataDirectory ExportTable public PEHeader.ImageDataDirectory ExportTable Field Value PEHeader.ImageDataDirectory FileAlignment public uint FileAlignment Field Value uint GlobalPtr public PEHeader.ImageDataDirectory GlobalPtr Field Value PEHeader.ImageDataDirectory IAT public PEHeader.ImageDataDirectory IAT Field Value PEHeader.ImageDataDirectory ImageBase public uint ImageBase Field Value uint ImportTable public PEHeader.ImageDataDirectory ImportTable Field Value PEHeader.ImageDataDirectory LoadConfigTable public PEHeader.ImageDataDirectory LoadConfigTable Field Value PEHeader.ImageDataDirectory LoaderFlags public uint LoaderFlags Field Value uint Magic public ushort Magic Field Value ushort MajorImageVersion public ushort MajorImageVersion Field Value ushort MajorLinkerVersion public byte MajorLinkerVersion Field Value byte MajorOperatingSystemVersion public ushort MajorOperatingSystemVersion Field Value ushort MajorSubsystemVersion public ushort MajorSubsystemVersion Field Value ushort MinorImageVersion public ushort MinorImageVersion Field Value ushort MinorLinkerVersion public byte MinorLinkerVersion Field Value byte MinorOperatingSystemVersion public ushort MinorOperatingSystemVersion Field Value ushort MinorSubsystemVersion public ushort MinorSubsystemVersion Field Value ushort NumberOfRvaAndSizes public uint NumberOfRvaAndSizes Field Value uint Reserved public PEHeader.ImageDataDirectory Reserved Field Value PEHeader.ImageDataDirectory ResourceTable public PEHeader.ImageDataDirectory ResourceTable Field Value PEHeader.ImageDataDirectory SectionAlignment public uint SectionAlignment Field Value uint SizeOfCode public uint SizeOfCode Field Value uint SizeOfHeaders public uint SizeOfHeaders Field Value uint SizeOfHeapCommit public uint SizeOfHeapCommit Field Value uint SizeOfHeapReserve public uint SizeOfHeapReserve Field Value uint SizeOfImage public uint SizeOfImage Field Value uint SizeOfInitializedData public uint SizeOfInitializedData Field Value uint SizeOfStackCommit public uint SizeOfStackCommit Field Value uint SizeOfStackReserve public uint SizeOfStackReserve Field Value uint SizeOfUninitializedData public uint SizeOfUninitializedData Field Value uint Subsystem public PESubsystem Subsystem Field Value PESubsystem TLSTable public PEHeader.ImageDataDirectory TLSTable Field Value PEHeader.ImageDataDirectory Win32VersionValue public uint Win32VersionValue Field Value uint" + }, + "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader64.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader64.html", + "title": "Struct PEHeader.ImageOptionalHeader64 | Zero Install .NET API", + "keywords": "Struct PEHeader.ImageOptionalHeader64 Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll public struct PEHeader.ImageOptionalHeader64 Inherited Members ValueType.Equals(object) ValueType.GetHashCode() ValueType.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Fields AddressOfEntryPoint public uint AddressOfEntryPoint Field Value uint Architecture public PEHeader.ImageDataDirectory Architecture Field Value PEHeader.ImageDataDirectory BaseOfCode public uint BaseOfCode Field Value uint BaseRelocationTable public PEHeader.ImageDataDirectory BaseRelocationTable Field Value PEHeader.ImageDataDirectory BoundImport public PEHeader.ImageDataDirectory BoundImport Field Value PEHeader.ImageDataDirectory CLRRuntimeHeader public PEHeader.ImageDataDirectory CLRRuntimeHeader Field Value PEHeader.ImageDataDirectory CertificateTable public PEHeader.ImageDataDirectory CertificateTable Field Value PEHeader.ImageDataDirectory CheckSum public uint CheckSum Field Value uint Debug public PEHeader.ImageDataDirectory Debug Field Value PEHeader.ImageDataDirectory DelayImportDescriptor public PEHeader.ImageDataDirectory DelayImportDescriptor Field Value PEHeader.ImageDataDirectory DllCharacteristics public ushort DllCharacteristics Field Value ushort ExceptionTable public PEHeader.ImageDataDirectory ExceptionTable Field Value PEHeader.ImageDataDirectory ExportTable public PEHeader.ImageDataDirectory ExportTable Field Value PEHeader.ImageDataDirectory FileAlignment public uint FileAlignment Field Value uint GlobalPtr public PEHeader.ImageDataDirectory GlobalPtr Field Value PEHeader.ImageDataDirectory IAT public PEHeader.ImageDataDirectory IAT Field Value PEHeader.ImageDataDirectory ImageBase public ulong ImageBase Field Value ulong ImportTable public PEHeader.ImageDataDirectory ImportTable Field Value PEHeader.ImageDataDirectory LoadConfigTable public PEHeader.ImageDataDirectory LoadConfigTable Field Value PEHeader.ImageDataDirectory LoaderFlags public uint LoaderFlags Field Value uint Magic public ushort Magic Field Value ushort MajorImageVersion public ushort MajorImageVersion Field Value ushort MajorLinkerVersion public byte MajorLinkerVersion Field Value byte MajorOperatingSystemVersion public ushort MajorOperatingSystemVersion Field Value ushort MajorSubsystemVersion public ushort MajorSubsystemVersion Field Value ushort MinorImageVersion public ushort MinorImageVersion Field Value ushort MinorLinkerVersion public byte MinorLinkerVersion Field Value byte MinorOperatingSystemVersion public ushort MinorOperatingSystemVersion Field Value ushort MinorSubsystemVersion public ushort MinorSubsystemVersion Field Value ushort NumberOfRvaAndSizes public uint NumberOfRvaAndSizes Field Value uint Reserved public PEHeader.ImageDataDirectory Reserved Field Value PEHeader.ImageDataDirectory ResourceTable public PEHeader.ImageDataDirectory ResourceTable Field Value PEHeader.ImageDataDirectory SectionAlignment public uint SectionAlignment Field Value uint SizeOfCode public uint SizeOfCode Field Value uint SizeOfHeaders public uint SizeOfHeaders Field Value uint SizeOfHeapCommit public ulong SizeOfHeapCommit Field Value ulong SizeOfHeapReserve public ulong SizeOfHeapReserve Field Value ulong SizeOfImage public uint SizeOfImage Field Value uint SizeOfInitializedData public uint SizeOfInitializedData Field Value uint SizeOfStackCommit public ulong SizeOfStackCommit Field Value ulong SizeOfStackReserve public ulong SizeOfStackReserve Field Value ulong SizeOfUninitializedData public uint SizeOfUninitializedData Field Value uint Subsystem public PESubsystem Subsystem Field Value PESubsystem TLSTable public PEHeader.ImageDataDirectory TLSTable Field Value PEHeader.ImageDataDirectory Win32VersionValue public uint Win32VersionValue Field Value uint" + }, + "api/ZeroInstall.Publish.EntryPoints.PEHeader.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PEHeader.html", + "title": "Class PEHeader | Zero Install .NET API", + "keywords": "Class PEHeader Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll Extracts meta data from PE (Portable Executable) file headers. public class PEHeader Inheritance object PEHeader Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors PEHeader(string) Reads the PE header of a file. public PEHeader(string path) Parameters path string The file to read. Properties DosHeader public PEHeader.ImageDosHeader DosHeader { get; } Property Value PEHeader.ImageDosHeader FileHeader public PEHeader.ImageFileHeader FileHeader { get; } Property Value PEHeader.ImageFileHeader Is32BitHeader public bool Is32BitHeader { get; } Property Value bool OptionalHeader32 public PEHeader.ImageOptionalHeader32 OptionalHeader32 { get; } Property Value PEHeader.ImageOptionalHeader32 OptionalHeader64 public PEHeader.ImageOptionalHeader64 OptionalHeader64 { get; } Property Value PEHeader.ImageOptionalHeader64 Subsystem public PESubsystem Subsystem { get; } Property Value PESubsystem" + }, + "api/ZeroInstall.Publish.EntryPoints.PEMachineType.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PEMachineType.html", + "title": "Enum PEMachineType | Zero Install .NET API", + "keywords": "Enum PEMachineType Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll The machine type specified by a PE file (i.e., the CPU architecture the binary runs on). public enum PEMachineType : ushort Fields I386 = 332 Itanium = 512 Native = 0 X64 = 34404" + }, + "api/ZeroInstall.Publish.EntryPoints.PESubsystem.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PESubsystem.html", + "title": "Enum PESubsystem | Zero Install .NET API", + "keywords": "Enum PESubsystem Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll The subsystem specified by a PE file (i.e., whether the binary is a console or GUI application). public enum PESubsystem : ushort Fields Native = 1 OS2Cui = 5 PosixCui = 7 WindowsCui = 3 WindowsGui = 2" + }, + "api/ZeroInstall.Publish.EntryPoints.PerlScript.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PerlScript.html", + "title": "Class PerlScript | Zero Install .NET API", + "keywords": "Class PerlScript Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A script written in Perl. public sealed class PerlScript : InterpretedScript, IEquatable, IEquatable Inheritance object Candidate InterpretedScript PerlScript Implements IEquatable IEquatable Inherited Members InterpretedScript.InterpreterVersions InterpretedScript.CreateCommand() InterpretedScript.Equals(object) InterpretedScript.GetHashCode() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties InterpreterInterface The interface URI of the interpreter to run the script. protected override FeedUri InterpreterInterface { get; } Property Value FeedUri" + }, + "api/ZeroInstall.Publish.EntryPoints.PhpScript.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PhpScript.html", + "title": "Class PhpScript | Zero Install .NET API", + "keywords": "Class PhpScript Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A script written in PHP. public sealed class PhpScript : InterpretedScript, IEquatable, IEquatable Inheritance object Candidate InterpretedScript PhpScript Implements IEquatable IEquatable Inherited Members InterpretedScript.InterpreterVersions InterpretedScript.CreateCommand() InterpretedScript.Equals(object) InterpretedScript.GetHashCode() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties InterpreterInterface The interface URI of the interpreter to run the script. protected override FeedUri InterpreterInterface { get; } Property Value FeedUri" + }, + "api/ZeroInstall.Publish.EntryPoints.PosixBinary.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PosixBinary.html", + "title": "Class PosixBinary | Zero Install .NET API", + "keywords": "Class PosixBinary Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll An ELF (Executable and Linkable Format) binary for a POSIX-style operation system. public sealed class PosixBinary : PosixExecutable, IEquatable Inheritance object Candidate NativeExecutable PosixExecutable PosixBinary Implements IEquatable Inherited Members NativeExecutable.CreateCommand() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() Candidate.Equals(object) Candidate.GetHashCode() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object)" + }, + "api/ZeroInstall.Publish.EntryPoints.PosixExecutable.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PosixExecutable.html", + "title": "Class PosixExecutable | Zero Install .NET API", + "keywords": "Class PosixExecutable Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll Any file with the POSIX executable bit (xbit) set. public abstract class PosixExecutable : NativeExecutable, IEquatable Inheritance object Candidate NativeExecutable PosixExecutable Implements IEquatable Derived MacOSApp PosixBinary PosixScript Inherited Members NativeExecutable.CreateCommand() Candidate.IsExecutable(string) Candidate.BaseDirectory Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToVersionRange(ImplementationVersion) Candidate.CommandName Candidate.ToString() Candidate.Equals(object) Candidate.Equals(Candidate) Candidate.GetHashCode() object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object)" + }, + "api/ZeroInstall.Publish.EntryPoints.PosixScript.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PosixScript.html", + "title": "Class PosixScript | Zero Install .NET API", + "keywords": "Class PosixScript Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A shebang (#!) script for execution on a POSIX-style operating system. public sealed class PosixScript : PosixExecutable, IEquatable Inheritance object Candidate NativeExecutable PosixExecutable PosixScript Implements IEquatable Inherited Members NativeExecutable.CreateCommand() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() Candidate.Equals(object) Candidate.GetHashCode() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object)" + }, + "api/ZeroInstall.Publish.EntryPoints.PowerShellScript.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PowerShellScript.html", + "title": "Class PowerShellScript | Zero Install .NET API", + "keywords": "Class PowerShellScript Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A script written in PowerShell. [Equatable] public sealed class PowerShellScript : InterpretedScript, IEquatable, IEquatable, IEquatable Inheritance object Candidate InterpretedScript PowerShellScript Implements IEquatable IEquatable IEquatable Inherited Members InterpretedScript.InterpreterVersions Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties InterpreterInterface The interface URI of the interpreter to run the script. protected override FeedUri InterpreterInterface { get; } Property Value FeedUri PowerShellType The types of PowerShell supported by the script. public PowerShellType PowerShellType { get; set; } Property Value PowerShellType Methods CreateCommand() Creates a Command to launch this entry point. public override Command CreateCommand() Returns Command Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Operators operator ==(PowerShellScript?, PowerShellScript?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(PowerShellScript? left, PowerShellScript? right) Parameters left PowerShellScript The left object right PowerShellScript The right object Returns bool true if the objects are equal; otherwise, false. operator !=(PowerShellScript?, PowerShellScript?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(PowerShellScript? left, PowerShellScript? right) Parameters left PowerShellScript The left object right PowerShellScript The right object Returns bool true if the objects are not equal; otherwise, false." + }, + "api/ZeroInstall.Publish.EntryPoints.PowerShellType.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PowerShellType.html", + "title": "Enum PowerShellType | Zero Install .NET API", + "keywords": "Enum PowerShellType Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll public enum PowerShellType Fields Any = 0 CoreOnly = 2 WindowsOnly = 1" + }, + "api/ZeroInstall.Publish.EntryPoints.PythonScript.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.PythonScript.html", + "title": "Class PythonScript | Zero Install .NET API", + "keywords": "Class PythonScript Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A script written in Python. public sealed class PythonScript : InterpretedScript, IEquatable, IEquatable Inheritance object Candidate InterpretedScript PythonScript Implements IEquatable IEquatable Inherited Members InterpretedScript.InterpreterVersions InterpretedScript.Equals(object) InterpretedScript.GetHashCode() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties GuiOnly Does this application have a graphical interface an no terminal output? Only enable if you are sure! public bool GuiOnly { get; set; } Property Value bool InterpreterInterface The interface URI of the interpreter to run the script. protected override FeedUri InterpreterInterface { get; } Property Value FeedUri Methods CreateCommand() Creates a Command to launch this entry point. public override Command CreateCommand() Returns Command" + }, + "api/ZeroInstall.Publish.EntryPoints.RubyScript.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.RubyScript.html", + "title": "Class RubyScript | Zero Install .NET API", + "keywords": "Class RubyScript Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A script written in Ruby. public sealed class RubyScript : InterpretedScript, IEquatable, IEquatable Inheritance object Candidate InterpretedScript RubyScript Implements IEquatable IEquatable Inherited Members InterpretedScript.InterpreterVersions InterpretedScript.CreateCommand() InterpretedScript.Equals(object) InterpretedScript.GetHashCode() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Properties InterpreterInterface The interface URI of the interpreter to run the script. protected override FeedUri InterpreterInterface { get; } Property Value FeedUri" + }, + "api/ZeroInstall.Publish.EntryPoints.WindowsBatch.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.WindowsBatch.html", + "title": "Class WindowsBatch | Zero Install .NET API", + "keywords": "Class WindowsBatch Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A Windows batch file/script. public sealed class WindowsBatch : NativeExecutable, IEquatable Inheritance object Candidate NativeExecutable WindowsBatch Implements IEquatable Inherited Members NativeExecutable.CreateCommand() Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToString() Candidate.Equals(object) Candidate.GetHashCode() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object)" + }, + "api/ZeroInstall.Publish.EntryPoints.WindowsExe.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.WindowsExe.html", + "title": "Class WindowsExe | Zero Install .NET API", + "keywords": "Class WindowsExe Namespace ZeroInstall.Publish.EntryPoints Assembly ZeroInstall.Publish.dll A native PE (Portable Executable) for Windows. public class WindowsExe : NativeExecutable, IEquatable, IIconContainer Inheritance object Candidate NativeExecutable WindowsExe Implements IEquatable IIconContainer Derived DotNetExe DotNetFrameworkExe Inherited Members NativeExecutable.CreateCommand() Candidate.IsExecutable(string) Candidate.BaseDirectory Candidate.RelativePath Candidate.Name Candidate.Summary Candidate.NeedsTerminal Candidate.Architecture Candidate.Version Candidate.Category Candidate.ToVersionRange(ImplementationVersion) Candidate.CommandName Candidate.ToString() Candidate.Equals(object) Candidate.Equals(Candidate) Candidate.GetHashCode() object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Properties ExecutableExtension protected virtual string ExecutableExtension { get; } Property Value string Methods ExtractIcon() Extracts the primary icon of the executable. public Icon ExtractIcon() Returns Icon GetCpu(PEMachineType) protected static Cpu GetCpu(PEMachineType machine) Parameters machine PEMachineType Returns Cpu Parse(PEHeader) protected virtual bool Parse(PEHeader peHeader) Parameters peHeader PEHeader Returns bool" + }, + "api/ZeroInstall.Publish.EntryPoints.html": { + "href": "api/ZeroInstall.Publish.EntryPoints.html", + "title": "Namespace ZeroInstall.Publish.EntryPoints | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Publish.EntryPoints Automatic detection of application entry points. Helps publishers set up the appropriate Commands and Runners. Classes BashScript A script written in Perl. Candidate Collects information about a potential candidate for an entry point. The subclass type determines the type of executable (native binary, interpreted script, etc.). DetectCandidates Detects entry point Candidates in a file system directory. DotNetDll DotNetExe DotNetFrameworkExe A .NET/Mono executable. InterpretedScript A plain text script that is executed by a runtime interpreter. Java A compiled Java application. JavaClass A compiled Java class file. JavaJar A Java JAR archive. MacOSApp A binary inside a MacOS X application bundle. NativeExecutable A file that can be executed directly by the operating system without an additional runtime environment. PEHeader Extracts meta data from PE (Portable Executable) file headers. PerlScript A script written in Perl. PhpScript A script written in PHP. PosixBinary An ELF (Executable and Linkable Format) binary for a POSIX-style operation system. PosixExecutable Any file with the POSIX executable bit (xbit) set. PosixScript A shebang (#!) script for execution on a POSIX-style operating system. PowerShellScript A script written in PowerShell. PythonScript A script written in Python. RubyScript A script written in Ruby. WindowsBatch A Windows batch file/script. WindowsExe A native PE (Portable Executable) for Windows. Structs PEHeader.ImageDataDirectory PEHeader.ImageDosHeader PEHeader.ImageFileHeader PEHeader.ImageOptionalHeader32 PEHeader.ImageOptionalHeader64 Interfaces IIconContainer An executable with embedded icons. Enums DotNetRuntimeType PEMachineType The machine type specified by a PE file (i.e., the CPU architecture the binary runs on). PESubsystem The subsystem specified by a PE file (i.e., whether the binary is a console or GUI application). PowerShellType" + }, + "api/ZeroInstall.Publish.FeedBuilder.html": { + "href": "api/ZeroInstall.Publish.FeedBuilder.html", + "title": "Class FeedBuilder | Zero Install .NET API", + "keywords": "Class FeedBuilder Namespace ZeroInstall.Publish Assembly ZeroInstall.Publish.dll Builds simple Feeds containing a single Implementation. [MustDisposeResource] public class FeedBuilder : IDisposable Inheritance object FeedBuilder Implements IDisposable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties Candidates Lists auto-detected candidates for EntryPoints. public IEnumerable Candidates { get; } Property Value IEnumerable CapabilityList Set to configure CapabilityLists. public CapabilityList? CapabilityList { get; set; } Property Value CapabilityList Commands Lists the Command derived from Candidates and MainCandidate. public List Commands { get; } Property Value List EntryPoints Lists the EntryPoints accompanying Commands. public List EntryPoints { get; } Property Value List ID The value used for ID. public string? ID { get; } Property Value string Icons Set to configure Icons. public ICollection Icons { get; } Property Value ICollection ImplementationDirectory Set the directory to search for Candidates and to generate the ManifestDigest from. Is usually a subdirectory of or equal to TemporaryDirectory. public string? ImplementationDirectory { get; set; } Property Value string MainCandidate Set the main entry point. Provides meta-data and startup instructions for the application. Should be one of the auto-detected Candidates. public Candidate? MainCandidate { get; set; } Property Value Candidate ManifestDigest The value used for ManifestDigest. public ManifestDigest ManifestDigest { get; } Property Value ManifestDigest RetrievalMethod Set to configure RetrievalMethods. public RetrievalMethod? RetrievalMethod { get; set; } Property Value RetrievalMethod SecretKey Set to configure SecretKey. public OpenPgpSecretKey? SecretKey { get; set; } Property Value OpenPgpSecretKey TemporaryDirectory A temporary directory to prepare files for ImplementationDirectory. Not used by the FeedBuilder itself. public TemporaryDirectory? TemporaryDirectory { get; set; } Property Value TemporaryDirectory Remarks Setting a new value will automatically Dispose() the previous one. Uri Set to configure Uri. public FeedUri? Uri { get; set; } Property Value FeedUri Methods Build() Generates a feed as described by the properties. public SignedFeed Build() Returns SignedFeed Exceptions InvalidOperationException Required values have not been generated or set yet. DetectCandidates(ITaskHandler) Detects Candidates in the ImplementationDirectory. public void DetectCandidates(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Exceptions InvalidOperationException ImplementationDirectory is null or empty. OperationCanceledException The user canceled the task. IOException There was a problem generating the manifest or detecting the executables. UnauthorizedAccessException Write access to temporary files was not permitted. Dispose() Deletes the TemporaryDirectory. public void Dispose() GenerateCommands() Generates Commands and EntryPoints bases on Candidates and MainCandidate. public void GenerateCommands() Exceptions InvalidOperationException MainCandidate is null. GenerateDigest(ITaskHandler) Generates the ID and ManifestDigest. public void GenerateDigest(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be informed about IO tasks. Exceptions InvalidOperationException ImplementationDirectory is null or empty. OperationCanceledException The user canceled the task. IOException There was a problem generating the manifest. UnauthorizedAccessException Write access to temporary files was not permitted." + }, + "api/ZeroInstall.Publish.FeedEditing.html": { + "href": "api/ZeroInstall.Publish.FeedEditing.html", + "title": "Class FeedEditing | Zero Install .NET API", + "keywords": "Class FeedEditing Namespace ZeroInstall.Publish Assembly ZeroInstall.Publish.dll Represents a Feed being edited using IUndoCommands. public class FeedEditing : CommandManager, ICommandManager, ICommandExecutor Inheritance object CommandManager FeedEditing Implements ICommandManager ICommandExecutor Inherited Members CommandManager.Execute(IUndoCommand) CommandManager.Undo() CommandManager.Redo() CommandManager.ClearUndo() CommandManager.Target CommandManager.Path CommandManager.UndoEnabled CommandManager.RedoEnabled CommandManager.TargetUpdated CommandManager.UndoEnabledChanged CommandManager.RedoEnabledChanged object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors FeedEditing() Starts with an empty feed. public FeedEditing() FeedEditing(SignedFeed) Starts with an existing feed. public FeedEditing(SignedFeed signedFeed) Parameters signedFeed SignedFeed The feed to be edited. Properties Passphrase The passphrase to use to unlock SecretKey (if specified). public string? Passphrase { get; set; } Property Value string SignedFeed The (optionally signed) feed being edited. public SignedFeed SignedFeed { get; } Property Value SignedFeed UnsavedChanges Indicates whether there are changes to the feed that have not yet been saved to a file. public bool UnsavedChanges { get; } Property Value bool Methods IsValid(out string) Determines whether the feed is valid and ready for use by 0install. public bool IsValid(out string problem) Parameters problem string Returns human-readable description of the problem if the method result is false. Returns bool true if the feed is valid; false otherwise. Load(string) Loads a feed from an XML file (feed). public static FeedEditing Load(string path) Parameters path string The file to load from. Returns FeedEditing A FeedEditing containing the loaded feed. Exceptions IOException A problem occurred while reading the file. UnauthorizedAccessException Read access to the file is not permitted. InvalidDataException A problem occurred while deserializing an XML file. Save(string) Saves feed to an XML file, adds the default stylesheet and signs it with SecretKey (if specified). public override void Save(string path) Parameters path string The file to save to. Remarks Writing and signing the feed file are performed as an atomic operation (i.e. if signing fails an existing file remains unchanged). Exceptions IOException A problem occurred while writing the file. UnauthorizedAccessException Write access to the file is not permitted. KeyNotFoundException The specified SecretKey could not be found on the system. WrongPassphraseException Passphrase was incorrect." + }, + "api/ZeroInstall.Publish.FeedUtils.html": { + "href": "api/ZeroInstall.Publish.FeedUtils.html", + "title": "Class FeedUtils | Zero Install .NET API", + "keywords": "Class FeedUtils Namespace ZeroInstall.Publish Assembly ZeroInstall.Publish.dll Helper methods for manipulating Feeds. public static class FeedUtils Inheritance object FeedUtils Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods DeployStylesheet(string, string) Writes an XSL stylesheet with its accompanying CSS file unless there is already an XSL in place. public static void DeployStylesheet(string path, string name) Parameters path string The directory to write the stylesheet files to. name string The name of the stylesheet to deploy. Must be \"feed\" or \"catalog\". Exceptions IOException Failed to write the stylesheet files. UnauthorizedAccessException Write access to the directory is not permitted. GetKey(string, IOpenPgp) Determines the key used to sign a feed or catalog file. Only uses the first signature if more than one is present. public static OpenPgpSecretKey? GetKey(string path, IOpenPgp openPgp) Parameters path string The feed or catalog file to check for signatures. openPgp IOpenPgp The OpenPGP-compatible system used to validate the signatures. Returns OpenPgpSecretKey The key used to sign the file; null if the file was not signed. Exceptions FileNotFoundException The file file could not be found. IOException The file could not be read. UnauthorizedAccessException Read access to the file is not permitted. SignFeed(Stream, OpenPgpSecretKey, string?, IOpenPgp) Adds a Base64 signature to a feed or catalog stream. public static void SignFeed(Stream stream, OpenPgpSecretKey secretKey, string? passphrase, IOpenPgp openPgp) Parameters stream Stream The feed or catalog to sign. secretKey OpenPgpSecretKey The secret key to use for signing the file. passphrase string The passphrase to use to unlock the key. openPgp IOpenPgp The OpenPGP-compatible system used to create signatures. Remarks The file is not parsed before signing; invalid XML files are signed as well. The existing file must end with a line break. Old signatures are not removed. Exceptions IOException The file could not be read or written. UnauthorizedAccessException Read or write access to the file is not permitted. KeyNotFoundException The specified secretKey could not be found on the system. WrongPassphraseException passphrase was incorrect." + }, + "api/ZeroInstall.Publish.ImplementationExtensions.html": { + "href": "api/ZeroInstall.Publish.ImplementationExtensions.html", + "title": "Class ImplementationExtensions | Zero Install .NET API", + "keywords": "Class ImplementationExtensions Namespace ZeroInstall.Publish Assembly ZeroInstall.Publish.dll Helpers for setting missing properties on Implementations. public static class ImplementationExtensions Inheritance object ImplementationExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods SetMissing(Implementation, ICommandExecutor, ITaskHandler) Sets missing properties on the implementation by downloading and inferring. public static void SetMissing(this Implementation implementation, ICommandExecutor executor, ITaskHandler handler) Parameters implementation Implementation The implementation. executor ICommandExecutor Used to modify properties in an undoable fashion. handler ITaskHandler A callback object used when the user is to be informed about progress. Exceptions OperationCanceledException The user canceled the task. WebException A file could not be downloaded from the internet. DigestMismatchException An existing digest does not match the newly calculated one." + }, + "api/ZeroInstall.Publish.RetrievalMethodExtensions.html": { + "href": "api/ZeroInstall.Publish.RetrievalMethodExtensions.html", + "title": "Class RetrievalMethodExtensions | Zero Install .NET API", + "keywords": "Class RetrievalMethodExtensions Namespace ZeroInstall.Publish Assembly ZeroInstall.Publish.dll Helpers for setting missing properties on RetrievalMethods. public static class RetrievalMethodExtensions Inheritance object RetrievalMethodExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods CalculateDigest(RetrievalMethod, ICommandExecutor, ITaskHandler, ManifestFormat?) Calculates a ManifestDigest for a retrieval method. Sets missing properties in the process. public static ManifestDigest CalculateDigest(this RetrievalMethod retrievalMethod, ICommandExecutor executor, ITaskHandler handler, ManifestFormat? format = null) Parameters retrievalMethod RetrievalMethod The retrieval method. executor ICommandExecutor Used to modify properties in an undoable fashion. handler ITaskHandler A callback object used when the user is to be informed about progress. format ManifestFormat The manifest format. Leave null for default. Returns ManifestDigest The generated digest. Exceptions OperationCanceledException The user canceled the task. WebException A file could not be downloaded from the internet. SetMissing(DownloadRetrievalMethod, ICommandExecutor, string?) Sets missing properties on the retrieval method if they can be inferred. public static void SetMissing(this DownloadRetrievalMethod retrievalMethod, ICommandExecutor executor, string? localPath = null) Parameters retrievalMethod DownloadRetrievalMethod The retrieval method. executor ICommandExecutor Used to modify properties in an undoable fashion. localPath string An optional local file path where the retrievalMethod has already been downloaded. ToTempDir(DownloadRetrievalMethod, ITaskHandler, string?) Creates a temporary directory from a retrieval method. Sets missing properties in the process. [MustDisposeResource] public static TemporaryDirectory ToTempDir(this DownloadRetrievalMethod retrievalMethod, ITaskHandler handler, string? localPath = null) Parameters retrievalMethod DownloadRetrievalMethod The retrieval method. handler ITaskHandler A callback object used when the user is to be informed about progress. localPath string An optional local file path where the retrievalMethod has already been downloaded. Leave null to download automatically. Returns TemporaryDirectory A temporary directory built using the retrieval method. Exceptions OperationCanceledException The user canceled the task. WebException A file could not be downloaded from the internet. IOException There is a problem writing a temporary file. UnauthorizedAccessException Write access to a temporary file is not permitted." + }, + "api/ZeroInstall.Publish.SignedCatalog.html": { + "href": "api/ZeroInstall.Publish.SignedCatalog.html", + "title": "Class SignedCatalog | Zero Install .NET API", + "keywords": "Class SignedCatalog Namespace ZeroInstall.Publish Assembly ZeroInstall.Publish.dll A wrapper around a Catalog adding and XSL stylesheet and a digital signature. [Serializable] public class SignedCatalog Inheritance object SignedCatalog Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors SignedCatalog(Catalog, OpenPgpSecretKey?, IOpenPgp?) Creates a new signed catalog. public SignedCatalog(Catalog catalog, OpenPgpSecretKey? secretKey, IOpenPgp? openPgp = null) Parameters catalog Catalog The wrapped Catalog. secretKey OpenPgpSecretKey The secret key used to sign the Catalog; null for no signature. openPgp IOpenPgp The OpenPGP-compatible system used to create the signatures; null for default. Properties Catalog The wrapped Catalog. public Catalog Catalog { get; } Property Value Catalog SecretKey The secret key used to sign the Catalog; null for no signature. public OpenPgpSecretKey? SecretKey { get; set; } Property Value OpenPgpSecretKey Methods Load(string) Loads a Catalog from an XML file and identifies the signature (if any). public static SignedCatalog Load(string path) Parameters path string The file to load from. Returns SignedCatalog The loaded SignedCatalog. Exceptions IOException A problem occurred while reading the file. UnauthorizedAccessException Read access to the file is not permitted. InvalidDataException A problem occurred while deserializing an XML file. Save(string, string?) Saves Catalog to an XML file, adds the default stylesheet and sign it it with SecretKey (if specified). public void Save(string path, string? passphrase = null) Parameters path string The file to save in. passphrase string The passphrase to use to unlock the secret key; can be null if SecretKey is null. Remarks Writing and signing the catalog file are performed as an atomic operation (i.e. if signing fails an existing file remains unchanged). Exceptions IOException A problem occurred while writing the file. UnauthorizedAccessException Write access to the file is not permitted. KeyNotFoundException The specified SecretKey could not be found on the system. WrongPassphraseException passphrase was incorrect." + }, + "api/ZeroInstall.Publish.SignedFeed.html": { + "href": "api/ZeroInstall.Publish.SignedFeed.html", + "title": "Class SignedFeed | Zero Install .NET API", + "keywords": "Class SignedFeed Namespace ZeroInstall.Publish Assembly ZeroInstall.Publish.dll A wrapper around a Feed adding and XSL stylesheet and a digital signature. [Serializable] public class SignedFeed Inheritance object SignedFeed Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors SignedFeed(Feed, OpenPgpSecretKey?, IOpenPgp?) Creates a new signed feed. public SignedFeed(Feed feed, OpenPgpSecretKey? secretKey = null, IOpenPgp? openPgp = null) Parameters feed Feed The wrapped Feed. secretKey OpenPgpSecretKey The secret key used to sign the Feed; null for no signature. openPgp IOpenPgp The OpenPGP-compatible system used to create the signatures; null for default. Properties Feed The wrapped Feed. public Feed Feed { get; } Property Value Feed SecretKey The secret key used to sign the Feed; null for no signature. public OpenPgpSecretKey? SecretKey { get; set; } Property Value OpenPgpSecretKey Methods Load(string) Loads a Feed from an XML file and identifies the signature (if any). public static SignedFeed Load(string path) Parameters path string The file to load from. Returns SignedFeed The loaded SignedFeed. Exceptions IOException A problem occurred while reading the file. UnauthorizedAccessException Read access to the file is not permitted. InvalidDataException A problem occurred while deserializing an XML file. Save(string, string?) Saves Feed to an XML file, adds the default stylesheet and sign it it with SecretKey (if specified). public void Save(string path, string? passphrase = null) Parameters path string The file to save in. passphrase string The passphrase to use to unlock the secret key; can be null if SecretKey is null. Remarks Writing and signing the feed file are performed as an atomic operation (i.e. if signing fails an existing file remains unchanged). Exceptions IOException A problem occurred while writing the file. UnauthorizedAccessException Write access to the file is not permitted. KeyNotFoundException The specified SecretKey could not be found on the system. WrongPassphraseException passphrase was incorrect." + }, + "api/ZeroInstall.Publish.html": { + "href": "api/ZeroInstall.Publish.html", + "title": "Namespace ZeroInstall.Publish | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Publish Utilities for creating and modifying feed files. NuGet package: ZeroInstall.Publish Namespaces ZeroInstall.Publish.Capture Builds feeds by creating and comparing snapshots of the system before and after an application was installed. ZeroInstall.Publish.EntryPoints Automatic detection of application entry points. Helps publishers set up the appropriate Commands and Runners. Classes BuilderExtensions Helpers for adding RetrievalMethods to IBuilders and setting missing properties. FeedBuilder Builds simple Feeds containing a single Implementation. FeedEditing Represents a Feed being edited using IUndoCommands. FeedUtils Helper methods for manipulating Feeds. ImplementationExtensions Helpers for setting missing properties on Implementations. RetrievalMethodExtensions Helpers for setting missing properties on RetrievalMethods. SignedCatalog A wrapper around a Catalog adding and XSL stylesheet and a digital signature. SignedFeed A wrapper around a Feed adding and XSL stylesheet and a digital signature." + }, + "api/ZeroInstall.Services.Executors.EnvironmentBuilder.html": { + "href": "api/ZeroInstall.Services.Executors.EnvironmentBuilder.html", + "title": "Class EnvironmentBuilder | Zero Install .NET API", + "keywords": "Class EnvironmentBuilder Namespace ZeroInstall.Services.Executors Assembly ZeroInstall.Services.dll Fluent-style builder for a process execution environment for a Selections document. public class EnvironmentBuilder : IEnvironmentBuilder Inheritance object EnvironmentBuilder Implements IEnvironmentBuilder Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors EnvironmentBuilder(IImplementationStore) Fluent-style builder for a process execution environment for a Selections document. public EnvironmentBuilder(IImplementationStore implementationStore) Parameters implementationStore IImplementationStore Methods AddArguments(params string[]) Appends user specified arguments to the command-line. public IEnvironmentBuilder AddArguments(params string[] arguments) Parameters arguments string[] Returns IEnvironmentBuilder The execution environment. Reference to self for fluent API use. AddWrapper(string?) Instead of executing the selected program directly, pass it as an argument to this program. Useful for debuggers. May contain command-line arguments. Whitespaces must be escaped! public IEnvironmentBuilder AddWrapper(string? wrapper) Parameters wrapper string Returns IEnvironmentBuilder The execution environment. Reference to self for fluent API use. Inject(Selections, string?) Sets the Selections to be injected. Must be called before any methods of the IEnvironmentBuilder interface are used. May not be called more than once. public IEnvironmentBuilder Inject(Selections selections, string? overrideMain = null) Parameters selections Selections The set of Implementations be injected into the execution environment. overrideMain string An alternative executable to to run from the main Implementation instead of Main. May not contain command-line arguments! Whitespaces do not need to be escaped. Returns IEnvironmentBuilder The execution environment. Reference to self for fluent API use. Exceptions ImplementationNotFoundException One of the Implementations is not cached yet. ExecutorException The executor was unable to process the Selections. IOException A problem occurred while writing a file. UnauthorizedAccessException Write access to a file is not permitted. SetEnvironmentVariable(string, string?) Sets an environment variable in the execution environment. public IEnvironmentBuilder SetEnvironmentVariable(string name, string? value) Parameters name string The name of the environment variable. value string The value to set the environment variable to. Returns IEnvironmentBuilder The execution environment. Reference to self for fluent API use. Start() Starts the program. public Process Start() Returns Process The newly created Process. Exceptions ImplementationNotFoundException One of the Implementations is not cached yet. ExecutorException The IExecutor was unable to process the Selections or the main executable could not be launched. FileNotFoundException Failed to find the main executable. IOException Failed to start the program. UnauthorizedAccessException Write access to a file is not permitted. ToStartInfo() Builds a ProcessStartInfo for starting the program. public ProcessStartInfo ToStartInfo() Returns ProcessStartInfo The ProcessStartInfo that can be used to start the new Process. Exceptions ImplementationNotFoundException One of the Implementations is not cached yet. ExecutorException The IExecutor was unable to process the Selections. IOException A problem occurred while writing a file. UnauthorizedAccessException Write access to a file is not permitted." + }, + "api/ZeroInstall.Services.Executors.Executor.html": { + "href": "api/ZeroInstall.Services.Executors.Executor.html", + "title": "Class Executor | Zero Install .NET API", + "keywords": "Class Executor Namespace ZeroInstall.Services.Executors Assembly ZeroInstall.Services.dll Executes a Selections document as a program using dependency injection. public class Executor : IExecutor Inheritance object Executor Implements IExecutor Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors Executor(IImplementationStore) Executes a Selections document as a program using dependency injection. public Executor(IImplementationStore implementationStore) Parameters implementationStore IImplementationStore Remarks This class is immutable and thread-safe. Methods Inject(Selections, string?) Starts building an execution environment for a Selections document. public IEnvironmentBuilder Inject(Selections selections, string? overrideMain = null) Parameters selections Selections The set of Implementations be injected into the execution environment. overrideMain string An alternative executable to to run from the main Implementation instead of Main. May not contain command-line arguments! Whitespaces do not need to be escaped. Returns IEnvironmentBuilder A fluent-style builder for a process execution environment. Exceptions ImplementationNotFoundException One of the Implementations is not cached yet. ExecutorException The IExecutor was unable to process the Selections. IOException A problem occurred while writing a file. UnauthorizedAccessException Write access to a file is not permitted. Start(Selections) Starts a program as described by a Selections document. public Process? Start(Selections selections) Parameters selections Selections The set of Implementations be injected into the execution environment. Returns Process The newly created Process; null if no external process was started. Exceptions ImplementationNotFoundException One of the Implementations is not cached yet. ExecutorException The IExecutor was unable to process the Selections or the main executable could not be launched. FileNotFoundException Failed to find the main executable. IOException Failed to start the program. UnauthorizedAccessException Write access to a file is not permitted." + }, + "api/ZeroInstall.Services.Executors.ExecutorException.html": { + "href": "api/ZeroInstall.Services.Executors.ExecutorException.html", + "title": "Class ExecutorException | Zero Install .NET API", + "keywords": "Class ExecutorException Namespace ZeroInstall.Services.Executors Assembly ZeroInstall.Services.dll Indicates that the IExecutor was unable to launch the desired application. public sealed class ExecutorException : Exception, ISerializable Inheritance object Exception ExecutorException Implements ISerializable Inherited Members Exception.GetBaseException() Exception.GetType() Exception.ToString() Exception.Data Exception.HelpLink Exception.HResult Exception.InnerException Exception.Message Exception.Source Exception.StackTrace Exception.TargetSite object.Equals(object) object.Equals(object, object) object.GetHashCode() object.ReferenceEquals(object, object) Constructors ExecutorException() Creates a new missing main exception. public ExecutorException() ExecutorException(string) Creates a new missing main exception. public ExecutorException(string message) Parameters message string ExecutorException(string, Exception) Creates a new missing main exception. public ExecutorException(string message, Exception innerException) Parameters message string innerException Exception" + }, + "api/ZeroInstall.Services.Executors.IEnvironmentBuilder.html": { + "href": "api/ZeroInstall.Services.Executors.IEnvironmentBuilder.html", + "title": "Interface IEnvironmentBuilder | Zero Install .NET API", + "keywords": "Interface IEnvironmentBuilder Namespace ZeroInstall.Services.Executors Assembly ZeroInstall.Services.dll Fluent-style builder for a process execution environment. public interface IEnvironmentBuilder Methods AddArguments(params string[]) Appends user specified arguments to the command-line. IEnvironmentBuilder AddArguments(params string[] arguments) Parameters arguments string[] Returns IEnvironmentBuilder The execution environment. Reference to self for fluent API use. AddWrapper(string?) Instead of executing the selected program directly, pass it as an argument to this program. Useful for debuggers. May contain command-line arguments. Whitespaces must be escaped! IEnvironmentBuilder AddWrapper(string? wrapper) Parameters wrapper string Returns IEnvironmentBuilder The execution environment. Reference to self for fluent API use. SetEnvironmentVariable(string, string) Sets an environment variable in the execution environment. IEnvironmentBuilder SetEnvironmentVariable(string name, string value) Parameters name string The name of the environment variable. value string The value to set the environment variable to. Returns IEnvironmentBuilder The execution environment. Reference to self for fluent API use. Start() Starts the program. Process? Start() Returns Process The newly created Process. Exceptions ImplementationNotFoundException One of the Implementations is not cached yet. ExecutorException The IExecutor was unable to process the Selections or the main executable could not be launched. FileNotFoundException Failed to find the main executable. IOException Failed to start the program. UnauthorizedAccessException Write access to a file is not permitted. ToStartInfo() Builds a ProcessStartInfo for starting the program. ProcessStartInfo ToStartInfo() Returns ProcessStartInfo The ProcessStartInfo that can be used to start the new Process. Exceptions ImplementationNotFoundException One of the Implementations is not cached yet. ExecutorException The IExecutor was unable to process the Selections. IOException A problem occurred while writing a file. UnauthorizedAccessException Write access to a file is not permitted." + }, + "api/ZeroInstall.Services.Executors.IExecutor.html": { + "href": "api/ZeroInstall.Services.Executors.IExecutor.html", + "title": "Interface IExecutor | Zero Install .NET API", + "keywords": "Interface IExecutor Namespace ZeroInstall.Services.Executors Assembly ZeroInstall.Services.dll Executes a Selections document as a program using dependency injection. public interface IExecutor Remarks Implementations of this interface are immutable and thread-safe. Methods Inject(Selections, string?) Starts building an execution environment for a Selections document. IEnvironmentBuilder Inject(Selections selections, string? overrideMain = null) Parameters selections Selections The set of Implementations be injected into the execution environment. overrideMain string An alternative executable to to run from the main Implementation instead of Main. May not contain command-line arguments! Whitespaces do not need to be escaped. Returns IEnvironmentBuilder A fluent-style builder for a process execution environment. Exceptions ImplementationNotFoundException One of the Implementations is not cached yet. ExecutorException The IExecutor was unable to process the Selections. IOException A problem occurred while writing a file. UnauthorizedAccessException Write access to a file is not permitted. Start(Selections) Starts a program as described by a Selections document. Process? Start(Selections selections) Parameters selections Selections The set of Implementations be injected into the execution environment. Returns Process The newly created Process; null if no external process was started. Exceptions ImplementationNotFoundException One of the Implementations is not cached yet. ExecutorException The IExecutor was unable to process the Selections or the main executable could not be launched. FileNotFoundException Failed to find the main executable. IOException Failed to start the program. UnauthorizedAccessException Write access to a file is not permitted." + }, + "api/ZeroInstall.Services.Executors.html": { + "href": "api/ZeroInstall.Services.Executors.html", + "title": "Namespace ZeroInstall.Services.Executors | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Services.Executors Launches implementations and injects the selected dependencies. Classes EnvironmentBuilder Fluent-style builder for a process execution environment for a Selections document. Executor Executes a Selections document as a program using dependency injection. ExecutorException Indicates that the IExecutor was unable to launch the desired application. Interfaces IEnvironmentBuilder Fluent-style builder for a process execution environment. IExecutor Executes a Selections document as a program using dependency injection." + }, + "api/ZeroInstall.Services.Feeds.CatalogManager.html": { + "href": "api/ZeroInstall.Services.Feeds.CatalogManager.html", + "title": "Class CatalogManager | Zero Install .NET API", + "keywords": "Class CatalogManager Namespace ZeroInstall.Services.Feeds Assembly ZeroInstall.Services.dll Provides access to remote and local Catalogs. Handles downloading, signature verification and caching. public class CatalogManager : ICatalogManager Inheritance object CatalogManager Implements ICatalogManager Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CatalogManagerExtensions.GetCachedSafe(ICatalogManager) CatalogManagerExtensions.GetOnlineSafe(ICatalogManager) Constructors CatalogManager(Config, ITrustManager, ITaskHandler) Provides access to remote and local Catalogs. Handles downloading, signature verification and caching. public CatalogManager(Config config, ITrustManager trustManager, ITaskHandler handler) Parameters config Config trustManager ITrustManager handler ITaskHandler Fields DefaultSource The default Catalog source used if no other is specified. public static readonly FeedUri DefaultSource Field Value FeedUri Methods AddSource(FeedUri) Adds a new source to download Catalog files from. public bool AddSource(FeedUri uri) Parameters uri FeedUri The URI of the source to add. Returns bool true if the source was add; false if the source was already in the list. Exceptions IOException There was a problem accessing a configuration file. UnauthorizedAccessException Access to a configuration file was not permitted. UriFormatException An invalid catalog source is specified in the configuration file. DownloadCatalog(FeedUri) Downloads and normalizes a remote catalog file. Mainly for internal use. public Catalog DownloadCatalog(FeedUri source) Parameters source FeedUri The URL to download the catalog file from. Returns Catalog The parsed Catalog. Exceptions WebException A file could not be downloaded from the internet. SignatureException The signature data of a remote catalog file could not be verified. NotSupportedException The catalog requires a newer version of Zero Install. InvalidDataException A problem occurred while deserializing an XML file. GetCached() Loads the last result of GetOnline(). public Catalog? GetCached() Returns Catalog A Catalog; null if there is no cached data. Exceptions IOException A problem occurred while reading the cache file. UnauthorizedAccessException Access to the cache file was not permitted. InvalidDataException A problem occurred while deserializing an XML file. GetOnline() Downloads and merges all Catalogs specified by the configuration files. public Catalog GetOnline() Returns Catalog A Catalog. Exceptions IOException A problem occurred while reading a local catalog file. UnauthorizedAccessException Access to a local catalog file was not permitted. WebException A problem occurred while fetching a remote catalog file. NotSupportedException The catalog requires a newer version of Zero Install. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data of a remote catalog file could not be verified. UriFormatException An invalid catalog source is specified in the configuration file. GetSources() Returns a list of catalog sources as defined by configuration files. public FeedUri[] GetSources() Returns FeedUri[] Exceptions IOException There was a problem accessing a configuration file. UnauthorizedAccessException Access to a configuration file was not permitted. UriFormatException An invalid catalog source is specified in the configuration file. GetSources(bool) Returns a list of catalog sources as defined by configuration files. public static FeedUri[] GetSources(bool preferMachineWide) Parameters preferMachineWide bool At most one configuration file is processed. If true machine-wide config is preferred; if false per-user config is preferred. Returns FeedUri[] Remarks Only the top-most configuration file is processed. I.e., a user config overrides a system config. Exceptions IOException There was a problem accessing a configuration file. UnauthorizedAccessException Access to a configuration file was not permitted. UriFormatException An invalid catalog source is specified in the configuration file. RemoveSource(FeedUri) Removes an existing source of Catalog files. public bool RemoveSource(FeedUri uri) Parameters uri FeedUri The URI of the source to remove. Returns bool true if the source was removed; false if the source was not in the current list. Exceptions IOException There was a problem accessing a configuration file. UnauthorizedAccessException Access to a configuration file was not permitted. UriFormatException An invalid catalog source is specified in the configuration file. SetSources(IEnumerable, bool) Sets the list of catalog sources in a configuration file. public static void SetSources(IEnumerable uris, bool machineWide = false) Parameters uris IEnumerable The list of catalog sources to use from now on. machineWide bool true to save in a machine-wide location; false to save in the user profile. Exceptions IOException There was a problem writing a configuration file. UnauthorizedAccessException Access to a configuration file was not permitted." + }, + "api/ZeroInstall.Services.Feeds.CatalogManagerExtensions.html": { + "href": "api/ZeroInstall.Services.Feeds.CatalogManagerExtensions.html", + "title": "Class CatalogManagerExtensions | Zero Install .NET API", + "keywords": "Class CatalogManagerExtensions Namespace ZeroInstall.Services.Feeds Assembly ZeroInstall.Services.dll Provides extension methods for ICatalogManager. public static class CatalogManagerExtensions Inheritance object CatalogManagerExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetCachedSafe(ICatalogManager) Loads the last result of GetOnline(). public static Catalog GetCachedSafe(this ICatalogManager manager) Parameters manager ICatalogManager Returns Catalog A Catalog; an empty Catalog if there was a problem. GetOnlineSafe(ICatalogManager) Downloads and merges all Catalogs specified by the configuration files. public static Catalog GetOnlineSafe(this ICatalogManager manager) Parameters manager ICatalogManager Returns Catalog A Catalog; an empty Catalog if there was a problem." + }, + "api/ZeroInstall.Services.Feeds.FeedManager.html": { + "href": "api/ZeroInstall.Services.Feeds.FeedManager.html", + "title": "Class FeedManager | Zero Install .NET API", + "keywords": "Class FeedManager Namespace ZeroInstall.Services.Feeds Assembly ZeroInstall.Services.dll Provides access to remote and local Feeds. Handles downloading and signature verification. public class FeedManager : IFeedManager Inheritance object FeedManager Implements IFeedManager Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods FeedManagerExtensions.GetFresh(IFeedManager, FeedUri) FeedManagerExtensions.ImportFeed(IFeedManager, string) Remarks This class performs in-memory caching of Feeds and FeedPreferences. Constructors FeedManager(Config, IFeedCache, ITrustManager, ITaskHandler) Creates a new feed manager. public FeedManager(Config config, IFeedCache feedCache, ITrustManager trustManager, ITaskHandler handler) Parameters config Config User settings controlling network behaviour, solving, etc. feedCache IFeedCache The disk-based cache to store downloaded Feeds. trustManager ITrustManager Methods for verifying signatures and user trust. handler ITaskHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Properties this[FeedUri] Returns a specific Feed. Automatically handles downloading, calling Normalize(FeedUri?) and caching. Updates the Stale indicator. public Feed this[FeedUri feedUri] { get; } Parameters feedUri FeedUri The URI of the feed. Property Value Feed The normalized Feed. Do not modify! The same instance may be returned to future callers. Remarks Feeds are always served from the IFeedCache if possible, unless Refresh is set to true. Exceptions UriFormatException Uri is missing or does not match feedUri. OperationCanceledException The user canceled the task. WebException A problem occurred while fetching the feed file. IOException A problem occurred while reading the feed file. UnauthorizedAccessException Access to the cache is not permitted. SignatureException The signature data of a remote feed file could not be verified. InvalidDataException A required property on the feed is not set or invalid. Refresh Set to true to re-download Feeds even if they are already in the IFeedCache. public bool Refresh { get; set; } Property Value bool Remarks Setting this to true implicitly also flushes the in-memory cache. ShouldRefresh Indicates whether Stale is true and EffectiveNetworkUse is Full. public bool ShouldRefresh { get; } Property Value bool Stale Is set to true if any Feed returned by this[FeedUri] is getting stale and should be updated by setting Refresh to true. public bool Stale { get; set; } Property Value bool Remarks Freshness controls the time span after which a feed is considered stale. Methods Clear() Clears any in-memory caches. public void Clear() GetPreferences(FeedUri) Returns FeedPreferences for a specific feed. public FeedPreferences GetPreferences(FeedUri feedUri) Parameters feedUri FeedUri The URI of the feed. Returns FeedPreferences ImportFeed(Stream, OpenPgpKeyCallback?) Imports a remote Feed into the IFeedCache after verifying its signature. public void ImportFeed(Stream stream, OpenPgpKeyCallback? keyCallback = null) Parameters stream Stream The content of the feed file. keyCallback OpenPgpKeyCallback Callback for reading a specific OpenPGP public key file. Exceptions IOException A problem occurred while reading the feed file. UnauthorizedAccessException Access to the feed file or the cache is not permitted. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data of the feed file could not be handled or no signatures were trusted. IsStale(FeedUri) Determines whether there is a stale cached copy of a particular feed. public bool IsStale(FeedUri feedUri) Parameters feedUri FeedUri The URI of the feed. Returns bool true if there is a stale copy in the cache or no copy at all; false if there is a fresh copy in the cache. RateLimit(FeedUri) Ensures that operations regarding a specific feed do not happen to often in a row. public bool RateLimit(FeedUri feedUri) Parameters feedUri FeedUri The URI of the feed. Returns bool true if the operation should be skipped due to rate limiting; false if the operation may proceed." + }, + "api/ZeroInstall.Services.Feeds.FeedManagerExtensions.html": { + "href": "api/ZeroInstall.Services.Feeds.FeedManagerExtensions.html", + "title": "Class FeedManagerExtensions | Zero Install .NET API", + "keywords": "Class FeedManagerExtensions Namespace ZeroInstall.Services.Feeds Assembly ZeroInstall.Services.dll Provides extension methods for IFeedManager. public static class FeedManagerExtensions Inheritance object FeedManagerExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetFresh(IFeedManager, FeedUri) Returns a specific Feed. Automatically updates cached feeds when indicated by ShouldRefresh. public static Feed GetFresh(this IFeedManager feedManager, FeedUri feedUri) Parameters feedManager IFeedManager The IFeedManager implementation. feedUri FeedUri The canonical ID used to identify the feed. Returns Feed The normalized Feed. Do not modify! The same instance may be returned to future callers. Remarks Feeds are always served from the IFeedCache if possible, unless Refresh is set to true. Exceptions UriFormatException Uri is missing or does not match feedUri. OperationCanceledException The user canceled the task. IOException A problem occurred while reading the feed file. WebException A problem occurred while fetching the feed file. UnauthorizedAccessException Access to the cache is not permitted. SignatureException The signature data of a remote feed file could not be verified. InvalidDataException A required property on the feed is not set or invalid. ImportFeed(IFeedManager, string) Imports a local copy of a remote Feed into the IFeedCache after verifying its signature. public static void ImportFeed(this IFeedManager feedManager, string path) Parameters feedManager IFeedManager The IFeedManager implementation. path string The path of a local copy of the feed. Exceptions IOException A problem occurred while reading the feed file. UnauthorizedAccessException Access to the feed file or the cache is not permitted. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data of the feed file could not be handled or no signatures were trusted." + }, + "api/ZeroInstall.Services.Feeds.ICatalogManager.html": { + "href": "api/ZeroInstall.Services.Feeds.ICatalogManager.html", + "title": "Interface ICatalogManager | Zero Install .NET API", + "keywords": "Interface ICatalogManager Namespace ZeroInstall.Services.Feeds Assembly ZeroInstall.Services.dll Provides access to remote and local Catalogs. Handles downloading, signature verification and caching. public interface ICatalogManager Extension Methods CatalogManagerExtensions.GetCachedSafe(ICatalogManager) CatalogManagerExtensions.GetOnlineSafe(ICatalogManager) Methods AddSource(FeedUri) Adds a new source to download Catalog files from. bool AddSource(FeedUri uri) Parameters uri FeedUri The URI of the source to add. Returns bool true if the source was add; false if the source was already in the list. Exceptions IOException There was a problem accessing a configuration file. UnauthorizedAccessException Access to a configuration file was not permitted. UriFormatException An invalid catalog source is specified in the configuration file. DownloadCatalog(FeedUri) Downloads and normalizes a remote catalog file. Mainly for internal use. Catalog DownloadCatalog(FeedUri source) Parameters source FeedUri The URL to download the catalog file from. Returns Catalog The parsed Catalog. Exceptions WebException A file could not be downloaded from the internet. SignatureException The signature data of a remote catalog file could not be verified. NotSupportedException The catalog requires a newer version of Zero Install. InvalidDataException A problem occurred while deserializing an XML file. GetCached() Loads the last result of GetOnline(). Catalog? GetCached() Returns Catalog A Catalog; null if there is no cached data. Exceptions IOException A problem occurred while reading the cache file. UnauthorizedAccessException Access to the cache file was not permitted. InvalidDataException A problem occurred while deserializing an XML file. GetOnline() Downloads and merges all Catalogs specified by the configuration files. Catalog GetOnline() Returns Catalog A Catalog. Exceptions IOException A problem occurred while reading a local catalog file. UnauthorizedAccessException Access to a local catalog file was not permitted. WebException A problem occurred while fetching a remote catalog file. NotSupportedException The catalog requires a newer version of Zero Install. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data of a remote catalog file could not be verified. UriFormatException An invalid catalog source is specified in the configuration file. GetSources() Returns a list of catalog sources as defined by configuration files. FeedUri[] GetSources() Returns FeedUri[] Exceptions IOException There was a problem accessing a configuration file. UnauthorizedAccessException Access to a configuration file was not permitted. UriFormatException An invalid catalog source is specified in the configuration file. RemoveSource(FeedUri) Removes an existing source of Catalog files. bool RemoveSource(FeedUri uri) Parameters uri FeedUri The URI of the source to remove. Returns bool true if the source was removed; false if the source was not in the current list. Exceptions IOException There was a problem accessing a configuration file. UnauthorizedAccessException Access to a configuration file was not permitted. UriFormatException An invalid catalog source is specified in the configuration file." + }, + "api/ZeroInstall.Services.Feeds.IFeedManager.html": { + "href": "api/ZeroInstall.Services.Feeds.IFeedManager.html", + "title": "Interface IFeedManager | Zero Install .NET API", + "keywords": "Interface IFeedManager Namespace ZeroInstall.Services.Feeds Assembly ZeroInstall.Services.dll Provides access to remote and local Feeds. Handles downloading and signature verification. public interface IFeedManager Extension Methods FeedManagerExtensions.GetFresh(IFeedManager, FeedUri) FeedManagerExtensions.ImportFeed(IFeedManager, string) Properties this[FeedUri] Returns a specific Feed. Automatically handles downloading, calling Normalize(FeedUri?) and caching. Updates the Stale indicator. Feed this[FeedUri feedUri] { get; } Parameters feedUri FeedUri The URI of the feed. Property Value Feed The normalized Feed. Do not modify! The same instance may be returned to future callers. Remarks Feeds are always served from the IFeedCache if possible, unless Refresh is set to true. Exceptions UriFormatException Uri is missing or does not match feedUri. OperationCanceledException The user canceled the task. WebException A problem occurred while fetching the feed file. IOException A problem occurred while reading the feed file. UnauthorizedAccessException Access to the cache is not permitted. SignatureException The signature data of a remote feed file could not be verified. InvalidDataException A required property on the feed is not set or invalid. Refresh Set to true to re-download Feeds even if they are already in the IFeedCache. bool Refresh { get; set; } Property Value bool ShouldRefresh Indicates whether Stale is true and EffectiveNetworkUse is Full. bool ShouldRefresh { get; } Property Value bool Stale Is set to true if any Feed returned by this[FeedUri] is getting stale and should be updated by setting Refresh to true. bool Stale { get; set; } Property Value bool Remarks Freshness controls the time span after which a feed is considered stale. Methods Clear() Clears any in-memory caches. void Clear() GetPreferences(FeedUri) Returns FeedPreferences for a specific feed. FeedPreferences GetPreferences(FeedUri feedUri) Parameters feedUri FeedUri The URI of the feed. Returns FeedPreferences ImportFeed(Stream, OpenPgpKeyCallback?) Imports a remote Feed into the IFeedCache after verifying its signature. void ImportFeed(Stream stream, OpenPgpKeyCallback? keyCallback = null) Parameters stream Stream The content of the feed file. keyCallback OpenPgpKeyCallback Callback for reading a specific OpenPGP public key file. Exceptions IOException A problem occurred while reading the feed file. UnauthorizedAccessException Access to the feed file or the cache is not permitted. InvalidDataException A problem occurred while deserializing an XML file. SignatureException The signature data of the feed file could not be handled or no signatures were trusted. IsStale(FeedUri) Determines whether there is a stale cached copy of a particular feed. bool IsStale(FeedUri feedUri) Parameters feedUri FeedUri The URI of the feed. Returns bool true if there is a stale copy in the cache or no copy at all; false if there is a fresh copy in the cache. RateLimit(FeedUri) Ensures that operations regarding a specific feed do not happen to often in a row. bool RateLimit(FeedUri feedUri) Parameters feedUri FeedUri The URI of the feed. Returns bool true if the operation should be skipped due to rate limiting; false if the operation may proceed." + }, + "api/ZeroInstall.Services.Feeds.ITrustManager.html": { + "href": "api/ZeroInstall.Services.Feeds.ITrustManager.html", + "title": "Interface ITrustManager | Zero Install .NET API", + "keywords": "Interface ITrustManager Namespace ZeroInstall.Services.Feeds Assembly ZeroInstall.Services.dll Methods for verifying signatures and user trust. public interface ITrustManager Remarks Implementations of this interface are immutable and thread-safe. Methods CheckTrust(byte[], FeedUri, OpenPgpKeyCallback?) Checks whether a remote feed or catalog file has a a valid and trusted signature. Downloads missing GPG keys for verification and interactively asks the user to approve new keys. ValidSignature CheckTrust(byte[] data, FeedUri uri, OpenPgpKeyCallback? keyCallback = null) Parameters data byte[] The data of the file. uri FeedUri The URI the data originally came from. keyCallback OpenPgpKeyCallback Callback for reading a specific OpenPGP public key file. Returns ValidSignature The first valid and trusted signature found on the feed. Exceptions UriFormatException uri is a local file. OperationCanceledException The user canceled the task. WebException A key file could not be downloaded from the internet. SignatureException No trusted signature was found. IOException A problem occurred while writing trust configuration. UnauthorizedAccessException Write access to the trust configuration is not permitted." + }, + "api/ZeroInstall.Services.Feeds.OpenPgpKeyCallback.html": { + "href": "api/ZeroInstall.Services.Feeds.OpenPgpKeyCallback.html", + "title": "Delegate OpenPgpKeyCallback | Zero Install .NET API", + "keywords": "Delegate OpenPgpKeyCallback Namespace ZeroInstall.Services.Feeds Assembly ZeroInstall.Services.dll Callback for reading a specific OpenPGP public key file. public delegate ArraySegment? OpenPgpKeyCallback(string id) Parameters id string The key ID as a canonical string.. Returns ArraySegment? The public key in binary or ASCII Armored format." + }, + "api/ZeroInstall.Services.Feeds.ReplayAttackException.html": { + "href": "api/ZeroInstall.Services.Feeds.ReplayAttackException.html", + "title": "Class ReplayAttackException | Zero Install .NET API", + "keywords": "Class ReplayAttackException Namespace ZeroInstall.Services.Feeds Assembly ZeroInstall.Services.dll Indicates a feed file that downloaded by the IFeedManager is older than a version already located in the IFeedCache. public sealed class ReplayAttackException : IOException, ISerializable Inheritance object Exception SystemException IOException ReplayAttackException Implements ISerializable Inherited Members Exception.GetBaseException() Exception.GetType() Exception.ToString() Exception.Data Exception.HelpLink Exception.HResult Exception.InnerException Exception.Message Exception.Source Exception.StackTrace Exception.TargetSite object.Equals(object) object.Equals(object, object) object.GetHashCode() object.ReferenceEquals(object, object) Constructors ReplayAttackException(Uri, DateTime, DateTime) Creates a new replay attack exception. public ReplayAttackException(Uri feedUrl, DateTime oldTime, DateTime newTime) Parameters feedUrl Uri The URL of the feed file to be added to the cache. oldTime DateTime The last changed time stamp of the existing file in the cache. newTime DateTime The last changed time stamp of the new file to be added. Properties FeedUrl The URL of the feed file to be added to the cache. public Uri FeedUrl { get; } Property Value Uri NewTime The last changed time stamp of the new file to be added. public DateTime NewTime { get; } Property Value DateTime OldTime The last changed time stamp of the existing file in the cache. public DateTime OldTime { get; } Property Value DateTime" + }, + "api/ZeroInstall.Services.Feeds.TrustManager.html": { + "href": "api/ZeroInstall.Services.Feeds.TrustManager.html", + "title": "Class TrustManager | Zero Install .NET API", + "keywords": "Class TrustManager Namespace ZeroInstall.Services.Feeds Assembly ZeroInstall.Services.dll Methods for verifying signatures and user trust. public class TrustManager : ITrustManager Inheritance object TrustManager Implements ITrustManager Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors TrustManager(TrustDB, Config, IOpenPgp, IFeedCache, ITaskHandler) Methods for verifying signatures and user trust. public TrustManager(TrustDB trustDB, Config config, IOpenPgp openPgp, IFeedCache feedCache, ITaskHandler handler) Parameters trustDB TrustDB config Config openPgp IOpenPgp feedCache IFeedCache handler ITaskHandler Remarks This class is immutable and thread-safe. Methods CheckTrust(byte[], FeedUri, OpenPgpKeyCallback?) Checks whether a remote feed or catalog file has a a valid and trusted signature. Downloads missing GPG keys for verification and interactively asks the user to approve new keys. public ValidSignature CheckTrust(byte[] data, FeedUri uri, OpenPgpKeyCallback? keyCallback = null) Parameters data byte[] The data of the file. uri FeedUri The URI the data originally came from. keyCallback OpenPgpKeyCallback Callback for reading a specific OpenPGP public key file. Returns ValidSignature The first valid and trusted signature found on the feed. Exceptions UriFormatException uri is a local file. OperationCanceledException The user canceled the task. WebException A key file could not be downloaded from the internet. SignatureException No trusted signature was found. IOException A problem occurred while writing trust configuration. UnauthorizedAccessException Write access to the trust configuration is not permitted." + }, + "api/ZeroInstall.Services.Feeds.html": { + "href": "api/ZeroInstall.Services.Feeds.html", + "title": "Namespace ZeroInstall.Services.Feeds | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Services.Feeds Downloading and verifying feeds. Classes CatalogManager Provides access to remote and local Catalogs. Handles downloading, signature verification and caching. CatalogManagerExtensions Provides extension methods for ICatalogManager. FeedManager Provides access to remote and local Feeds. Handles downloading and signature verification. FeedManagerExtensions Provides extension methods for IFeedManager. ReplayAttackException Indicates a feed file that downloaded by the IFeedManager is older than a version already located in the IFeedCache. TrustManager Methods for verifying signatures and user trust. Interfaces ICatalogManager Provides access to remote and local Catalogs. Handles downloading, signature verification and caching. IFeedManager Provides access to remote and local Feeds. Handles downloading and signature verification. ITrustManager Methods for verifying signatures and user trust. Delegates OpenPgpKeyCallback Callback for reading a specific OpenPGP public key file." + }, + "api/ZeroInstall.Services.Fetchers.Fetcher.html": { + "href": "api/ZeroInstall.Services.Fetchers.Fetcher.html", + "title": "Class Fetcher | Zero Install .NET API", + "keywords": "Class Fetcher Namespace ZeroInstall.Services.Fetchers Assembly ZeroInstall.Services.dll Downloads Implementations, extracts them and adds them to an IImplementationStore. public class Fetcher : IFetcher Inheritance object Fetcher Implements IFetcher Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors Fetcher(Config, IImplementationStore, ITaskHandler) Downloads Implementations, extracts them and adds them to an IImplementationStore. public Fetcher(Config config, IImplementationStore store, ITaskHandler handler) Parameters config Config User settings controlling network behaviour, solving, etc. store IImplementationStore The location to store the downloaded and unpacked Implementations in. handler ITaskHandler A callback object used when the user needs to be informed about progress. Remarks This class is immutable and thread-safe. Properties Discovery Discovers implementations in implementation stores on other machines in the local network instead of fetching them from their original source. public IImplementationDiscovery? Discovery { get; set; } Property Value IImplementationDiscovery Methods Apply(IBuilder, IRecipeStep, string) Applies a retrieval method step. protected virtual void Apply(IBuilder builder, IRecipeStep step, string tag) Parameters builder IBuilder The builder used to build the implementation. step IRecipeStep Instructions for downloading the file. tag string A Tag used to group progress bars. CheckArchiveTypes(IEnumerable) Infers missing MimeTypes and ensures suitable IArchiveExtractors are available. protected void CheckArchiveTypes(IEnumerable archives) Parameters archives IEnumerable Exceptions NotSupportedException No extractor registered for the specified or inferred MimeType. Download(IBuilder, DownloadRetrievalMethod, string) Applies a download step. protected virtual void Download(IBuilder builder, DownloadRetrievalMethod download, string tag) Parameters builder IBuilder The builder used to build the implementation. download DownloadRetrievalMethod Instructions for downloading the file. tag string A Tag used to group progress bars. Fetch(Implementation) Downloads an Implementation to the IImplementationStore. public void Fetch(Implementation implementation) Parameters implementation Implementation The implementation to download. Exceptions OperationCanceledException A download or IO task was canceled from another thread. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted. UnauthorizedAccessException Write access to IImplementationStore is not permitted. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest. Fetch(Implementation, string) Downloads an Implementation to the IImplementationStore. protected virtual void Fetch(Implementation implementation, string tag) Parameters implementation Implementation The implementation to download. tag string A Tag used to group progress bars. GetPath(ImplementationBase) Determines the local path of an implementation. protected string? GetPath(ImplementationBase implementation) Parameters implementation ImplementationBase Returns string A fully qualified path to the directory containing the implementation; null if the requested implementation could not be found in the store or is a package implementation. Retrieve(IReadOnlyCollection, ManifestDigest, string) Executes the steps of a retrieval method to build an implementation. protected virtual void Retrieve(IReadOnlyCollection steps, ManifestDigest manifestDigest, string tag) Parameters steps IReadOnlyCollection The retrieval method steps. manifestDigest ManifestDigest The expected manifest digest of the implementation. tag string A Tag used to group progress bars. Retrieve(RetrievalMethod, ManifestDigest, string) Executes a retrieval method to build an implementation. protected virtual void Retrieve(RetrievalMethod retrievalMethod, ManifestDigest manifestDigest, string tag) Parameters retrievalMethod RetrievalMethod The retrieval method. manifestDigest ManifestDigest The expected manifest digest of the implementation. tag string A Tag used to group progress bars. Retrieve(ExternalRetrievalMethod) Executes an external retrieval method. protected virtual void Retrieve(ExternalRetrievalMethod retrievalMethod) Parameters retrievalMethod ExternalRetrievalMethod TryRetrieve(IEnumerable, ManifestDigest, string) Tries one or more RetrievalMethods until one succeeds. protected virtual void TryRetrieve(IEnumerable retrievalMethods, ManifestDigest manifestDigest, string tag) Parameters retrievalMethods IEnumerable The available retrieval method. manifestDigest ManifestDigest The expected manifest digest of the implementation. tag string A Tag used to group progress bars." + }, + "api/ZeroInstall.Services.Fetchers.IFetcher.html": { + "href": "api/ZeroInstall.Services.Fetchers.IFetcher.html", + "title": "Interface IFetcher | Zero Install .NET API", + "keywords": "Interface IFetcher Namespace ZeroInstall.Services.Fetchers Assembly ZeroInstall.Services.dll Downloads Implementations, extracts them and adds them to an IImplementationStore. public interface IFetcher Remarks Implementations of this interface are immutable and thread-safe. Properties Discovery Discovers implementations in implementation stores on other machines in the local network instead of fetching them from their original source. IImplementationDiscovery? Discovery { get; set; } Property Value IImplementationDiscovery Methods Fetch(Implementation) Downloads an Implementation to the IImplementationStore. void Fetch(Implementation implementation) Parameters implementation Implementation The implementation to download. Exceptions OperationCanceledException A download or IO task was canceled from another thread. WebException A file could not be downloaded from the internet. NotSupportedException A file format, protocol, etc. is unknown or not supported. IOException A downloaded file could not be written to the disk or extracted. UnauthorizedAccessException Write access to IImplementationStore is not permitted. DigestMismatchException An Implementation's Archives don't match the associated ManifestDigest." + }, + "api/ZeroInstall.Services.Fetchers.IImplementationDiscovery.html": { + "href": "api/ZeroInstall.Services.Fetchers.IImplementationDiscovery.html", + "title": "Interface IImplementationDiscovery | Zero Install .NET API", + "keywords": "Interface IImplementationDiscovery Namespace ZeroInstall.Services.Fetchers Assembly ZeroInstall.Services.dll Discovers implementations in implementation stores on other machines in the local network. public interface IImplementationDiscovery Extension Methods ImplementationDiscoveryExtensions.TryGetImplementation(IImplementationDiscovery, ManifestDigest, TimeSpan, CancellationToken) Methods GetImplementation(ManifestDigest, CancellationToken) Finds a specific implementation in an implementation store on another machine. Blocks until the implementation is found or the operation is cancelled. Uri GetImplementation(ManifestDigest manifestDigest, CancellationToken cancellationToken) Parameters manifestDigest ManifestDigest The digest the implementation to find. cancellationToken CancellationToken Used to stop looking for the implementation. Returns Uri An archive URI from which the implementation can be downloaded. Exceptions OperationCanceledException The cancellationToken was cancelled." + }, + "api/ZeroInstall.Services.Fetchers.ImplementationDiscovery.html": { + "href": "api/ZeroInstall.Services.Fetchers.ImplementationDiscovery.html", + "title": "Class ImplementationDiscovery | Zero Install .NET API", + "keywords": "Class ImplementationDiscovery Namespace ZeroInstall.Services.Fetchers Assembly ZeroInstall.Services.dll Discovers implementations in implementation stores on other machines in the local network. public class ImplementationDiscovery : IImplementationDiscovery, IDisposable Inheritance object ImplementationDiscovery Implements IImplementationDiscovery IDisposable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods ImplementationDiscoveryExtensions.TryGetImplementation(IImplementationDiscovery, ManifestDigest, TimeSpan, CancellationToken) Constructors ImplementationDiscovery() Starts discovering implementation stores on other machines in the local network. public ImplementationDiscovery() Methods Dispose() Stops discovering implementation stores. public void Dispose() GetImplementation(ManifestDigest, CancellationToken) Finds a specific implementation in an implementation store on another machine. Blocks until the implementation is found or the operation is cancelled. public Uri GetImplementation(ManifestDigest manifestDigest, CancellationToken cancellationToken) Parameters manifestDigest ManifestDigest The digest the implementation to find. cancellationToken CancellationToken Used to stop looking for the implementation. Returns Uri An archive URI from which the implementation can be downloaded. Exceptions OperationCanceledException The cancellationToken was cancelled." + }, + "api/ZeroInstall.Services.Fetchers.ImplementationDiscoveryExtensions.html": { + "href": "api/ZeroInstall.Services.Fetchers.ImplementationDiscoveryExtensions.html", + "title": "Class ImplementationDiscoveryExtensions | Zero Install .NET API", + "keywords": "Class ImplementationDiscoveryExtensions Namespace ZeroInstall.Services.Fetchers Assembly ZeroInstall.Services.dll Provides extension methods for IImplementationDiscovery. public static class ImplementationDiscoveryExtensions Inheritance object ImplementationDiscoveryExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods TryGetImplementation(IImplementationDiscovery, ManifestDigest, TimeSpan, CancellationToken) Tries to find a specific implementation in an implementation store on another machine within the specified timeout. public static Uri? TryGetImplementation(this IImplementationDiscovery discovery, ManifestDigest manifestDigest, TimeSpan timeout, CancellationToken cancellationToken = default) Parameters discovery IImplementationDiscovery The implementation discovery service. manifestDigest ManifestDigest The digest the implementation to find. timeout TimeSpan The amount of time to look for the implementation. cancellationToken CancellationToken Used to stop looking for the implementation. Returns Uri An archive URI from which the implementation can be downloaded; null if the implementation was not found within the specified timeout. Exceptions OperationCanceledException The cancellationToken was cancelled." + }, + "api/ZeroInstall.Services.Fetchers.RetrievalMethodRanker.html": { + "href": "api/ZeroInstall.Services.Fetchers.RetrievalMethodRanker.html", + "title": "Class RetrievalMethodRanker | Zero Install .NET API", + "keywords": "Class RetrievalMethodRanker Namespace ZeroInstall.Services.Fetchers Assembly ZeroInstall.Services.dll Compares RetrievalMethods and sorts them from most to least preferred by IFetchers. public sealed class RetrievalMethodRanker : IComparer Inheritance object RetrievalMethodRanker Implements IComparer Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Fields Instance Singleton pattern. public static readonly RetrievalMethodRanker Instance Field Value RetrievalMethodRanker Methods Compare(RetrievalMethod?, RetrievalMethod?) Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other. public int Compare(RetrievalMethod? x, RetrievalMethod? y) Parameters x RetrievalMethod The first object to compare. y RetrievalMethod The second object to compare. Returns int A signed integer that indicates the relative values of x and y, as shown in the following table. Value Meaning Less than zero x is less than y. Zero x equals y. Greater than zero x is greater than y." + }, + "api/ZeroInstall.Services.Fetchers.html": { + "href": "api/ZeroInstall.Services.Fetchers.html", + "title": "Namespace ZeroInstall.Services.Fetchers | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Services.Fetchers Downloads and extracts implementations. Classes Fetcher Downloads Implementations, extracts them and adds them to an IImplementationStore. ImplementationDiscovery Discovers implementations in implementation stores on other machines in the local network. ImplementationDiscoveryExtensions Provides extension methods for IImplementationDiscovery. RetrievalMethodRanker Compares RetrievalMethods and sorts them from most to least preferred by IFetchers. Interfaces IFetcher Downloads Implementations, extracts them and adds them to an IImplementationStore. IImplementationDiscovery Discovers implementations in implementation stores on other machines in the local network." + }, + "api/ZeroInstall.Services.ISelectionsManager.html": { + "href": "api/ZeroInstall.Services.ISelectionsManager.html", + "title": "Interface ISelectionsManager | Zero Install .NET API", + "keywords": "Interface ISelectionsManager Namespace ZeroInstall.Services Assembly ZeroInstall.Services.dll Provides methods for filtering Selections. public interface ISelectionsManager Extension Methods SelectionsManagerExtensions.GetUncachedImplementations(ISelectionsManager, Selections) Remarks Implementations of this interface are immutable and thread-safe. Methods GetDiff(Selections, Selections) Generates a list of differences between two selections. IEnumerable GetDiff(Selections oldSelections, Selections newSelections) Parameters oldSelections Selections The old selections to base the comparison on. newSelections Selections The new selections to compare against. Returns IEnumerable GetImplementations(IEnumerable) Retrieves the original Implementations these selections were based on. IEnumerable GetImplementations(IEnumerable selections) Parameters selections IEnumerable The ImplementationSelections to map back to Implementations. Returns IEnumerable GetTree(Selections) Generates a tree representation of the dependencies within the selections. NamedCollection GetTree(Selections selections) Parameters selections Selections Returns NamedCollection GetUncached(IEnumerable) Returns a list of any downloadable ImplementationSelections that are missing from an IImplementationStore. IEnumerable GetUncached(IEnumerable selections) Parameters selections IEnumerable The selections to search for ImplementationSelections that are missing. Returns IEnumerable Remarks Feed files may be downloaded, no implementations are downloaded. Exceptions KeyNotFoundException A Feed or Implementation is missing. IOException A problem occurred while reading the feed file. UnauthorizedAccessException Read access to the cache is not permitted. InvalidDataException The feed file could not be parsed." + }, + "api/ZeroInstall.Services.Native.CompositePackageManager.html": { + "href": "api/ZeroInstall.Services.Native.CompositePackageManager.html", + "title": "Class CompositePackageManager | Zero Install .NET API", + "keywords": "Class CompositePackageManager Namespace ZeroInstall.Services.Native Assembly ZeroInstall.Services.dll Combines multiple IPackageManagers as a composite. public class CompositePackageManager : IPackageManager Inheritance object CompositePackageManager Implements IPackageManager Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors CompositePackageManager(IEnumerable) Combines multiple IPackageManagers as a composite. public CompositePackageManager(IEnumerable packageManagers) Parameters packageManagers IEnumerable A priority-sorted list of IPackageManagers. Queried first-to-last. Remarks This class is immutable and thread-safe. Methods Lookup(ImplementationSelection) Looks up the specific ExternalImplementation an ImplementationSelection was based on. public ExternalImplementation? Lookup(ImplementationSelection selection) Parameters selection ImplementationSelection The implementation selection to look up. Returns ExternalImplementation The ExternalImplementation; null if selection does not refer to a package known to this package manager. Query(PackageImplementation, params string[]) Queries the package manager for all ExternalImplementations that match a specific PackageImplementation definition. public IEnumerable Query(PackageImplementation package, params string[] distributions) Parameters package PackageImplementation The definition of the package to look for. distributions string[] Specifies the distributions to check for matching packages. Leave empty to check in all available distributions. Returns IEnumerable" + }, + "api/ZeroInstall.Services.Native.ExternalImplementation.html": { + "href": "api/ZeroInstall.Services.Native.ExternalImplementation.html", + "title": "Class ExternalImplementation | Zero Install .NET API", + "keywords": "Class ExternalImplementation Namespace ZeroInstall.Services.Native Assembly ZeroInstall.Services.dll An implementation provided by an external package manager. [Equatable] public sealed class ExternalImplementation : Implementation, IEquatable, IEquatable, IEquatable, IBindingContainer, IDependencyContainer, ICloneable, IEquatable, IEquatable, IEquatable, IEquatable Inheritance object XmlUnknown FeedElement TargetBase Element ImplementationBase Implementation ExternalImplementation Implements IEquatable IEquatable IEquatable IBindingContainer IDependencyContainer ICloneable IEquatable IEquatable IEquatable IEquatable Inherited Members Implementation.RetrievalMethods Implementation.Normalize(FeedUri) Implementation.CloneImplementation() Implementation.Clone() ImplementationBase.ID ImplementationBase.LocalPath ImplementationBase.Version ImplementationBase.ManifestDigest Element.ReleaseDateFormat Element.VersionModifier Element.Released Element.ReleasedString Element.Stability Element.RolloutPercentage Element.License Element.Main Element.SelfTest Element.DocDir Element.Dependencies Element.Restrictions Element.Bindings Element.Commands Element.ContainsCommand(string) Element.this[string] Element.GetCommand(string) TargetBase.Languages TargetBase.Architecture FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Extension Methods SolverUtils.AddDependencies(IDependencyContainer, Requirements, IDependencyContainer) ImplementationExtensions.SetMissing(Implementation, ICommandExecutor, ITaskHandler) Constructors ExternalImplementation(string, string, ImplementationVersion, Cpu) Creates a new external implementation. public ExternalImplementation(string distribution, string package, ImplementationVersion version, Cpu cpu = Cpu.All) Parameters distribution string The name of the distribution (e.g. Debian, RPM) where this implementation comes from. package string The name of the package in the distribution. version ImplementationVersion The version number of the implementation. cpu Cpu For platform-specific binaries, the CPU architecture for which the implementation was compiled. Fields PackagePrefix This is prepended to ID for all ExternalImplementation. public const string PackagePrefix = \"package:\" Field Value string Remarks Also used to mark regular Implementations that act as proxies for ExternalImplementations. Properties Distribution The name of the distribution (e.g. Debian, RPM) where this implementation comes from. public string Distribution { get; set; } Property Value string IsInstalled Indicates whether this implementation is currently installed. public bool IsInstalled { get; set; } Property Value bool Package The name of the package in the Distribution. public string Package { get; set; } Property Value string QuickTestFile A file which, if present, indicates that this implementation IsInstalled. public string? QuickTestFile { get; set; } Property Value string Remarks This makes it possible to avoid Lookup(ImplementationSelection) calls for better performance. See Also QuickTestFile Methods Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. FromID(string) Creates a new external implementation from an ID. public static ExternalImplementation FromID(string id) Parameters id string The ID to parse. Returns ExternalImplementation Exceptions FormatException id is not a standard ExternalImplementation ID. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns the implementation in the form \"Comma-separated list of set values\". Not safe for parsing! public override string ToString() Returns string Operators operator ==(ExternalImplementation?, ExternalImplementation?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ExternalImplementation? left, ExternalImplementation? right) Parameters left ExternalImplementation The left object right ExternalImplementation The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ExternalImplementation?, ExternalImplementation?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ExternalImplementation? left, ExternalImplementation? right) Parameters left ExternalImplementation The left object right ExternalImplementation The right object Returns bool true if the objects are not equal; otherwise, false. See Also IPackageManager" + }, + "api/ZeroInstall.Services.Native.ExternalRetrievalMethod.html": { + "href": "api/ZeroInstall.Services.Native.ExternalRetrievalMethod.html", + "title": "Class ExternalRetrievalMethod | Zero Install .NET API", + "keywords": "Class ExternalRetrievalMethod Namespace ZeroInstall.Services.Native Assembly ZeroInstall.Services.dll Retrieves an implementation by installing it via an external package manager rather than Zero Install itself. [Equatable] public sealed class ExternalRetrievalMethod : RetrievalMethod, IEquatable, IEquatable, ICloneable, IEquatable Inheritance object XmlUnknown FeedElement RetrievalMethod ExternalRetrievalMethod Implements IEquatable IEquatable ICloneable IEquatable Inherited Members RetrievalMethod.Normalize(FeedUri) FeedElement.IfZeroInstallVersion XmlUnknown.UnknownAttributes XmlUnknown.UnknownElements XmlUnknown.ToShortXml() XmlUnknown.Equals(XmlUnknown) object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods RetrievalMethodExtensions.CalculateDigest(RetrievalMethod, ICommandExecutor, ITaskHandler, ManifestFormat?) Properties ConfirmationQuestion A question the user shall be asked for confirmation before calling Install. null if no confirmation is required. public string? ConfirmationQuestion { get; set; } Property Value string Distro The name of the distribution this package came from. public string? Distro { get; set; } Property Value string Install A function to call to install this package. public Action? Install { get; set; } Property Value Action PackageID The package name, in a form recognised by the external package manager. public string? PackageID { get; set; } Property Value string Size The download size in bytes. public long Size { get; set; } Property Value long Methods Clone() Creates a deep copy of this ExternalRetrievalMethod instance. public override RetrievalMethod Clone() Returns RetrievalMethod The new copy of the ExternalRetrievalMethod. Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. Operators operator ==(ExternalRetrievalMethod?, ExternalRetrievalMethod?) Indicates whether the object on the left is equal to the object on the right. public static bool operator ==(ExternalRetrievalMethod? left, ExternalRetrievalMethod? right) Parameters left ExternalRetrievalMethod The left object right ExternalRetrievalMethod The right object Returns bool true if the objects are equal; otherwise, false. operator !=(ExternalRetrievalMethod?, ExternalRetrievalMethod?) Indicates whether the object on the left is not equal to the object on the right. public static bool operator !=(ExternalRetrievalMethod? left, ExternalRetrievalMethod? right) Parameters left ExternalRetrievalMethod The left object right ExternalRetrievalMethod The right object Returns bool true if the objects are not equal; otherwise, false. See Also IPackageManager" + }, + "api/ZeroInstall.Services.Native.IPackageManager.html": { + "href": "api/ZeroInstall.Services.Native.IPackageManager.html", + "title": "Interface IPackageManager | Zero Install .NET API", + "keywords": "Interface IPackageManager Namespace ZeroInstall.Services.Native Assembly ZeroInstall.Services.dll Handles packages provided by the operating system's native package managers rather than Zero Install itself. public interface IPackageManager Remarks Implementations of this interface are immutable and thread-safe. Methods Lookup(ImplementationSelection) Looks up the specific ExternalImplementation an ImplementationSelection was based on. ExternalImplementation? Lookup(ImplementationSelection selection) Parameters selection ImplementationSelection The implementation selection to look up. Returns ExternalImplementation The ExternalImplementation; null if selection does not refer to a package known to this package manager. Query(PackageImplementation, params string[]) Queries the package manager for all ExternalImplementations that match a specific PackageImplementation definition. IEnumerable Query(PackageImplementation package, params string[] distributions) Parameters package PackageImplementation The definition of the package to look for. distributions string[] Specifies the distributions to check for matching packages. Leave empty to check in all available distributions. Returns IEnumerable See Also PackageImplementation ExternalImplementation ExternalRetrievalMethod" + }, + "api/ZeroInstall.Services.Native.PackageManagerBase.html": { + "href": "api/ZeroInstall.Services.Native.PackageManagerBase.html", + "title": "Class PackageManagerBase | Zero Install .NET API", + "keywords": "Class PackageManagerBase Namespace ZeroInstall.Services.Native Assembly ZeroInstall.Services.dll Base class for IPackageManager implementations using template methods. public abstract class PackageManagerBase : IPackageManager Inheritance object PackageManagerBase Implements IPackageManager Derived WindowsPackageManager Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Properties DistributionName The name of the Distributions this package manager provides packages for. protected abstract string DistributionName { get; } Property Value string Methods GetImplementations(string) Retrieves a set of specific native implementations for a package name. protected abstract IEnumerable GetImplementations(string packageName) Parameters packageName string The name of the package to look for. Returns IEnumerable Lookup(ImplementationSelection) Looks up the specific ExternalImplementation an ImplementationSelection was based on. public ExternalImplementation? Lookup(ImplementationSelection selection) Parameters selection ImplementationSelection The implementation selection to look up. Returns ExternalImplementation The ExternalImplementation; null if selection does not refer to a package known to this package manager. Query(PackageImplementation, params string[]) Queries the package manager for all ExternalImplementations that match a specific PackageImplementation definition. public IEnumerable Query(PackageImplementation package, params string[] distributions) Parameters package PackageImplementation The definition of the package to look for. distributions string[] Specifies the distributions to check for matching packages. Leave empty to check in all available distributions. Returns IEnumerable" + }, + "api/ZeroInstall.Services.Native.PackageManagers.html": { + "href": "api/ZeroInstall.Services.Native.PackageManagers.html", + "title": "Class PackageManagers | Zero Install .NET API", + "keywords": "Class PackageManagers Namespace ZeroInstall.Services.Native Assembly ZeroInstall.Services.dll Provides IPackageManager instances. public static class PackageManagers Inheritance object PackageManagers Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Default() Creates the default IPackageManager for the current platform. public static IPackageManager Default() Returns IPackageManager" + }, + "api/ZeroInstall.Services.Native.WindowsPackageManager.html": { + "href": "api/ZeroInstall.Services.Native.WindowsPackageManager.html", + "title": "Class WindowsPackageManager | Zero Install .NET API", + "keywords": "Class WindowsPackageManager Namespace ZeroInstall.Services.Native Assembly ZeroInstall.Services.dll Detects common Windows software packages (such as Java and .NET) that are installed natively. public class WindowsPackageManager : PackageManagerBase, IPackageManager Inheritance object PackageManagerBase WindowsPackageManager Implements IPackageManager Inherited Members PackageManagerBase.Query(PackageImplementation, params string[]) PackageManagerBase.Lookup(ImplementationSelection) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors WindowsPackageManager() public WindowsPackageManager() Properties DistributionName The name of the Distributions this package manager provides packages for. protected override string DistributionName { get; } Property Value string Methods GetImplementations(string) Retrieves a set of specific native implementations for a package name. protected override IEnumerable GetImplementations(string packageName) Parameters packageName string The name of the package to look for. Returns IEnumerable" + }, + "api/ZeroInstall.Services.Native.html": { + "href": "api/ZeroInstall.Services.Native.html", + "title": "Namespace ZeroInstall.Services.Native | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Services.Native Operating system specific services such as native package managers. Classes CompositePackageManager Combines multiple IPackageManagers as a composite. ExternalImplementation An implementation provided by an external package manager. ExternalRetrievalMethod Retrieves an implementation by installing it via an external package manager rather than Zero Install itself. PackageManagerBase Base class for IPackageManager implementations using template methods. PackageManagers Provides IPackageManager instances. WindowsPackageManager Detects common Windows software packages (such as Java and .NET) that are installed natively. Interfaces IPackageManager Handles packages provided by the operating system's native package managers rather than Zero Install itself." + }, + "api/ZeroInstall.Services.SelectionsManager.html": { + "href": "api/ZeroInstall.Services.SelectionsManager.html", + "title": "Class SelectionsManager | Zero Install .NET API", + "keywords": "Class SelectionsManager Namespace ZeroInstall.Services Assembly ZeroInstall.Services.dll Provides methods for filtering Selections. public class SelectionsManager : ISelectionsManager Inheritance object SelectionsManager Implements ISelectionsManager Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods SelectionsManagerExtensions.GetUncachedImplementations(ISelectionsManager, Selections) Remarks This class is immutable and thread-safe. Constructors SelectionsManager(IFeedManager, IImplementationStore, IPackageManager) Provides methods for filtering Selections. public SelectionsManager(IFeedManager feedManager, IImplementationStore implementationStore, IPackageManager packageManager) Parameters feedManager IFeedManager implementationStore IImplementationStore packageManager IPackageManager Remarks This class is immutable and thread-safe. Methods GetDiff(Selections, Selections) Generates a list of differences between two selections. public IEnumerable GetDiff(Selections oldSelections, Selections newSelections) Parameters oldSelections Selections The old selections to base the comparison on. newSelections Selections The new selections to compare against. Returns IEnumerable GetImplementations(IEnumerable) Retrieves the original Implementations these selections were based on. public IEnumerable GetImplementations(IEnumerable selections) Parameters selections IEnumerable The ImplementationSelections to map back to Implementations. Returns IEnumerable GetTree(Selections) Generates a tree representation of the dependencies within the selections. public NamedCollection GetTree(Selections selections) Parameters selections Selections Returns NamedCollection GetUncached(IEnumerable) Returns a list of any downloadable ImplementationSelections that are missing from an IImplementationStore. public IEnumerable GetUncached(IEnumerable selections) Parameters selections IEnumerable The selections to search for ImplementationSelections that are missing. Returns IEnumerable Remarks Feed files may be downloaded, no implementations are downloaded. Exceptions KeyNotFoundException A Feed or Implementation is missing. IOException A problem occurred while reading the feed file. UnauthorizedAccessException Read access to the cache is not permitted. InvalidDataException The feed file could not be parsed." + }, + "api/ZeroInstall.Services.SelectionsManagerExtensions.html": { + "href": "api/ZeroInstall.Services.SelectionsManagerExtensions.html", + "title": "Class SelectionsManagerExtensions | Zero Install .NET API", + "keywords": "Class SelectionsManagerExtensions Namespace ZeroInstall.Services Assembly ZeroInstall.Services.dll Provides extension methods for ISelectionsManager. public static class SelectionsManagerExtensions Inheritance object SelectionsManagerExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetUncachedImplementations(ISelectionsManager, Selections) Combines GetUncached(IEnumerable) and GetImplementations(IEnumerable). public static List GetUncachedImplementations(this ISelectionsManager selectionsManager, Selections selections) Parameters selectionsManager ISelectionsManager The ISelectionsManager. selections Selections The selections to search for ImplementationSelections that are missing. Returns List" + }, + "api/ZeroInstall.Services.ServiceCollectionExtensions.html": { + "href": "api/ZeroInstall.Services.ServiceCollectionExtensions.html", + "title": "Class ServiceCollectionExtensions | Zero Install .NET API", + "keywords": "Class ServiceCollectionExtensions Namespace ZeroInstall.Services Assembly ZeroInstall.Services.dll Provides extension methods for IServiceCollection. public static class ServiceCollectionExtensions Inheritance object ServiceCollectionExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods AddZeroInstall(IServiceCollection, IConfiguration?) Registers a set of scoped services for using Zero Install functionality. Automatically uses ILogger and ICredentialProvider if registered in services. public static IServiceCollection AddZeroInstall(this IServiceCollection services, IConfiguration? configuration = null) Parameters services IServiceCollection The service collection to add the services to. configuration IConfiguration An optional configuration source for building Config instead of the default config files. Returns IServiceCollection See Also ConfigureCredentials(IServiceCollection, IConfiguration) AddZeroInstall(IServiceCollection, IConfiguration?) Registers a set of scoped services for using Zero Install functionality. public static IServiceCollection AddZeroInstall(this IServiceCollection services, IConfiguration? configuration = null) where TTaskHandler : class, ITaskHandler Parameters services IServiceCollection The service collection to add the services to. configuration IConfiguration An optional configuration source for building Config instead of the default config files. Returns IServiceCollection Type Parameters TTaskHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks." + }, + "api/ZeroInstall.Services.ServiceProvider.html": { + "href": "api/ZeroInstall.Services.ServiceProvider.html", + "title": "Class ServiceProvider | Zero Install .NET API", + "keywords": "Class ServiceProvider Namespace ZeroInstall.Services Assembly ZeroInstall.Services.dll Instantiates requested services transparently on first use. Handles dependency injection internally. Use exactly one instance of the service provider per user request to ensure consistent state during execution. public class ServiceProvider Inheritance object ServiceProvider Derived ScopedOperation Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class is thread-safe. Constructors ServiceProvider(ITaskHandler) Creates a new service provider. public ServiceProvider(ITaskHandler handler) Parameters handler ITaskHandler A callback object used when the user needs to be asked questions or informed about download and IO tasks. Exceptions IOException There was a problem accessing a configuration file or one of the implementation stores. UnauthorizedAccessException Access to a configuration file or one of the implementation stores was not permitted. Properties CatalogManager Provides access to remote and local Catalogs. Handles downloading, signature verification and caching. public virtual ICatalogManager CatalogManager { get; } Property Value ICatalogManager Config User settings controlling network behaviour, solving, etc. public virtual Config Config { get; } Property Value Config Executor Executes a Selections document as a program using dependency injection. public virtual IExecutor Executor { get; } Property Value IExecutor FeedCache Provides access to a cache of Feeds that were downloaded via HTTP(S). public virtual IFeedCache FeedCache { get; } Property Value IFeedCache FeedManager Allows configuration of the source used to request Feeds. public virtual IFeedManager FeedManager { get; } Property Value IFeedManager Fetcher Used to download missing Implementations. public virtual IFetcher Fetcher { get; } Property Value IFetcher Handler A callback object used when the user needs to be asked questions or informed about download and IO tasks. public ITaskHandler Handler { get; } Property Value ITaskHandler ImplementationStore Describes an object that allows the storage and retrieval of Implementation directories. public IImplementationStore ImplementationStore { get; set; } Property Value IImplementationStore OpenPgp Provides access to an encryption/signature system compatible with the OpenPGP standard. public virtual IOpenPgp OpenPgp { get; set; } Property Value IOpenPgp PackageManager An external package manager that can install PackageImplementations. public virtual IPackageManager PackageManager { get; } Property Value IPackageManager SelectionCandidateProvider Generates SelectionCandidates for the Solver to choose among. public virtual ISelectionCandidateProvider SelectionCandidateProvider { get; } Property Value ISelectionCandidateProvider SelectionsManager Provides methods for filtering Selections. public virtual ISelectionsManager SelectionsManager { get; } Property Value ISelectionsManager Solver Chooses a set of Implementations to satisfy the requirements of a program and its user. public virtual ISolver Solver { get; } Property Value ISolver TrustManager Methods for verifying signatures and user trust. public virtual ITrustManager TrustManager { get; } Property Value ITrustManager Methods TrySolveOffline(Requirements) Tries to provide Selections that satisfy a set of Requirements without downloading any files. public Selections? TrySolveOffline(Requirements requirements) Parameters requirements Requirements The requirements to satisfy. Returns Selections The selected ImplementationSelections or null if no solution was found. Exceptions OperationCanceledException The user canceled the task. ArgumentException requirements is incomplete." + }, + "api/ZeroInstall.Services.Solvers.BacktrackingSolver.html": { + "href": "api/ZeroInstall.Services.Solvers.BacktrackingSolver.html", + "title": "Class BacktrackingSolver | Zero Install .NET API", + "keywords": "Class BacktrackingSolver Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll Uses limited backtracking to solve Requirements. Does not find all possible solutions! public class BacktrackingSolver : ISolver Inheritance object BacktrackingSolver Implements ISolver Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods SolverExtensions.TrySolve(ISolver, Requirements) Remarks This class is immutable and thread-safe. Constructors BacktrackingSolver(ISelectionCandidateProvider) Uses limited backtracking to solve Requirements. Does not find all possible solutions! public BacktrackingSolver(ISelectionCandidateProvider candidateProvider) Parameters candidateProvider ISelectionCandidateProvider Remarks This class is immutable and thread-safe. Methods Solve(Requirements) Provides Selections that satisfy a set of Requirements. public Selections Solve(Requirements requirements) Parameters requirements Requirements The requirements to satisfy. Returns Selections The selected ImplementationSelections. Remarks Feed files may be downloaded, signature validation is performed, implementations are not downloaded. Exceptions OperationCanceledException The user canceled the task. ArgumentException requirements is incomplete. IOException A problem occurred while reading the feed file. WebException A problem occurred while fetching the feed file. UnauthorizedAccessException Access to the cache is not permitted. SignatureException The signature data of a remote feed file could not be verified. SolverException The solver was unable to provide Selections that fulfill the requirements." + }, + "api/ZeroInstall.Services.Solvers.ExternalSolver.html": { + "href": "api/ZeroInstall.Services.Solvers.ExternalSolver.html", + "title": "Class ExternalSolver | Zero Install .NET API", + "keywords": "Class ExternalSolver Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll Uses an external process to solve Requirements. The executable for external process is itself provided by another ISolver. public class ExternalSolver : ISolver Inheritance object ExternalSolver Implements ISolver Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods SolverExtensions.TrySolve(ISolver, Requirements) Remarks This class is immutable and thread-safe. Constructors ExternalSolver(ISolver, ISelectionsManager, IFetcher, IExecutor, IFeedManager, ITaskHandler, Requirements) Uses an external process to solve Requirements. The executable for external process is itself provided by another ISolver. public ExternalSolver(ISolver backingSolver, ISelectionsManager selectionsManager, IFetcher fetcher, IExecutor executor, IFeedManager feedManager, ITaskHandler handler, Requirements solverRequirements) Parameters backingSolver ISolver selectionsManager ISelectionsManager fetcher IFetcher executor IExecutor feedManager IFeedManager handler ITaskHandler solverRequirements Requirements Remarks This class is immutable and thread-safe. Methods Solve(Requirements) Provides Selections that satisfy a set of Requirements. public Selections Solve(Requirements requirements) Parameters requirements Requirements The requirements to satisfy. Returns Selections The selected ImplementationSelections. Remarks Feed files may be downloaded, signature validation is performed, implementations are not downloaded. Exceptions OperationCanceledException The user canceled the task. ArgumentException requirements is incomplete. IOException A problem occurred while reading the feed file. WebException A problem occurred while fetching the feed file. UnauthorizedAccessException Access to the cache is not permitted. SignatureException The signature data of a remote feed file could not be verified. SolverException The solver was unable to provide Selections that fulfill the requirements." + }, + "api/ZeroInstall.Services.Solvers.FallbackSolver.html": { + "href": "api/ZeroInstall.Services.Solvers.FallbackSolver.html", + "title": "Class FallbackSolver | Zero Install .NET API", + "keywords": "Class FallbackSolver Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll Wraps two solvers always passing requests to the primary one initially and falling back to secondary one should the primary one fail. public sealed class FallbackSolver : ISolver Inheritance object FallbackSolver Implements ISolver Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods SolverExtensions.TrySolve(ISolver, Requirements) Remarks This class is immutable and thread-safe. Constructors FallbackSolver(ISolver, ISolver) Wraps two solvers always passing requests to the primary one initially and falling back to secondary one should the primary one fail. public FallbackSolver(ISolver primarySolver, ISolver secondarySolver) Parameters primarySolver ISolver The solver to run initially. secondarySolver ISolver he solver to fall back to should primarySolver fail. Remarks This class is immutable and thread-safe. Methods Solve(Requirements) Provides Selections that satisfy a set of Requirements. public Selections Solve(Requirements requirements) Parameters requirements Requirements The requirements to satisfy. Returns Selections The selected ImplementationSelections. Remarks Feed files may be downloaded, signature validation is performed, implementations are not downloaded. Exceptions OperationCanceledException The user canceled the task. ArgumentException requirements is incomplete. IOException A problem occurred while reading the feed file. WebException A problem occurred while fetching the feed file. UnauthorizedAccessException Access to the cache is not permitted. SignatureException The signature data of a remote feed file could not be verified. SolverException The solver was unable to provide Selections that fulfill the requirements." + }, + "api/ZeroInstall.Services.Solvers.ISelectionCandidateProvider.html": { + "href": "api/ZeroInstall.Services.Solvers.ISelectionCandidateProvider.html", + "title": "Interface ISelectionCandidateProvider | Zero Install .NET API", + "keywords": "Interface ISelectionCandidateProvider Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll Generates SelectionCandidates for ISolvers to choose among. public interface ISelectionCandidateProvider Remarks Implementations of this interface may perform in-memory caching and are thread-safe. Properties FailedFeeds A list of feeds that could not be downloaded along with the exceptions describing the problems. IReadOnlyDictionary FailedFeeds { get; } Property Value IReadOnlyDictionary Methods Clear() Clears any in-memory caches. void Clear() GetSortedCandidates(Requirements) Gets all SelectionCandidates for a specific set of Requirements sorted from best to worst. IReadOnlyList GetSortedCandidates(Requirements requirements) Parameters requirements Requirements Returns IReadOnlyList LookupOriginalImplementation(ImplementationSelection) Retrieves the original Implementation an ImplementationSelection was based ofF. Implementation LookupOriginalImplementation(ImplementationSelection implementationSelection) Parameters implementationSelection ImplementationSelection Returns Implementation Exceptions KeyNotFoundException The implementationSelection was not provided by GetSortedCandidates(Requirements)." + }, + "api/ZeroInstall.Services.Solvers.ISolver.html": { + "href": "api/ZeroInstall.Services.Solvers.ISolver.html", + "title": "Interface ISolver | Zero Install .NET API", + "keywords": "Interface ISolver Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll Chooses a set of Implementations to satisfy the requirements of a program and its user. public interface ISolver Extension Methods SolverExtensions.TrySolve(ISolver, Requirements) Remarks Implementations of this interface are immutable and thread-safe. Methods Solve(Requirements) Provides Selections that satisfy a set of Requirements. Selections Solve(Requirements requirements) Parameters requirements Requirements The requirements to satisfy. Returns Selections The selected ImplementationSelections. Remarks Feed files may be downloaded, signature validation is performed, implementations are not downloaded. Exceptions OperationCanceledException The user canceled the task. ArgumentException requirements is incomplete. IOException A problem occurred while reading the feed file. WebException A problem occurred while fetching the feed file. UnauthorizedAccessException Access to the cache is not permitted. SignatureException The signature data of a remote feed file could not be verified. SolverException The solver was unable to provide Selections that fulfill the requirements." + }, + "api/ZeroInstall.Services.Solvers.SelectionCandidateComparer.html": { + "href": "api/ZeroInstall.Services.Solvers.SelectionCandidateComparer.html", + "title": "Class SelectionCandidateComparer | Zero Install .NET API", + "keywords": "Class SelectionCandidateComparer Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll Ranks SelectionCandidates. public sealed class SelectionCandidateComparer : IComparer Inheritance object SelectionCandidateComparer Implements IComparer Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Constructors SelectionCandidateComparer(Stability, NetworkLevel, LanguageSet, Predicate) Ranks SelectionCandidates. public SelectionCandidateComparer(Stability stabilityPolicy, NetworkLevel networkUse, LanguageSet languages, Predicate isCached) Parameters stabilityPolicy Stability Implementations at this stability level or higher are preferred. Lower levels are used only if there is no other choice. networkUse NetworkLevel Controls how liberally network access is attempted. languages LanguageSet The preferred languages for the implementation. isCached Predicate sed to determine which implementations are already cached in the IImplementationStore. Methods Compare(SelectionCandidate?, SelectionCandidate?) Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other. public int Compare(SelectionCandidate? x, SelectionCandidate? y) Parameters x SelectionCandidate The first object to compare. y SelectionCandidate The second object to compare. Returns int A signed integer that indicates the relative values of x and y, as shown in the following table. Value Meaning Less than zero x is less than y. Zero x equals y. Greater than zero x is greater than y." + }, + "api/ZeroInstall.Services.Solvers.SelectionCandidateProvider.html": { + "href": "api/ZeroInstall.Services.Solvers.SelectionCandidateProvider.html", + "title": "Class SelectionCandidateProvider | Zero Install .NET API", + "keywords": "Class SelectionCandidateProvider Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll Generates SelectionCandidates for ISolvers to choose among. public class SelectionCandidateProvider : ISelectionCandidateProvider Inheritance object SelectionCandidateProvider Implements ISelectionCandidateProvider Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This class performs in-memory caching of InterfacePreferencess and implementations and is thread-safe. Constructors SelectionCandidateProvider(Config, IFeedManager, IImplementationStore, IPackageManager) Creates a new SelectionCandidate provider. public SelectionCandidateProvider(Config config, IFeedManager feedManager, IImplementationStore implementationStore, IPackageManager packageManager) Parameters config Config User settings controlling network behaviour, solving, etc. feedManager IFeedManager Provides access to remote and local Feeds. Handles downloading, signature verification and caching. implementationStore IImplementationStore Used to check which Implementations are already cached. packageManager IPackageManager An external package manager that can install PackageImplementations. Properties FailedFeeds A list of feeds that could not be downloaded along with the exceptions describing the problems. public IReadOnlyDictionary FailedFeeds { get; } Property Value IReadOnlyDictionary Methods Clear() Clears any in-memory caches. public void Clear() GetSortedCandidates(Requirements) Gets all SelectionCandidates for a specific set of Requirements sorted from best to worst. public IReadOnlyList GetSortedCandidates(Requirements requirements) Parameters requirements Requirements Returns IReadOnlyList LookupOriginalImplementation(ImplementationSelection) Retrieves the original Implementation an ImplementationSelection was based ofF. public Implementation LookupOriginalImplementation(ImplementationSelection implementationSelection) Parameters implementationSelection ImplementationSelection Returns Implementation Exceptions KeyNotFoundException The implementationSelection was not provided by GetSortedCandidates(Requirements)." + }, + "api/ZeroInstall.Services.Solvers.SolverDemand.html": { + "href": "api/ZeroInstall.Services.Solvers.SolverDemand.html", + "title": "Class SolverDemand | Zero Install .NET API", + "keywords": "Class SolverDemand Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll A demand used by ISolvers internally. Wrapper for Requirements that holds SelectionCandidates. public sealed record SolverDemand : IEquatable Inheritance object SolverDemand Implements IEquatable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Constructors SolverDemand(Requirements, ISelectionCandidateProvider, Importance) A demand used by ISolvers internally. Wrapper for Requirements that holds SelectionCandidates. public SolverDemand(Requirements Requirements, ISelectionCandidateProvider CandidateProvider, Importance Importance = Importance.Essential) Parameters Requirements Requirements The requirements. CandidateProvider ISelectionCandidateProvider Generates SelectionCandidates for the Requirements. Importance Importance Describes how important the demand is (i.e. whether ignoring it is an option). Properties CandidateProvider Generates SelectionCandidates for the Requirements. public ISelectionCandidateProvider CandidateProvider { get; init; } Property Value ISelectionCandidateProvider Candidates All candidates for the Requirements, including those that are not suitable. public IReadOnlyList Candidates { get; } Property Value IReadOnlyList Importance Describes how important the demand is (i.e. whether ignoring it is an option). public Importance Importance { get; init; } Property Value Importance Requirements The requirements. public Requirements Requirements { get; init; } Property Value Requirements Methods CandidatesCompatibleWith(Selections) Gets all SelectionCandidates that are compatible with the specified selections. public IEnumerable CandidatesCompatibleWith(Selections selections) Parameters selections Selections Returns IEnumerable" + }, + "api/ZeroInstall.Services.Solvers.SolverException.html": { + "href": "api/ZeroInstall.Services.Solvers.SolverException.html", + "title": "Class SolverException | Zero Install .NET API", + "keywords": "Class SolverException Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll Indicates the ISolver was unable to provide Selections that fulfill the Requirements. public sealed class SolverException : Exception, ISerializable Inheritance object Exception SolverException Implements ISerializable Inherited Members Exception.GetBaseException() Exception.GetType() Exception.ToString() Exception.Data Exception.HelpLink Exception.HResult Exception.InnerException Exception.Message Exception.Source Exception.StackTrace Exception.TargetSite object.Equals(object) object.Equals(object, object) object.GetHashCode() object.ReferenceEquals(object, object) Constructors SolverException() Indicates that the ISolver encountered an unknown problem. public SolverException() SolverException(string) Indicates that the ISolver encountered a specific problem. public SolverException(string message) Parameters message string SolverException(string, Exception) Indicates that there was a problem parsing the ISolver's output. public SolverException(string message, Exception innerException) Parameters message string innerException Exception" + }, + "api/ZeroInstall.Services.Solvers.SolverExtensions.html": { + "href": "api/ZeroInstall.Services.Solvers.SolverExtensions.html", + "title": "Class SolverExtensions | Zero Install .NET API", + "keywords": "Class SolverExtensions Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll Provides extension methods for ISolver. public static class SolverExtensions Inheritance object SolverExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods TrySolve(ISolver, Requirements) Provides Selections that satisfy a set of Requirements. Catches most exceptions and Logs them. public static Selections? TrySolve(this ISolver solver, Requirements requirements) Parameters solver ISolver The ISolver implementation. requirements Requirements A set of requirements/restrictions imposed by the user on the implementation selection process. Returns Selections The ImplementationSelections chosen for the feed; null if there was a problem. Remarks Feed files may be downloaded, signature validation is performed, implementations are not downloaded. Exceptions OperationCanceledException The user canceled the task. ArgumentException requirements is incomplete." + }, + "api/ZeroInstall.Services.Solvers.SolverRunBase.html": { + "href": "api/ZeroInstall.Services.Solvers.SolverRunBase.html", + "title": "Class SolverRunBase | Zero Install .NET API", + "keywords": "Class SolverRunBase Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll Common base class for representing a single run of a solver. public abstract class SolverRunBase Inheritance object SolverRunBase Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks This is intended to be used by private classes within ISolver implementations to hold state during a run of Solve(Requirements). Constructors SolverRunBase(Requirements, ISelectionCandidateProvider) Common base class for representing a single run of a solver. protected SolverRunBase(Requirements requirements, ISelectionCandidateProvider candidateProvider) Parameters requirements Requirements The requirements to satisfy. candidateProvider ISelectionCandidateProvider Generates SelectionCandidates for the solver to choose from. Remarks This is intended to be used by private classes within ISolver implementations to hold state during a run of Solve(Requirements). Fields CandidateProvider Generates SelectionCandidates for the solver to choose from. protected readonly ISelectionCandidateProvider CandidateProvider Field Value ISelectionCandidateProvider Selections Used to iteratively construct the selections to be returned. protected Selections Selections Field Value Selections Methods DemandsFor(Command, FeedUri) Generates SolverDemands for the dependencies specified by a Command. protected IEnumerable DemandsFor(Command command, FeedUri interfaceUri) Parameters command Command The command to scan for dependencies. interfaceUri FeedUri The interface URI of the feed providing the command. Returns IEnumerable DemandsFor(ImplementationSelection, Requirements) Generates SolverDemands for the dependencies specified by an ImplementationSelection. protected IEnumerable DemandsFor(ImplementationSelection selection, Requirements requirements) Parameters selection ImplementationSelection The selection to scan for dependencies. requirements Requirements Requirements to inherit into the demands. Returns IEnumerable Solve() Provides Selections that satisfy the specified Requirements. public Selections Solve() Returns Selections The selected ImplementationSelections. Exceptions SolverException The solver was unable to provide Selections that fulfill the Requirements. TryFulfill(SolverDemand) Tries to fulfill the specified solver demand. Adds the result to Selections if successful. protected abstract bool TryFulfill(SolverDemand demand) Parameters demand SolverDemand The demand to fulfill. Returns bool true if the demand could be met, false if not." + }, + "api/ZeroInstall.Services.Solvers.SolverUtils.html": { + "href": "api/ZeroInstall.Services.Solvers.SolverUtils.html", + "title": "Class SolverUtils | Zero Install .NET API", + "keywords": "Class SolverUtils Namespace ZeroInstall.Services.Solvers Assembly ZeroInstall.Services.dll Helper functions for ISolver implementations. public static class SolverUtils Inheritance object SolverUtils Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods AddCommand(ImplementationSelection, Requirements, Implementation) Adds a Command specified in an Implementation to a ImplementationSelection. public static Command? AddCommand(this ImplementationSelection selection, Requirements requirements, Implementation from) Parameters selection ImplementationSelection The ImplementationSelection to add the Command to. requirements Requirements The requirements specifying which Command to extract. from Implementation The Implementation to get the Command from. Returns Command The Command that was added to selection; null if none. AddDependencies(IDependencyContainer, Requirements, IDependencyContainer) Transfers Dependencys from one IDependencyContainer to another. public static void AddDependencies(this IDependencyContainer target, Requirements requirements, IDependencyContainer from) Parameters target IDependencyContainer The IDependencyContainer to add the Dependencys to. requirements Requirements The requirements which restrict which Dependencys are applicable. from IDependencyContainer The IDependencyContainer to get the Dependencys to. AddRestriction(Requirements, Restriction) Adds the version restriction from source to the requirements. public static void AddRestriction(this Requirements requirements, Restriction source) Parameters requirements Requirements source Restriction AddRestrictions(Requirements, Requirements) Adds the version restrictions from source to the requirements. public static void AddRestrictions(this Requirements requirements, Requirements source) Parameters requirements Requirements source Requirements BucketizeImportance(IEnumerable) Separates solver demands into buckets by importance. public static (List essential, List recommended) BucketizeImportance(this IEnumerable demands) Parameters demands IEnumerable Returns (List essential, List recommended) PurgeRestrictions(Selections) Removes all Restrictions from Selections. public static void PurgeRestrictions(this Selections selections) Parameters selections Selections ToSelection(SelectionCandidate, Requirements, IReadOnlyList) Turns a SelectionCandidate into a ImplementationSelection. public static ImplementationSelection ToSelection(this SelectionCandidate candidate, Requirements requirements, IReadOnlyList allCandidates) Parameters candidate SelectionCandidate The selection candidate. requirements Requirements The requirements the candidate was chosen for. allCandidates IReadOnlyList All candidates that were considered for selection (including candidate). These are used to present the user with possible alternatives. Returns ImplementationSelection ToSelections(IEnumerable, SolverDemand) Turns SelectionCandidates into ImplementationSelections. [LinqTunnel] public static IEnumerable ToSelections(this IEnumerable candidates, SolverDemand demand) Parameters candidates IEnumerable The selection candidates. demand SolverDemand The solver demand the candidates were chosen for. Returns IEnumerable" + }, + "api/ZeroInstall.Services.Solvers.html": { + "href": "api/ZeroInstall.Services.Solvers.html", + "title": "Namespace ZeroInstall.Services.Solvers | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Services.Solvers Solves requirements by selecting a specific combination of implementations from feeds. Classes BacktrackingSolver Uses limited backtracking to solve Requirements. Does not find all possible solutions! ExternalSolver Uses an external process to solve Requirements. The executable for external process is itself provided by another ISolver. FallbackSolver Wraps two solvers always passing requests to the primary one initially and falling back to secondary one should the primary one fail. SelectionCandidateComparer Ranks SelectionCandidates. SelectionCandidateProvider Generates SelectionCandidates for ISolvers to choose among. SolverDemand A demand used by ISolvers internally. Wrapper for Requirements that holds SelectionCandidates. SolverException Indicates the ISolver was unable to provide Selections that fulfill the Requirements. SolverExtensions Provides extension methods for ISolver. SolverRunBase Common base class for representing a single run of a solver. SolverUtils Helper functions for ISolver implementations. Interfaces ISelectionCandidateProvider Generates SelectionCandidates for ISolvers to choose among. ISolver Chooses a set of Implementations to satisfy the requirements of a program and its user." + }, + "api/ZeroInstall.Services.WebExceptionExtensions.html": { + "href": "api/ZeroInstall.Services.WebExceptionExtensions.html", + "title": "Class WebExceptionExtensions | Zero Install .NET API", + "keywords": "Class WebExceptionExtensions Namespace ZeroInstall.Services Assembly ZeroInstall.Services.dll Provides extension methods for WebExceptions. public static class WebExceptionExtensions Inheritance object WebExceptionExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ShouldTryMirror(WebException, Uri) Determines a download from a specific uri that failed with an exception is should be retried using a mirror location. public static bool ShouldTryMirror(this WebException exception, Uri uri) Parameters exception WebException uri Uri Returns bool" + }, + "api/ZeroInstall.Services.html": { + "href": "api/ZeroInstall.Services.html", + "title": "Namespace ZeroInstall.Services | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Services Services for solving dependencies, downloading implementations, executing apps, etc.. NuGet package: ZeroInstall.Services Namespaces ZeroInstall.Services.Executors Launches implementations and injects the selected dependencies. ZeroInstall.Services.Feeds Downloading and verifying feeds. ZeroInstall.Services.Fetchers Downloads and extracts implementations. ZeroInstall.Services.Native Operating system specific services such as native package managers. ZeroInstall.Services.Solvers Solves requirements by selecting a specific combination of implementations from feeds. Classes SelectionsManager Provides methods for filtering Selections. SelectionsManagerExtensions Provides extension methods for ISelectionsManager. ServiceCollectionExtensions Provides extension methods for IServiceCollection. ServiceProvider Instantiates requested services transparently on first use. Handles dependency injection internally. Use exactly one instance of the service provider per user request to ensure consistent state during execution. WebExceptionExtensions Provides extension methods for WebExceptions. Interfaces ISelectionsManager Provides methods for filtering Selections." + }, + "api/ZeroInstall.Store.Configuration.Config.html": { + "href": "api/ZeroInstall.Store.Configuration.Config.html", + "title": "Class Config | Zero Install .NET API", + "keywords": "Class Config Namespace ZeroInstall.Store.Configuration Assembly ZeroInstall.Store.dll User settings controlling network behaviour, solving, etc.. [Serializable] public sealed class Config : IEnumerable>, IEnumerable, ICloneable, IEquatable Inheritance object Config Implements IEnumerable> IEnumerable ICloneable IEquatable Inherited Members object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) object.ToString() Constructors Config() Creates a new configuration with default values set. public Config() Fields DefaultExternalSolverUri The default value for ExternalSolverUri. public const string DefaultExternalSolverUri = \"https://apps.0install.net/0install/0install-ocaml.xml\" Field Value string DefaultFeedMirror The default value for FeedMirror. public const string DefaultFeedMirror = \"https://roscidus.com/0mirror\" Field Value string DefaultKeyInfoServer The default value for KeyInfoServer. public const string DefaultKeyInfoServer = \"https://keylookup.0install.net/\" Field Value string DefaultMaxParallelDownloads The default value for MaxParallelDownloads. public const int DefaultMaxParallelDownloads = 4 Field Value int DefaultSelfUpdateUri The default value for SelfUpdateUri. public const string DefaultSelfUpdateUri = \"https://apps.0install.net/0install/0install-dotnet.xml\" Field Value string DefaultSyncServer The default value for SyncServer. public const string DefaultSyncServer = \"https://0install.de/sync/\" Field Value string Properties AutoApproveKeys Automatically approve keys known by the KeyInfoServer and seen the first time a feed is fetched. public bool AutoApproveKeys { get; set; } Property Value bool EffectiveNetworkUse Same as NetworkUse, except when there the internet connection is metered (capped at Minimal) or unavailable (capped at Offline). [Browsable(false)] public NetworkLevel EffectiveNetworkUse { get; } Property Value NetworkLevel ExternalSolverUri The feed URI used to get the external solver. Set to empty to deactivate use of external solver. public FeedUri? ExternalSolverUri { get; set; } Property Value FeedUri FeedMirror The mirror server used to provide feeds when the original server is unavailable. Set to empty to deactivate use of feed mirror. public FeedUri? FeedMirror { get; set; } Property Value FeedUri Freshness The maximum age a cached Feed may have until it is considered stale (needs to be updated). public TimeSpan Freshness { get; set; } Property Value TimeSpan HelpWithTesting Always prefer the newest versions, even if they have not been marked as Stable yet. public bool HelpWithTesting { get; set; } Property Value bool InitialTab The initial tab to show in GUI representations. [Browsable(false)] public ConfigTab InitialTab { get; set; } Property Value ConfigTab IsSyncConfigured Indicates whether the sync-related configuration is complete. [Browsable(false)] public bool IsSyncConfigured { get; } Property Value bool KeyInfoServer The key information server used to get information about who signed a feed. Set to empty to deactivate use of key information server. public FeedUri? KeyInfoServer { get; set; } Property Value FeedUri KioskMode Restrict usage to feeds specified in the catalog. public bool KioskMode { get; set; } Property Value bool MaxParallelDownloads Maximum number of Implementations to download in parallel. [Range(1, 128)] public int MaxParallelDownloads { get; set; } Property Value int NetworkUse Controls how liberally network access is attempted. public NetworkLevel NetworkUse { get; set; } Property Value NetworkLevel SelfUpdateUri The feed URI used to search for updates for Zero Install itself. Set to empty to deactivate self-update. public FeedUri? SelfUpdateUri { get; set; } Property Value FeedUri SyncCryptoKey The local key used to encrypt data before sending it to the SyncServer. public string SyncCryptoKey { get; set; } Property Value string SyncServer The sync server used to synchronize your app list between multiple computers. public FeedUri? SyncServer { get; set; } Property Value FeedUri See Also SyncServerUsername SyncServerPassword SyncServerPassword The password to authenticate with against the SyncServer. public string SyncServerPassword { get; set; } Property Value string See Also SyncServer SyncServerUsername SyncServerUsername The username to authenticate with against the SyncServer. public string SyncServerUsername { get; set; } Property Value string See Also SyncServer SyncServerPassword Methods Clone() Creates a deep copy of this Config instance. public Config Clone() Returns Config Equals(object?) Determines whether the specified object is equal to the current object. public override bool Equals(object? obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. Equals(Config?) Indicates whether the current object is equal to another object of the same type. public bool Equals(Config? other) Parameters other Config An object to compare with this object. Returns bool true if the current object is equal to the other parameter; otherwise, false. GetEnumerator() Returns an enumerator that iterates through the collection. public IEnumerator> GetEnumerator() Returns IEnumerator> An enumerator that can be used to iterate through the collection. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GetOption(string) Retrieves the string representation of an option identified by a key. public string GetOption(string key) Parameters key string The key of the option to retrieve. Returns string The string representation of the the option. Exceptions KeyNotFoundException key is invalid. IsOptionLocked(string) Determines whether an option is locked by a group policy (in the Windows registry). public static bool IsOptionLocked(string key) Parameters key string The key of the option to check. Returns bool Load() Aggregates options from all applicable config files and registry locations. public static Config Load() Returns Config Exceptions IOException A problem occurred while reading the file. UnauthorizedAccessException Read access to the file is not permitted. InvalidDataException A problem occurred while deserializing the config data. LoadSafe() Tries to aggregates options from all applicable config files and registry locations. Automatically falls back to default values on errors. public static Config LoadSafe() Returns Config The loaded Config or default Config if there was a problem. ReadFrom(IniData, string) Reads options from a config file stream and merges them into the config instance. public void ReadFrom(IniData iniData, string path = \"embedded\") Parameters iniData IniData The parsed file. path string The path of the file iniData was read from. Used for logging. Exceptions InvalidDataException The file contains invalid config values. ReadFromFile(string) Reads options from a config file and merges them into the config instance. public void ReadFromFile(string path) Parameters path string The path of the file to read. Exceptions IOException A problem occurred while reading the file. UnauthorizedAccessException Read access to the file is not permitted. InvalidDataException The file contains invalid config values. ReadFromFiles() Reads options from config files in default locations and merges them into the config instance. public void ReadFromFiles() Exceptions IOException A problem occurred while reading the file. UnauthorizedAccessException Read access to the file is not permitted. InvalidDataException The file contains invalid config values. ReadFromFilesMachineWideOnly() Reads options from config files in machine-wide locations. public void ReadFromFilesMachineWideOnly() Exceptions IOException A problem occurred while reading the file. UnauthorizedAccessException Read access to the file is not permitted. InvalidDataException The file contains invalid config values. ReadFromGroupPolicy() Reads options from group policies (in the Windows registry) and merges them into the config instance. public void ReadFromGroupPolicy() Exceptions UnauthorizedAccessException Read access to the registry key is not permitted. InvalidDataException The registry key contains invalid config values. ResetOption(string) Resets an option identified by a key to its default value. public void ResetOption(string key) Parameters key string The key of the option to reset. Exceptions KeyNotFoundException key is invalid. Save(bool) Saves the options to a config file in a default location. public void Save(bool machineWide = false) Parameters machineWide bool true to save in a machine-wide location; false to save in the user profile. Remarks This method performs an atomic write operation when possible. Exceptions IOException A problem occurred while writing the file. UnauthorizedAccessException Write access to the file is not permitted. Save(string) Saves the options to a config file. public void Save(string path) Parameters path string Remarks This method performs an atomic write operation when possible. Exceptions IOException A problem occurred while writing the file. UnauthorizedAccessException Write access to the file is not permitted. SetOption(string, string) Sets an option identified by a key. public void SetOption(string key, string value) Parameters key string The key of the option to set. value string A string representation of the option. Exceptions KeyNotFoundException key is invalid. FormatException value is invalid. UnauthorizedAccessException This option is controlled by a group policy and can therefore not be modified. ToIniData() Converts the options into an in-memory representation of an INI file. public IniData ToIniData() Returns IniData" + }, + "api/ZeroInstall.Store.Configuration.ConfigTab.html": { + "href": "api/ZeroInstall.Store.Configuration.ConfigTab.html", + "title": "Enum ConfigTab | Zero Install .NET API", + "keywords": "Enum ConfigTab Namespace ZeroInstall.Store.Configuration Assembly ZeroInstall.Store.dll Available tabs in a Config GUI. public enum ConfigTab Fields Advanced = 7 Catalog = 3 Default = 0 Language = 6 Storage = 2 Sync = 5 Trust = 4 Updates = 1" + }, + "api/ZeroInstall.Store.Configuration.NetworkLevel.html": { + "href": "api/ZeroInstall.Store.Configuration.NetworkLevel.html", + "title": "Enum NetworkLevel | Zero Install .NET API", + "keywords": "Enum NetworkLevel Namespace ZeroInstall.Store.Configuration Assembly ZeroInstall.Store.dll Controls how liberally network access is attempted. public enum NetworkLevel Fields Full = 2 Always use network to get the newest available versions. Minimal = 1 Only access network when there are no safe implementations available. Offline = 0 Do not access network at all." + }, + "api/ZeroInstall.Store.Configuration.html": { + "href": "api/ZeroInstall.Store.Configuration.html", + "title": "Namespace ZeroInstall.Store.Configuration | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Store.Configuration User settings controlling network behaviour, solving, etc.. Classes Config User settings controlling network behaviour, solving, etc.. Enums ConfigTab Available tabs in a Config GUI. NetworkLevel Controls how liberally network access is attempted." + }, + "api/ZeroInstall.Store.Deployment.ClearDirectory.html": { + "href": "api/ZeroInstall.Store.Deployment.ClearDirectory.html", + "title": "Class ClearDirectory | Zero Install .NET API", + "keywords": "Class ClearDirectory Namespace ZeroInstall.Store.Deployment Assembly ZeroInstall.Store.dll Deletes files listed in a Manifest file from a directory. [MustDisposeResource] public class ClearDirectory : DirectoryOperation, IDisposable Inheritance object StagedOperation DirectoryOperation ClearDirectory Implements IDisposable Inherited Members DirectoryOperation.Path DirectoryOperation.Manifest DirectoryOperation.Handler DirectoryOperation.Randomize(string) DirectoryOperation.NoRestart DirectoryOperation.UnlockFiles(IEnumerable) DirectoryOperation.Dispose() StagedOperation.Stage() StagedOperation.Commit() object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors ClearDirectory(string, Manifest, ITaskHandler) Deletes files listed in a Manifest file from a directory. public ClearDirectory(string path, Manifest manifest, ITaskHandler handler) Parameters path string The path of the directory to clear. manifest Manifest The contents of a Manifest file describing the directory. handler ITaskHandler A callback object used when the user needs to be asked questions or informed about IO tasks. Methods OnCommit() Template method to commit the changes made by OnStage(). protected override void OnCommit() OnRollback() Template method to revert any changes made by OnStage(). protected override void OnRollback() OnStage() Template method to stage changes. protected override void OnStage()" + }, + "api/ZeroInstall.Store.Deployment.DeployDirectory.html": { + "href": "api/ZeroInstall.Store.Deployment.DeployDirectory.html", + "title": "Class DeployDirectory | Zero Install .NET API", + "keywords": "Class DeployDirectory Namespace ZeroInstall.Store.Deployment Assembly ZeroInstall.Store.dll Deploys/copies files listed in a Manifest file to another directory. [MustDisposeResource] public class DeployDirectory : DirectoryOperation, IDisposable Inheritance object StagedOperation DirectoryOperation DeployDirectory Implements IDisposable Inherited Members DirectoryOperation.Path DirectoryOperation.Manifest DirectoryOperation.Handler DirectoryOperation.Randomize(string) DirectoryOperation.NoRestart DirectoryOperation.UnlockFiles(IEnumerable) DirectoryOperation.Dispose() StagedOperation.Stage() StagedOperation.Commit() object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors DeployDirectory(string, Manifest, string, ITaskHandler) Deploys/copies files listed in a Manifest file to another directory. public DeployDirectory(string sourcePath, Manifest sourceManifest, string destinationPath, ITaskHandler handler) Parameters sourcePath string The path of the source directory to copy from. sourceManifest Manifest The contents of a Manifest file describing the source directory. destinationPath string The path of the destination directory to copy to. handler ITaskHandler A callback object used when the user needs to be asked questions or informed about IO tasks. Properties DestinationPath The path of the destination directory. May already exist. public string DestinationPath { get; } Property Value string Methods OnCommit() Template method to commit the changes made by OnStage(). protected override void OnCommit() OnRollback() Template method to revert any changes made by OnStage(). protected override void OnRollback() OnStage() Template method to stage changes. protected override void OnStage()" + }, + "api/ZeroInstall.Store.Deployment.DirectoryOperation.html": { + "href": "api/ZeroInstall.Store.Deployment.DirectoryOperation.html", + "title": "Class DirectoryOperation | Zero Install .NET API", + "keywords": "Class DirectoryOperation Namespace ZeroInstall.Store.Deployment Assembly ZeroInstall.Store.dll Common base class for deployment operations that operate on directories with Manifests. [MustDisposeResource] public abstract class DirectoryOperation : StagedOperation, IDisposable Inheritance object StagedOperation DirectoryOperation Implements IDisposable Derived ClearDirectory DeployDirectory Inherited Members StagedOperation.Stage() StagedOperation.OnStage() StagedOperation.Commit() StagedOperation.OnCommit() StagedOperation.OnRollback() object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Constructors DirectoryOperation(string, Manifest, ITaskHandler) Common base class for deployment operations that operate on directories with Manifests. protected DirectoryOperation(string path, Manifest manifest, ITaskHandler handler) Parameters path string The path of the directory to operate on. manifest Manifest The contents of a file describing the directory. handler ITaskHandler A callback object used when the user needs to be asked questions or informed about IO tasks. Fields Handler A callback object used when the user needs to be asked questions or informed about IO tasks. protected readonly ITaskHandler Handler Field Value ITaskHandler Manifest The contents of a Manifest file describing the directory. protected readonly Manifest Manifest Field Value Manifest Path The path of the directory to operate on. protected readonly string Path Field Value string Properties NoRestart Indicates that applications shut down by the WindowsRestartManager shall not be restarted on Dispose(). public bool NoRestart { get; set; } Property Value bool Methods Dispose() Performs a rollback of all changes made by Stage() if Commit() has not been called and completed yet. public override void Dispose() Randomize(string) Appends a random string to a file path. protected static string Randomize(string path) Parameters path string Returns string UnlockFiles(IEnumerable) Uses WindowsRestartManager to close any applications that have open references to the specified files if possible and removes read-only attributes. protected void UnlockFiles(IEnumerable files) Parameters files IEnumerable Remarks Closed applications will be restarted by Dispose()." + }, + "api/ZeroInstall.Store.Deployment.html": { + "href": "api/ZeroInstall.Store.Deployment.html", + "title": "Namespace ZeroInstall.Store.Deployment | Zero Install .NET API", + "keywords": "Namespace ZeroInstall.Store.Deployment Deploying implementations to locations outside an implementation cache; mainly used to deploy Zero Install itself. Classes ClearDirectory Deletes files listed in a Manifest file from a directory. DeployDirectory Deploys/copies files listed in a Manifest file to another directory. DirectoryOperation Common base class for deployment operations that operate on directories with Manifests." + }, + "api/ZeroInstall.Store.Feeds.FeedCache.html": { + "href": "api/ZeroInstall.Store.Feeds.FeedCache.html", + "title": "Class FeedCache | Zero Install .NET API", + "keywords": "Class FeedCache Namespace ZeroInstall.Store.Feeds Assembly ZeroInstall.Store.dll A disk-based cache of Feeds that were downloaded via HTTP(S). Once a feed has been added to this cache it is considered trusted (signatures are not checked again). public sealed class FeedCache : IFeedCache Inheritance object FeedCache Implements IFeedCache Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Remarks This class is immutable and thread-safe. Constructors FeedCache(string, IOpenPgp) A disk-based cache of Feeds that were downloaded via HTTP(S). Once a feed has been added to this cache it is considered trusted (signatures are not checked again). public FeedCache(string path, IOpenPgp openPgp) Parameters path string A fully qualified directory path. openPgp IOpenPgp Provides access to an encryption/signature system compatible with the OpenPGP standard. Remarks This class is immutable and thread-safe. Properties Path The path to the underlying directory in the file system. public string Path { get; } Property Value string Methods Add(FeedUri, byte[]) Adds a new Feed to the cache. Only do this after the feed source has been verified and trusted and replay attacks filtered! public void Add(FeedUri feedUri, byte[] data) Parameters feedUri FeedUri The canonical ID used to identify the feed. Must not be a local path. data byte[] The content of the feed file as a byte array. Exceptions IOException A problem occurred while writing the feed file. UnauthorizedAccessException Write access to the cache is not permitted. InvalidDataException The feed file could not be parsed. InvalidOperationException feedUri is a a local path. Contains(FeedUri) Determines whether this cache contains a local copy of a Feed identified by a specific URL. public bool Contains(FeedUri feedUri) Parameters feedUri FeedUri The canonical ID used to identify the feed. Returns bool true if the specified feed is available in this cache; false if the specified feed is not available in this cache. GetFeed(FeedUri) Tries to get a specific Feed from this cache. public Feed? GetFeed(FeedUri feedUri) Parameters feedUri FeedUri The canonical ID used to identify the feed. Returns Feed The un-normalized Feed; null if the feed was not found in the cache or could not be parsed. Exceptions IOException A problem occurred while reading the feed file. UnauthorizedAccessException Read access to the cache is not permitted. GetPath(FeedUri) Tries to get the file path of the on-disk representation of a specific Feed. public string? GetPath(FeedUri feedUri) Parameters feedUri FeedUri The canonical ID used to identify the feed. Returns string The fully qualified path to the feed file; null if the feed was not found in the cache. Exceptions IOException A problem occurred while reading the feed file. UnauthorizedAccessException Read access to the cache is not permitted. GetSignatures(FeedUri) Determines which signatures a Feed from this cache is signed with. public IEnumerable GetSignatures(FeedUri feedUri) Parameters feedUri FeedUri The canonical ID used to identify the feed. Returns IEnumerable A list of signatures found, both valid and invalid. Returns an empty list if the feed was not found in the cache. Exceptions IOException A problem occurred while reading the feed file. UnauthorizedAccessException Read access to the cache is not permitted. SignatureException A signature block was found but it could not be parsed. ListAll() Returns a list of all Feeds stored in this cache. public IEnumerable ListAll() Returns IEnumerable A list of feed URIs (e.g. \"http://somedomain.net/interface.xml\"). Usually these can also be considered interface URIs. Exceptions IOException A problem occurred while reading from the cache. UnauthorizedAccessException Read access to the cache is not permitted. Remove(FeedUri) Removes a specific Feed from this cache. No exception is thrown if the specified Feed is not in the cache. public void Remove(FeedUri feedUri) Parameters feedUri FeedUri The canonical ID used to identify the feed. Exceptions IOException The feed could not be deleted. UnauthorizedAccessException Write access to the cache is not permitted." + }, + "api/ZeroInstall.Store.Feeds.FeedCaches.html": { + "href": "api/ZeroInstall.Store.Feeds.FeedCaches.html", + "title": "Class FeedCaches | Zero Install .NET API", + "keywords": "Class FeedCaches Namespace ZeroInstall.Store.Feeds Assembly ZeroInstall.Store.dll Provides IFeedCache instances. public static class FeedCaches Inheritance object FeedCaches Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties DefaultPath The default feed cache location in the user profile. public static string DefaultPath { get; } Property Value string Methods Default(IOpenPgp) Creates an IFeedCache instance that uses the default cache location in the user profile. public static IFeedCache Default(IOpenPgp openPgp) Parameters openPgp IOpenPgp Provides access to an encryption/signature system compatible with the OpenPGP standard. Returns IFeedCache" + }, + "api/ZeroInstall.Store.Feeds.FeedUtils.html": { + "href": "api/ZeroInstall.Store.Feeds.FeedUtils.html", + "title": "Class FeedUtils | Zero Install .NET API", + "keywords": "Class FeedUtils Namespace ZeroInstall.Store.Feeds Assembly ZeroInstall.Store.dll Provides utility methods for managing Feeds. public static class FeedUtils Inheritance object FeedUtils Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields SignatureBlockEnd The string signifying the end of a signature block. public const string SignatureBlockEnd = \"\\n-->\\n\" Field Value string SignatureBlockStart The string signifying the start of a signature block. public const string SignatureBlockStart = \" services commands --> desktop_integration publish[ZeroInstall.Publish] --> client publish --> archives publish --> desktop_integration services[ZeroInstall.Services] --> archives archives[ZeroInstall.Archives] --> store desktop_integration[ZeroInstall.DesktopIntegration] --> store client[ZeroInstall.Client] --> model store[ZeroInstall.Store] --> model model[ZeroInstall.Model]" + }, + "model.html": { + "href": "model.html", + "title": "Data model | Zero Install .NET API", + "keywords": "Data model The ZeroInstall.Model namespace contains the data model for the Zero Install feed format with the Feed class as the entry point. The ZeroInstall.Model.Capabilities namespace contains the data model for capabilities extension for the feed format. Serialization These classes are serialized to and from XML using .NET's XmlSerializer. The serialization code is generated at compile-time for better performance. Normalization After deserialization from XML a feed is in a non-normalized form. Before it can be used by Zero Install's other Services it needs to be normalized, by calling the .Normalize() method. This will: Propagate values from s to s Extract s from Convert to s etc. However, if you intend to edit a feed and save it as XML again, you should not call the .Normalize() method, in order to preserve the feed's structure. Nullability Required fields in the data model are marked as non-nullable. However, in a Feed instance deserialized from XML these fields may be null anyway. Calling .Normalize() throws an InvalidDataException if any required/non-nullable fields are unset. Therefore, only a normalized Feed should be treated as \"null-safe\"." + }, + "publish.html": { + "href": "publish.html", + "title": "Publishing | Zero Install .NET API", + "keywords": "Publishing The ZeroInstall.Publish namespace provides utilities for creating and modifying feed files. This provides the basis for the Zero Install Publishing Tools. You can also use it to create your own tools. Feed signing The SignedFeed class provides a wrapper around Feed that adds OpenPGP signatures to feed files when saving. Set missing values The .SetMissing() extension method for Implementation sets missing properties by downloading, extracting and hashing files as needed. Feed editing The FeedEditing class is a container for editing feeds with an Undo system." + }, + "services.html": { + "href": "services.html", + "title": "Services | Zero Install .NET API", + "keywords": "Services The ZeroInstall.Services namespace provides services for solving dependencies, downloading implementations, executing apps, etc.. Dependency injection The ServiceProvider class provides instances of various services. You can think of it as a hard-coded dependency injection container. We use this instead of a runtime DI system to avoid the performance impact of reflection, keeping the cold-start time short. This is important so that starting a cached program with 0install run does not add a significant overhead when compared to launching it directly. To instantiate the service provider you need to provide the constructor with an ITaskHandler. You should use exactly one instance of the service provider per user request to ensure consistent state during execution. Rather than instantiating the service provider class, another pattern used in the Zero Install code-base is to inherit from it. You can also use the .AddZeroInstall() extension method for IServiceCollection to replace the service provider with .NET's built-in DI framework. Sample use-case A simplified version of the 0install run logic can be implemented using the Zero Install services as follows: Pass Requirements to ISolver.Solve() and get Selections. Pass Selections to ISelectionsManager.GetUncachedImplementations() and get uncached Implementation. Pass Implementation to IFetcher.Fetch(). v Pass Selections to IExecutor.Start(). Sample code for implementing this in various languages: C# Visual Basic .NET F# IronPython" + } +} \ No newline at end of file diff --git a/logo.svg b/logo.svg new file mode 100644 index 000000000..f303aeb9c --- /dev/null +++ b/logo.svg @@ -0,0 +1,2304 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/manifest.json b/manifest.json new file mode 100644 index 000000000..d2a398b6f --- /dev/null +++ b/manifest.json @@ -0,0 +1,4888 @@ +{ + "source_base_path": "C:/projects/0install-dotnet/doc", + "xrefmap": "xrefmap.yml", + "files": [ + { + "type": "Resource", + "output": { + "resource": { + "relative_path": "index.json" + } + } + }, + { + "type": "Resource", + "source_relative_path": "../logo.svg", + "output": { + "resource": { + "relative_path": "logo.svg" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.BuilderExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.BuilderExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Builders.ArchiveBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Builders.ArchiveBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Builders.IArchiveBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Builders.IArchiveBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Builders.TarBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Builders.TarBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Builders.TarBz2Builder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Builders.TarBz2Builder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Builders.TarGzBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Builders.TarGzBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Builders.TarLzipBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Builders.TarLzipBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Builders.TarZstandardBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Builders.TarZstandardBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Builders.ZipBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Builders.ZipBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Builders.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Builders.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.ArchiveExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.ArchiveExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.CabExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.CabExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.DmgExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.DmgExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.IArchiveExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.IArchiveExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.MsiExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.MsiExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.RarExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.RarExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.RubyGemExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.RubyGemExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.SevenZipExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.SevenZipExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.TarBz2Extractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.TarBz2Extractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.TarExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.TarExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.TarGzExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.TarGzExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.TarLzipExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.TarLzipExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.TarLzmaExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.TarLzmaExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.TarXzExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.TarXzExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.TarZstandardExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.TarZstandardExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.ZipExtractor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.ZipExtractor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.Extractors.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.Extractors.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.ImplementationServer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.ImplementationServer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Archives.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Archives.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Client.IZeroInstallClient.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Client.IZeroInstallClient.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Client.TemporarilyUnavailableException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Client.TemporarilyUnavailableException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Client.ZeroInstallClient.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Client.ZeroInstallClient.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Client.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Client.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.AddFeed.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.AddFeed.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.AddRemoveFeedCommand.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.AddRemoveFeedCommand.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.CatalogMan.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.CatalogMan.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Configure.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Configure.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.DefaultCommand.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.DefaultCommand.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Digest.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Digest.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Download.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Download.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Export.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Export.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.ExportHelp.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.ExportHelp.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Exporters.Exporter.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Exporters.Exporter.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Exporters.HelpExporterBase.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Exporters.HelpExporterBase.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Exporters.HtmlHelpExporter.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Exporters.HtmlHelpExporter.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Exporters.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Exporters.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Fetch.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Fetch.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Import.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Import.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.List.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.List.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.ListFeeds.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.ListFeeds.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.RemoveFeed.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.RemoveFeed.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Run.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Run.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Search.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Search.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Selection.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Selection.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Add.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Add.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Audit.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Audit.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Copy.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Copy.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Export.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Export.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Find.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Find.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.List.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.List.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.ListImplementations.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.ListImplementations.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Optimise.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Optimise.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Purge.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Purge.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Remove.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Remove.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Serve.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Serve.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.StoreSubCommand.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.StoreSubCommand.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Verify.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.Verify.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.StoreMan.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.TrustMan.Add.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.TrustMan.Add.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.TrustMan.List.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.TrustMan.List.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.TrustMan.Remove.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.TrustMan.Remove.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.TrustMan.TrustSubCommand.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.TrustMan.TrustSubCommand.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.TrustMan.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.TrustMan.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.Update.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.Update.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Basic.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Basic.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.CliCommand.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.CliCommand.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.CliCommandHandler.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.CliCommandHandler.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.CliMultiCommand.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.CliMultiCommand.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.AddAlias.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.AddAlias.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.AddApp.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.AddApp.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.AppCommand.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.AppCommand.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.Central.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.Central.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.ImportApps.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.ImportApps.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.IntegrateApp.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.IntegrateApp.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.IntegrationCommand.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.IntegrationCommand.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.ListApps.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.ListApps.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.RemoveAllApps.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.RemoveAllApps.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.RemoveApp.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.RemoveApp.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.RepairApps.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.RepairApps.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.Self.Deploy.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.Self.Deploy.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.Self.Remove.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.Self.Remove.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.Self.RemoveSubCommandBase.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.Self.RemoveSubCommandBase.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.Self.SelfSubCommand.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.Self.SelfSubCommand.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.Self.Update.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.Self.Update.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.Self.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.Self.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.SelfManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.SelfManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.SyncApps.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.SyncApps.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.UpdateApps.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.UpdateApps.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Desktop.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Desktop.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.EnvironmentBuilderExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.EnvironmentBuilderExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.ExitCode.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.ExitCode.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.ICliSubCommand.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.ICliSubCommand.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.ICommandHandler.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.ICommandHandler.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.NeedsGuiException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.NeedsGuiException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.ProgramUtils.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.ProgramUtils.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Properties.Resources.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Properties.Resources.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.Properties.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.Properties.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.ScopedOperation.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.ScopedOperation.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.UnsuitableInstallBaseException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.UnsuitableInstallBaseException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.ZeroInstallInstance.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.ZeroInstallInstance.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Commands.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Commands.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPoint.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPoint.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPointList.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.AccessPointList.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.AppAlias.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.AppAlias.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.AutoPlay.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.AutoPlay.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.AutoStart.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.AutoStart.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.CapabilityRegistration.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.CapabilityRegistration.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.CommandAccessPoint.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.CommandAccessPoint.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.ContextMenu.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.ContextMenu.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultAccessPoint.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultAccessPoint.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultProgram.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.DefaultProgram.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.DesktopIcon.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.DesktopIcon.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.FileType.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.FileType.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.IconAccessPoint.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.IconAccessPoint.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.MenuEntry.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.MenuEntry.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.MockAccessPoint.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.MockAccessPoint.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.QuickLaunch.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.QuickLaunch.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.SendTo.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.SendTo.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.UrlProtocol.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.UrlProtocol.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AccessPoints.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AppEntry.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AppEntry.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.AppList.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.AppList.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.CapabilityExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.CapabilityExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.CategoryIntegrationManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.CategoryIntegrationManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ConflictData.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ConflictData.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ConflictDataUtils.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ConflictDataUtils.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ConflictException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ConflictException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ICategoryIntegrationManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ICategoryIntegrationManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.IIntegrationManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.IIntegrationManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.IconStores.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.IconStores.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.IntegrationManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.IntegrationManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.IntegrationManagerBase.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.IntegrationManagerBase.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Suggest.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Suggest.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.SyncIntegrationManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.SyncIntegrationManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.SyncRaceException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.SyncRaceException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.SyncResetMode.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.SyncResetMode.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Unix.AppAlias.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Unix.AppAlias.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Unix.ContextMenu.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Unix.ContextMenu.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Unix.DefaultProgram.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Unix.DefaultProgram.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Unix.FileType.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Unix.FileType.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Unix.FreeDesktop.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Unix.FreeDesktop.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Unix.UrlProtocol.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Unix.UrlProtocol.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Unix.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Unix.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.AutoPlayModel.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.AutoPlayModel.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModel.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModel.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModelExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.CapabilityModelExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.ContextMenuModel.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.ContextMenuModel.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.DefaultProgramModel.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.DefaultProgramModel.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.FileTypeModel.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.FileTypeModel.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.IconCapabilityModel.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.IconCapabilityModel.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.IntegrationState.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.IntegrationState.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.UrlProtocolModel.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.UrlProtocolModel.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.ViewModel.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.AppAlias.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.AppAlias.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.AppRegistration.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.AppRegistration.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.AutoPlay.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.AutoPlay.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.ComServer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.ComServer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.ContextMenu.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.ContextMenu.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.DefaultProgram.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.DefaultProgram.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.FileType.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.FileType.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.PathEnv.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.PathEnv.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.Shortcut.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.Shortcut.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.StubBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.StubBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.UninstallEntry.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.UninstallEntry.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.UrlProtocol.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.UrlProtocol.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.Windows.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.Windows.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.DesktopIntegration.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.DesktopIntegration.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Architecture.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Architecture.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ArchitectureExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ArchitectureExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Archive.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Archive.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Arg.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Arg.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ArgBase.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ArgBase.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Binding.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Binding.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.AppRegistration.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.AppRegistration.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.AutoPlay.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.AutoPlay.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.AutoPlayEvent.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.AutoPlayEvent.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.Capability.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.Capability.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.CapabilityList.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.CapabilityList.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.CapabilityListExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.CapabilityListExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.ComServer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.ComServer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.ContextMenu.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.ContextMenu.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.ContextMenuTarget.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.ContextMenuTarget.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.DefaultCapability.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.DefaultCapability.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.DefaultProgram.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.DefaultProgram.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.FileType.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.FileType.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.FileTypeExtension.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.FileTypeExtension.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.IconCapability.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.IconCapability.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.InstallCommands.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.InstallCommands.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.KnownProtocolPrefix.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.KnownProtocolPrefix.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.RemoveHook.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.RemoveHook.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.UrlProtocol.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.UrlProtocol.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.Verb.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.Verb.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.VerbCapability.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.VerbCapability.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Capabilities.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Capabilities.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Catalog.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Catalog.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Category.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Category.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Command.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Command.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Constraint.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Constraint.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.CopyFromStep.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.CopyFromStep.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Cpu.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Cpu.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Dependency.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Dependency.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.DependencyContainerExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.DependencyContainerExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Design.ArgBaseConverter.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Design.ArgBaseConverter.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Design.CategoryNameConverter.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Design.CategoryNameConverter.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Design.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Design.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.DownloadRetrievalMethod.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.DownloadRetrievalMethod.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Element.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Element.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ElementCollectionExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ElementCollectionExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.EntryPoint.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.EntryPoint.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.EnvironmentBinding.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.EnvironmentBinding.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.EnvironmentMode.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.EnvironmentMode.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ExecutableInBinding.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ExecutableInBinding.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ExecutableInPath.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ExecutableInPath.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ExecutableInVar.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ExecutableInVar.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Feed.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Feed.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.FeedElement.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.FeedElement.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.FeedReference.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.FeedReference.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.FeedTarget.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.FeedTarget.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.FeedUri.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.FeedUri.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ForEachArgs.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ForEachArgs.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.GenericBinding.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.GenericBinding.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Group.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Group.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.IArgBaseContainer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.IArgBaseContainer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.IBindingContainer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.IBindingContainer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.IDependencyContainer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.IDependencyContainer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.IDescriptionContainer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.IDescriptionContainer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.IElementContainer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.IElementContainer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.IIconContainer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.IIconContainer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.IInterfaceUri.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.IInterfaceUri.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.IInterfaceUriBindingContainer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.IInterfaceUriBindingContainer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.IRecipeStep.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.IRecipeStep.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ISummaryContainer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ISummaryContainer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Icon.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Icon.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.IconExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.IconExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Implementation.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Implementation.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ImplementationBase.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ImplementationBase.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ImplementationVersion.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ImplementationVersion.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Importance.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Importance.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.InterfaceReference.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.InterfaceReference.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ManifestDigest.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ManifestDigest.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer-1.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer-1.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ManifestDigestPartialEqualityComparer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ModelUtils.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ModelUtils.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.OS.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.OS.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.OverlayBinding.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.OverlayBinding.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.PackageImplementation.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.PackageImplementation.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Preferences.FeedPreferences.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Preferences.FeedPreferences.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Preferences.ImplementationPreferences.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Preferences.ImplementationPreferences.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Preferences.InterfacePreferences.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Preferences.InterfacePreferences.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Preferences.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Preferences.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Recipe.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Recipe.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.RemoveStep.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.RemoveStep.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.RenameStep.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.RenameStep.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Requirements.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Requirements.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Restriction.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Restriction.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.RetrievalMethod.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.RetrievalMethod.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Runner.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Runner.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Selection.ImplementationSelection.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Selection.ImplementationSelection.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Selection.SelectionCandidate.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Selection.SelectionCandidate.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Selection.SelectionCandidateExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Selection.SelectionCandidateExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Selection.Selections.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Selection.Selections.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Selection.TestCase.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Selection.TestCase.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Selection.TestCaseSet.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Selection.TestCaseSet.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Selection.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Selection.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.SingleFile.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.SingleFile.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.Stability.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.Stability.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.TargetBase.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.TargetBase.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.VersionDottedList.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.VersionDottedList.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.VersionModifier.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.VersionModifier.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.VersionPart.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.VersionPart.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.VersionRange.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.VersionRange.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.VersionRangePart.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.VersionRangePart.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.VersionRangePartExact.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.VersionRangePartExact.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.VersionRangePartExclude.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.VersionRangePartExclude.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.VersionRangePartRange.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.VersionRangePartRange.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.WorkingDir.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.WorkingDir.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.XmlUnknown.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.XmlUnknown.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ZeroInstallDeployment.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ZeroInstallDeployment.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.ZeroInstallEnvironment.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.ZeroInstallEnvironment.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Model.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Model.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.BuilderExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.BuilderExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.Capture.CaptureSession.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.Capture.CaptureSession.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.Capture.CommandMapper.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.Capture.CommandMapper.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.Capture.Snapshot.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.Capture.Snapshot.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.Capture.SnapshotDiff.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.Capture.SnapshotDiff.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.Capture.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.Capture.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.BashScript.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.BashScript.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.Candidate.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.Candidate.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.DetectCandidates.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.DetectCandidates.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.DotNetDll.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.DotNetDll.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.DotNetExe.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.DotNetExe.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.DotNetFrameworkExe.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.DotNetFrameworkExe.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.DotNetRuntimeType.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.DotNetRuntimeType.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.IIconContainer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.IIconContainer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.InterpretedScript.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.InterpretedScript.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.Java.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.Java.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.JavaClass.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.JavaClass.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.JavaJar.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.JavaJar.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.MacOSApp.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.MacOSApp.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.NativeExecutable.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.NativeExecutable.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDataDirectory.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDataDirectory.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDosHeader.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageDosHeader.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageFileHeader.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageFileHeader.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader32.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader32.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader64.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.ImageOptionalHeader64.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PEHeader.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PEMachineType.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PEMachineType.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PESubsystem.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PESubsystem.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PerlScript.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PerlScript.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PhpScript.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PhpScript.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PosixBinary.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PosixBinary.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PosixExecutable.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PosixExecutable.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PosixScript.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PosixScript.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PowerShellScript.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PowerShellScript.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PowerShellType.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PowerShellType.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.PythonScript.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.PythonScript.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.RubyScript.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.RubyScript.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.WindowsBatch.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.WindowsBatch.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.WindowsExe.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.WindowsExe.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.EntryPoints.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.EntryPoints.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.FeedBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.FeedBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.FeedEditing.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.FeedEditing.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.FeedUtils.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.FeedUtils.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.ImplementationExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.ImplementationExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.RetrievalMethodExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.RetrievalMethodExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.SignedCatalog.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.SignedCatalog.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.SignedFeed.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.SignedFeed.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Publish.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Publish.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Executors.EnvironmentBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Executors.EnvironmentBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Executors.Executor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Executors.Executor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Executors.ExecutorException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Executors.ExecutorException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Executors.IEnvironmentBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Executors.IEnvironmentBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Executors.IExecutor.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Executors.IExecutor.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Executors.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Executors.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Feeds.CatalogManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Feeds.CatalogManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Feeds.CatalogManagerExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Feeds.CatalogManagerExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Feeds.FeedManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Feeds.FeedManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Feeds.FeedManagerExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Feeds.FeedManagerExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Feeds.ICatalogManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Feeds.ICatalogManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Feeds.IFeedManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Feeds.IFeedManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Feeds.ITrustManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Feeds.ITrustManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Feeds.OpenPgpKeyCallback.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Feeds.OpenPgpKeyCallback.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Feeds.ReplayAttackException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Feeds.ReplayAttackException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Feeds.TrustManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Feeds.TrustManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Feeds.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Feeds.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Fetchers.Fetcher.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Fetchers.Fetcher.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Fetchers.IFetcher.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Fetchers.IFetcher.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Fetchers.IImplementationDiscovery.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Fetchers.IImplementationDiscovery.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Fetchers.ImplementationDiscovery.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Fetchers.ImplementationDiscovery.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Fetchers.ImplementationDiscoveryExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Fetchers.ImplementationDiscoveryExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Fetchers.RetrievalMethodRanker.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Fetchers.RetrievalMethodRanker.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Fetchers.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Fetchers.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.ISelectionsManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.ISelectionsManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Native.CompositePackageManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Native.CompositePackageManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Native.ExternalImplementation.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Native.ExternalImplementation.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Native.ExternalRetrievalMethod.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Native.ExternalRetrievalMethod.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Native.IPackageManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Native.IPackageManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Native.PackageManagerBase.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Native.PackageManagerBase.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Native.PackageManagers.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Native.PackageManagers.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Native.WindowsPackageManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Native.WindowsPackageManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Native.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Native.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.SelectionsManager.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.SelectionsManager.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.SelectionsManagerExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.SelectionsManagerExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.ServiceCollectionExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.ServiceCollectionExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.ServiceProvider.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.ServiceProvider.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.BacktrackingSolver.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.BacktrackingSolver.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.ExternalSolver.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.ExternalSolver.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.FallbackSolver.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.FallbackSolver.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.ISelectionCandidateProvider.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.ISelectionCandidateProvider.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.ISolver.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.ISolver.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.SelectionCandidateComparer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.SelectionCandidateComparer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.SelectionCandidateProvider.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.SelectionCandidateProvider.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.SolverDemand.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.SolverDemand.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.SolverException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.SolverException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.SolverExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.SolverExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.SolverRunBase.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.SolverRunBase.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.SolverUtils.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.SolverUtils.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.Solvers.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.Solvers.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.WebExceptionExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.WebExceptionExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Services.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Services.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Configuration.Config.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Configuration.Config.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Configuration.ConfigTab.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Configuration.ConfigTab.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Configuration.NetworkLevel.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Configuration.NetworkLevel.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Configuration.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Configuration.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Deployment.ClearDirectory.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Deployment.ClearDirectory.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Deployment.DeployDirectory.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Deployment.DeployDirectory.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Deployment.DirectoryOperation.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Deployment.DirectoryOperation.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Deployment.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Deployment.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Feeds.FeedCache.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Feeds.FeedCache.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Feeds.FeedCaches.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Feeds.FeedCaches.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Feeds.FeedUtils.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Feeds.FeedUtils.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Feeds.IFeedCache.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Feeds.IFeedCache.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Feeds.SearchResult.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Feeds.SearchResult.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Feeds.SearchResults.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Feeds.SearchResults.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Feeds.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Feeds.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.FileSystem.BuilderExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.FileSystem.BuilderExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.FileSystem.DirectoryBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.FileSystem.DirectoryBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.FileSystem.IBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.FileSystem.IBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.FileSystem.IForwardOnlyBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.FileSystem.IForwardOnlyBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.FileSystem.ImplFileUtils.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.FileSystem.ImplFileUtils.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.FileSystem.PrefixBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.FileSystem.PrefixBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.FileSystem.ReadDirectory.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.FileSystem.ReadDirectory.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.FileSystem.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.FileSystem.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Icons.IIconStore.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Icons.IIconStore.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Icons.IconStore.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Icons.IconStore.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Icons.IconStoreExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Icons.IconStoreExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Icons.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Icons.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.CompositeImplementationSink.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.CompositeImplementationSink.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.CompositeImplementationStore.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.CompositeImplementationStore.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.DigestMismatchException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.DigestMismatchException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.IImplementationSink.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.IImplementationSink.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.IImplementationStore.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.IImplementationStore.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.ImplementationAlreadyInStoreException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.ImplementationAlreadyInStoreException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.ImplementationNotFoundException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.ImplementationNotFoundException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.ImplementationSink.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.ImplementationSink.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.ImplementationStore.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.ImplementationStore.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.ImplementationStoreKind.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.ImplementationStoreKind.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.ImplementationStoreUtils.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.ImplementationStoreUtils.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.ImplementationStores.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.ImplementationStores.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Implementations.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Implementations.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ManagerBase.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ManagerBase.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Manifests.Manifest.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Manifests.Manifest.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Manifests.ManifestBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Manifests.ManifestBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Manifests.ManifestElement.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Manifests.ManifestElement.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Manifests.ManifestExecutableFile.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Manifests.ManifestExecutableFile.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Manifests.ManifestFile.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Manifests.ManifestFile.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Manifests.ManifestFormat.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Manifests.ManifestFormat.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Manifests.ManifestNormalFile.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Manifests.ManifestNormalFile.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Manifests.ManifestSymlink.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Manifests.ManifestSymlink.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Manifests.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Manifests.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.BadSignature.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.BadSignature.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.BouncyCastle.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.BouncyCastle.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.Domain.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.Domain.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.DomainSet.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.DomainSet.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.ErrorSignature.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.ErrorSignature.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.GnuPG.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.GnuPG.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.IFingerprintContainer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.IFingerprintContainer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.IKeyIDContainer.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.IKeyIDContainer.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.IOpenPgp.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.IOpenPgp.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.Key.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.Key.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.MissingKeySignature.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.MissingKeySignature.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.OpenPgp.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.OpenPgp.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.OpenPgpExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.OpenPgpExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.OpenPgpFingerprint.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.OpenPgpFingerprint.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.OpenPgpSecretKey.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.OpenPgpSecretKey.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.OpenPgpSignature.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.OpenPgpSignature.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.OpenPgpUtils.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.OpenPgpUtils.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.SignatureException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.SignatureException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.TrustDB.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.TrustDB.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.ValidSignature.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.ValidSignature.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.WrongPassphraseException.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.WrongPassphraseException.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.Trust.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.Trust.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ViewModel.CacheNode.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ViewModel.CacheNode.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ViewModel.CacheNodeBuilder.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ViewModel.CacheNodeBuilder.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ViewModel.FeedNode.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ViewModel.FeedNode.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ViewModel.ImplementationNode.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ViewModel.ImplementationNode.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ViewModel.OwnedImplementationNode.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ViewModel.OwnedImplementationNode.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ViewModel.SelectionsDiffNode.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ViewModel.SelectionsDiffNode.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ViewModel.SelectionsTreeNode.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ViewModel.SelectionsTreeNode.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ViewModel.TempDirectoryNode.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ViewModel.TempDirectoryNode.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ViewModel.TrustNode.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ViewModel.TrustNode.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ViewModel.TrustNodeExtensions.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ViewModel.TrustNodeExtensions.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.ViewModel.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.ViewModel.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.Store.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.Store.html" + } + }, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/ZeroInstall.yml", + "output": { + ".html": { + "relative_path": "api/ZeroInstall.html" + } + }, + "version": "" + }, + { + "type": "Toc", + "source_relative_path": "api/toc.yml", + "output": { + ".html": { + "relative_path": "api/toc.html" + }, + ".json": { + "relative_path": "api/toc.json" + } + }, + "version": "" + }, + { + "type": "Conceptual", + "source_relative_path": "cli.md", + "output": { + ".html": { + "relative_path": "cli.html" + } + }, + "version": "" + }, + { + "type": "Conceptual", + "source_relative_path": "client.md", + "output": { + ".html": { + "relative_path": "client.html" + } + }, + "version": "" + }, + { + "type": "Toc", + "source_relative_path": "docs/toc.yml", + "output": { + ".html": { + "relative_path": "docs/toc.html" + }, + ".json": { + "relative_path": "docs/toc.json" + } + }, + "version": "" + }, + { + "type": "Conceptual", + "source_relative_path": "file-system.md", + "output": { + ".html": { + "relative_path": "file-system.html" + } + }, + "version": "" + }, + { + "type": "Conceptual", + "source_relative_path": "index.md", + "output": { + ".html": { + "relative_path": "index.html" + } + }, + "version": "" + }, + { + "type": "Conceptual", + "source_relative_path": "model.md", + "output": { + ".html": { + "relative_path": "model.html" + } + }, + "version": "" + }, + { + "type": "Conceptual", + "source_relative_path": "publish.md", + "output": { + ".html": { + "relative_path": "publish.html" + } + }, + "version": "" + }, + { + "type": "Conceptual", + "source_relative_path": "services.md", + "output": { + ".html": { + "relative_path": "services.html" + } + }, + "version": "" + }, + { + "type": "Toc", + "source_relative_path": "toc.yml", + "output": { + ".html": { + "relative_path": "toc.html" + }, + ".json": { + "relative_path": "toc.json" + } + }, + "version": "" + } + ], + "groups": [ + { + "xrefmap": "xrefmap.yml" + } + ] +} \ No newline at end of file diff --git a/model.html b/model.html new file mode 100644 index 000000000..518123e71 --- /dev/null +++ b/model.html @@ -0,0 +1,131 @@ + + + + + Data model | Zero Install .NET API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+

Data model

+ +

The ZeroInstall.Model namespace contains the data model for the Zero Install feed format with the Feed class as the entry point.

+

The ZeroInstall.Model.Capabilities namespace contains the data model for capabilities extension for the feed format.

+

Serialization

+

These classes are serialized to and from XML using .NET's XmlSerializer. The serialization code is generated at compile-time for better performance.

+

Normalization

+

After deserialization from XML a feed is in a non-normalized form. Before it can be used by Zero Install's other Services it needs to be normalized, by calling the .Normalize() method. This will:

+
    +
  • Propagate values from <group>s to <implementation>s
  • +
  • Extract <manifest-digest>s from <implementation id='...'>
  • +
  • Convert <implementation main='...'> to <command>s
  • +
  • etc.
  • +
+

However, if you intend to edit a feed and save it as XML again, you should not call the .Normalize() method, in order to preserve the feed's structure.

+

Nullability

+

Required fields in the data model are marked as non-nullable. However, in a Feed instance deserialized from XML these fields may be null anyway. Calling .Normalize() throws an InvalidDataException if any required/non-nullable fields are unset. Therefore, only a normalized Feed should be treated as "null-safe".

+ +
+ + + + + +
+ +
+ +
+
+ +
+ +
+
+
+ Copyright Bastian Eicher et al +
+
+
+ + diff --git a/public/blockDiagram-9f4a6865-KQGFBXS7.min.js b/public/blockDiagram-9f4a6865-KQGFBXS7.min.js new file mode 100644 index 000000000..310d13a99 --- /dev/null +++ b/public/blockDiagram-9f4a6865-KQGFBXS7.min.js @@ -0,0 +1,119 @@ +import{a as be,f as se,i as xe,n as Se,o as Le,p as me}from"./chunk-N4EFGQ5G.min.js";import"./chunk-LXB37CFX.min.js";import{A as fe,b as pe}from"./chunk-K2MRC2FE.min.js";import{D as he,Ga as S,J as Me,K as de,L as ge,Oa as _e,Ua as ye,b as Fe,c as Ke,cb as q,db as Ee,fb as we,h as j,l as ue,nb as ie}from"./chunk-YEACHCAA.min.js";import{d as te}from"./chunk-XUHMPXWX.min.js";var Ot=te(Fe(),1),Tt=te(Ke(),1),zt=te(Me(),1);var De,ve,re=function(){var e=function(D,o,s,i){for(s=s||{},i=D.length;i--;s[D[i]]=o);return s},a=[1,7],h=[1,13],c=[1,14],n=[1,15],g=[1,19],l=[1,16],f=[1,17],b=[1,18],p=[8,30],x=[8,21,28,29,30,31,32,40,44,47],y=[1,23],T=[1,24],v=[8,15,16,21,28,29,30,31,32,40,44,47],k=[8,15,16,21,27,28,29,30,31,32,40,44,47],E=[1,49],L={trace:function(){},yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:function(o,s,i,u,d,t,m){var r=t.length-1;switch(d){case 4:u.getLogger().debug("Rule: separator (NL) ");break;case 5:u.getLogger().debug("Rule: separator (Space) ");break;case 6:u.getLogger().debug("Rule: separator (EOF) ");break;case 7:u.getLogger().debug("Rule: hierarchy: ",t[r-1]),u.setHierarchy(t[r-1]);break;case 8:u.getLogger().debug("Stop NL ");break;case 9:u.getLogger().debug("Stop EOF ");break;case 10:u.getLogger().debug("Stop NL2 ");break;case 11:u.getLogger().debug("Stop EOF2 ");break;case 12:u.getLogger().debug("Rule: statement: ",t[r]),typeof t[r].length=="number"?this.$=t[r]:this.$=[t[r]];break;case 13:u.getLogger().debug("Rule: statement #2: ",t[r-1]),this.$=[t[r-1]].concat(t[r]);break;case 14:u.getLogger().debug("Rule: link: ",t[r],o),this.$={edgeTypeStr:t[r],label:""};break;case 15:u.getLogger().debug("Rule: LABEL link: ",t[r-3],t[r-1],t[r]),this.$={edgeTypeStr:t[r],label:t[r-1]};break;case 18:let R=parseInt(t[r]),Y=u.generateId();this.$={id:Y,type:"space",label:"",width:R,children:[]};break;case 23:u.getLogger().debug("Rule: (nodeStatement link node) ",t[r-2],t[r-1],t[r]," typestr: ",t[r-1].edgeTypeStr);let F=u.edgeStrToEdgeData(t[r-1].edgeTypeStr);this.$=[{id:t[r-2].id,label:t[r-2].label,type:t[r-2].type,directions:t[r-2].directions},{id:t[r-2].id+"-"+t[r].id,start:t[r-2].id,end:t[r].id,label:t[r-1].label,type:"edge",directions:t[r].directions,arrowTypeEnd:F,arrowTypeStart:"arrow_open"},{id:t[r].id,label:t[r].label,type:u.typeStr2Type(t[r].typeStr),directions:t[r].directions}];break;case 24:u.getLogger().debug("Rule: nodeStatement (abc88 node size) ",t[r-1],t[r]),this.$={id:t[r-1].id,label:t[r-1].label,type:u.typeStr2Type(t[r-1].typeStr),directions:t[r-1].directions,widthInColumns:parseInt(t[r],10)};break;case 25:u.getLogger().debug("Rule: nodeStatement (node) ",t[r]),this.$={id:t[r].id,label:t[r].label,type:u.typeStr2Type(t[r].typeStr),directions:t[r].directions,widthInColumns:1};break;case 26:u.getLogger().debug("APA123",this?this:"na"),u.getLogger().debug("COLUMNS: ",t[r]),this.$={type:"column-setting",columns:t[r]==="auto"?-1:parseInt(t[r])};break;case 27:u.getLogger().debug("Rule: id-block statement : ",t[r-2],t[r-1]),u.generateId(),this.$={...t[r-2],type:"composite",children:t[r-1]};break;case 28:u.getLogger().debug("Rule: blockStatement : ",t[r-2],t[r-1],t[r]);let C=u.generateId();this.$={id:C,type:"composite",label:"",children:t[r-1]};break;case 29:u.getLogger().debug("Rule: node (NODE_ID separator): ",t[r]),this.$={id:t[r]};break;case 30:u.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",t[r-1],t[r]),this.$={id:t[r-1],label:t[r].label,typeStr:t[r].typeStr,directions:t[r].directions};break;case 31:u.getLogger().debug("Rule: dirList: ",t[r]),this.$=[t[r]];break;case 32:u.getLogger().debug("Rule: dirList: ",t[r-1],t[r]),this.$=[t[r-1]].concat(t[r]);break;case 33:u.getLogger().debug("Rule: nodeShapeNLabel: ",t[r-2],t[r-1],t[r]),this.$={typeStr:t[r-2]+t[r],label:t[r-1]};break;case 34:u.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",t[r-3],t[r-2]," #3:",t[r-1],t[r]),this.$={typeStr:t[r-3]+t[r],label:t[r-2],directions:t[r-1]};break;case 35:case 36:this.$={type:"classDef",id:t[r-1].trim(),css:t[r].trim()};break;case 37:this.$={type:"applyClass",id:t[r-1].trim(),styleClass:t[r].trim()};break;case 38:this.$={type:"applyStyles",id:t[r-1].trim(),stylesStr:t[r].trim()};break}},table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:h,29:c,31:n,32:g,40:l,44:f,47:b},{8:[1,20]},e(p,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:a,28:h,29:c,31:n,32:g,40:l,44:f,47:b}),e(x,[2,16],{14:22,15:y,16:T}),e(x,[2,17]),e(x,[2,18]),e(x,[2,19]),e(x,[2,20]),e(x,[2,21]),e(x,[2,22]),e(v,[2,25],{27:[1,25]}),e(x,[2,26]),{19:26,26:12,32:g},{11:27,13:4,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:h,29:c,31:n,32:g,40:l,44:f,47:b},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},e(k,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},e(p,[2,13]),{26:35,32:g},{32:[2,14]},{17:[1,36]},e(v,[2,24]),{11:37,13:4,14:22,15:y,16:T,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:h,29:c,31:n,32:g,40:l,44:f,47:b},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},e(k,[2,30]),{18:[1,43]},{18:[1,44]},e(v,[2,23]),{18:[1,45]},{30:[1,46]},e(x,[2,28]),e(x,[2,35]),e(x,[2,36]),e(x,[2,37]),e(x,[2,38]),{37:[1,47]},{34:48,35:E},{15:[1,50]},e(x,[2,27]),e(k,[2,33]),{39:[1,51]},{34:52,35:E,39:[2,31]},{32:[2,15]},e(k,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:function(o,s){if(s.recoverable)this.trace(o);else{var i=new Error(o);throw i.hash=s,i}},parse:function(o){var s=this,i=[0],u=[],d=[null],t=[],m=this.table,r="",R=0,Y=0,F=2,C=1,Re=t.slice.call(arguments,1),w=Object.create(this.lexer),K={yy:{}};for(var J in this.yy)Object.prototype.hasOwnProperty.call(this.yy,J)&&(K.yy[J]=this.yy[J]);w.setInput(o,K.yy),K.yy.lexer=w,K.yy.parser=this,typeof w.yylloc>"u"&&(w.yylloc={});var Q=w.yylloc;t.push(Q);var Be=w.options&&w.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pe(){var P;return P=u.pop()||w.lex()||C,typeof P!="number"&&(P instanceof Array&&(u=P,P=u.pop()),P=s.symbols_[P]||P),P}for(var I,M,z,$,W={},G,B,ce,H;;){if(M=i[i.length-1],this.defaultActions[M]?z=this.defaultActions[M]:((I===null||typeof I>"u")&&(I=Pe()),z=m[M]&&m[M][I]),typeof z>"u"||!z.length||!z[0]){var ee="";H=[];for(G in m[M])this.terminals_[G]&&G>F&&H.push("'"+this.terminals_[G]+"'");w.showPosition?ee="Parse error on line "+(R+1)+`: +`+w.showPosition()+` +Expecting `+H.join(", ")+", got '"+(this.terminals_[I]||I)+"'":ee="Parse error on line "+(R+1)+": Unexpected "+(I==C?"end of input":"'"+(this.terminals_[I]||I)+"'"),this.parseError(ee,{text:w.match,token:this.terminals_[I]||I,line:w.yylineno,loc:Q,expected:H})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+I);switch(z[0]){case 1:i.push(I),d.push(w.yytext),t.push(w.yylloc),i.push(z[1]),I=null,Y=w.yyleng,r=w.yytext,R=w.yylineno,Q=w.yylloc;break;case 2:if(B=this.productions_[z[1]][1],W.$=d[d.length-B],W._$={first_line:t[t.length-(B||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(B||1)].first_column,last_column:t[t.length-1].last_column},Be&&(W._$.range=[t[t.length-(B||1)].range[0],t[t.length-1].range[1]]),$=this.performAction.apply(W,[r,Y,R,K.yy,z[1],d,t].concat(Re)),typeof $<"u")return $;B&&(i=i.slice(0,-1*B*2),d=d.slice(0,-1*B),t=t.slice(0,-1*B)),i.push(this.productions_[z[1]][0]),d.push(W.$),t.push(W._$),ce=m[i[i.length-2]][i[i.length-1]],i.push(ce);break;case 3:return!0}}return!0}},A=function(){var D={EOF:1,parseError:function(s,i){if(this.yy.parser)this.yy.parser.parseError(s,i);else throw new Error(s)},setInput:function(o,s){return this.yy=s||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var s=o.match(/(?:\r\n?|\n).*/g);return s?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},unput:function(o){var s=o.length,i=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-s),this.offset-=s;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var d=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===u.length?this.yylloc.first_column:0)+u[u.length-i.length].length-i[0].length:this.yylloc.first_column-s},this.options.ranges&&(this.yylloc.range=[d[0],d[0]+this.yyleng-s]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(o){this.unput(this.match.slice(o))},pastInput:function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var o=this.pastInput(),s=new Array(o.length+1).join("-");return o+this.upcomingInput()+` +`+s+"^"},test_match:function(o,s){var i,u,d;if(this.options.backtrack_lexer&&(d={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(d.yylloc.range=this.yylloc.range.slice(0))),u=o[0].match(/(?:\r\n?|\n).*/g),u&&(this.yylineno+=u.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:u?u[u.length-1].length-u[u.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+o[0].length},this.yytext+=o[0],this.match+=o[0],this.matches=o,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(o[0].length),this.matched+=o[0],i=this.performAction.call(this,this.yy,this,s,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var t in d)this[t]=d[t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var o,s,i,u;this._more||(this.yytext="",this.match="");for(var d=this._currentRules(),t=0;ts[0].length)){if(s=i,u=t,this.options.backtrack_lexer){if(o=this.test_match(i,d[t]),o!==!1)return o;if(this._backtrack){s=!1;continue}else return!1}else if(!this.options.flex)break}return s?(o=this.test_match(s,d[u]),o!==!1?o:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var s=this.next();return s||this.lex()},begin:function(s){this.conditionStack.push(s)},popState:function(){var s=this.conditionStack.length-1;return s>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(s){return s=this.conditionStack.length-1-Math.abs(s||0),s>=0?this.conditionStack[s]:"INITIAL"},pushState:function(s){this.begin(s)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(s,i,u,d){switch(u){case 0:return 10;case 1:return s.getLogger().debug("Found space-block"),31;case 2:return s.getLogger().debug("Found nl-block"),31;case 3:return s.getLogger().debug("Found space-block"),29;case 4:s.getLogger().debug(".",i.yytext);break;case 5:s.getLogger().debug("_",i.yytext);break;case 6:return 5;case 7:return i.yytext=-1,28;case 8:return i.yytext=i.yytext.replace(/columns\s+/,""),s.getLogger().debug("COLUMNS (LEX)",i.yytext),28;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:s.getLogger().debug("LEX: POPPING STR:",i.yytext),this.popState();break;case 14:return s.getLogger().debug("LEX: STR end:",i.yytext),"STR";case 15:return i.yytext=i.yytext.replace(/space\:/,""),s.getLogger().debug("SPACE NUM (LEX)",i.yytext),21;case 16:return i.yytext="1",s.getLogger().debug("COLUMNS (LEX)",i.yytext),21;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 22:return this.popState(),this.pushState("CLASSDEFID"),41;case 23:return this.popState(),42;case 24:return this.pushState("CLASS"),44;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;case 26:return this.popState(),46;case 27:return this.pushState("STYLE_STMNT"),47;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;case 29:return this.popState(),49;case 30:return this.pushState("acc_title"),"acc_title";case 31:return this.popState(),"acc_title_value";case 32:return this.pushState("acc_descr"),"acc_descr";case 33:return this.popState(),"acc_descr_value";case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),s.getLogger().debug("Lex: (("),"NODE_DEND";case 39:return this.popState(),s.getLogger().debug("Lex: (("),"NODE_DEND";case 40:return this.popState(),s.getLogger().debug("Lex: ))"),"NODE_DEND";case 41:return this.popState(),s.getLogger().debug("Lex: (("),"NODE_DEND";case 42:return this.popState(),s.getLogger().debug("Lex: (("),"NODE_DEND";case 43:return this.popState(),s.getLogger().debug("Lex: (-"),"NODE_DEND";case 44:return this.popState(),s.getLogger().debug("Lex: -)"),"NODE_DEND";case 45:return this.popState(),s.getLogger().debug("Lex: (("),"NODE_DEND";case 46:return this.popState(),s.getLogger().debug("Lex: ]]"),"NODE_DEND";case 47:return this.popState(),s.getLogger().debug("Lex: ("),"NODE_DEND";case 48:return this.popState(),s.getLogger().debug("Lex: ])"),"NODE_DEND";case 49:return this.popState(),s.getLogger().debug("Lex: /]"),"NODE_DEND";case 50:return this.popState(),s.getLogger().debug("Lex: /]"),"NODE_DEND";case 51:return this.popState(),s.getLogger().debug("Lex: )]"),"NODE_DEND";case 52:return this.popState(),s.getLogger().debug("Lex: )"),"NODE_DEND";case 53:return this.popState(),s.getLogger().debug("Lex: ]>"),"NODE_DEND";case 54:return this.popState(),s.getLogger().debug("Lex: ]"),"NODE_DEND";case 55:return s.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;case 56:return s.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;case 57:return s.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;case 58:return s.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 59:return s.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;case 60:return s.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 61:return s.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 62:return s.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 63:return s.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;case 64:return s.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;case 65:return s.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;case 66:return this.pushState("NODE"),36;case 67:return this.pushState("NODE"),36;case 68:return this.pushState("NODE"),36;case 69:return this.pushState("NODE"),36;case 70:return this.pushState("NODE"),36;case 71:return this.pushState("NODE"),36;case 72:return this.pushState("NODE"),36;case 73:return s.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;case 74:return this.pushState("BLOCK_ARROW"),s.getLogger().debug("LEX ARR START"),38;case 75:return s.getLogger().debug("Lex: NODE_ID",i.yytext),32;case 76:return s.getLogger().debug("Lex: EOF",i.yytext),8;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:s.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:s.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return s.getLogger().debug("LEX: NODE_DESCR:",i.yytext),"NODE_DESCR";case 84:s.getLogger().debug("LEX POPPING"),this.popState();break;case 85:s.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return i.yytext=i.yytext.replace(/^,\s*/,""),s.getLogger().debug("Lex (right): dir:",i.yytext),"DIR";case 87:return i.yytext=i.yytext.replace(/^,\s*/,""),s.getLogger().debug("Lex (left):",i.yytext),"DIR";case 88:return i.yytext=i.yytext.replace(/^,\s*/,""),s.getLogger().debug("Lex (x):",i.yytext),"DIR";case 89:return i.yytext=i.yytext.replace(/^,\s*/,""),s.getLogger().debug("Lex (y):",i.yytext),"DIR";case 90:return i.yytext=i.yytext.replace(/^,\s*/,""),s.getLogger().debug("Lex (up):",i.yytext),"DIR";case 91:return i.yytext=i.yytext.replace(/^,\s*/,""),s.getLogger().debug("Lex (down):",i.yytext),"DIR";case 92:return i.yytext="]>",s.getLogger().debug("Lex (ARROW_DIR end):",i.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";case 93:return s.getLogger().debug("Lex: LINK","#"+i.yytext+"#"),15;case 94:return s.getLogger().debug("Lex: LINK",i.yytext),15;case 95:return s.getLogger().debug("Lex: LINK",i.yytext),15;case 96:return s.getLogger().debug("Lex: LINK",i.yytext),15;case 97:return s.getLogger().debug("Lex: START_LINK",i.yytext),this.pushState("LLABEL"),16;case 98:return s.getLogger().debug("Lex: START_LINK",i.yytext),this.pushState("LLABEL"),16;case 99:return s.getLogger().debug("Lex: START_LINK",i.yytext),this.pushState("LLABEL"),16;case 100:this.pushState("md_string");break;case 101:return s.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";case 102:return this.popState(),s.getLogger().debug("Lex: LINK","#"+i.yytext+"#"),15;case 103:return this.popState(),s.getLogger().debug("Lex: LINK",i.yytext),15;case 104:return this.popState(),s.getLogger().debug("Lex: LINK",i.yytext),15;case 105:return s.getLogger().debug("Lex: COLON",i.yytext),i.yytext=i.yytext.slice(1),27}},rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return D}();L.lexer=A;function N(){this.yy={}}return N.prototype=L,L.Parser=N,new N}();re.parser=re;var Ye=re,O={},ae=[],V={},ke="color",Ne="fill",We="bgFill",Oe=",",je=ie(),U={},Ve=e=>_e.sanitizeText(e,je),Ue=function(e,a=""){U[e]===void 0&&(U[e]={id:e,styles:[],textStyles:[]});let h=U[e];a?.split(Oe).forEach(c=>{let n=c.replace(/([^;]*);/,"$1").trim();if(c.match(ke)){let l=n.replace(Ne,We).replace(ke,Ne);h.textStyles.push(l)}h.styles.push(n)})},Xe=function(e,a=""){let h=O[e];a!=null&&(h.styles=a.split(Oe))},Ge=function(e,a){e.split(",").forEach(function(h){let c=O[h];if(c===void 0){let n=h.trim();O[n]={id:n,type:"na",children:[]},c=O[n]}c.classes||(c.classes=[]),c.classes.push(a)})},Te=(e,a)=>{let h=e.flat(),c=[];for(let n of h){if(n.label&&(n.label=Ve(n.label)),n.type==="classDef"){Ue(n.id,n.css);continue}if(n.type==="applyClass"){Ge(n.id,n?.styleClass||"");continue}if(n.type==="applyStyles"){n?.stylesStr&&Xe(n.id,n?.stylesStr);continue}if(n.type==="column-setting")a.columns=n.columns||-1;else if(n.type==="edge")V[n.id]?V[n.id]++:V[n.id]=1,n.id=V[n.id]+"-"+n.id,ae.push(n);else{n.label||(n.type==="composite"?n.label="":n.label=n.id);let g=!O[n.id];if(g?O[n.id]=n:(n.type!=="na"&&(O[n.id].type=n.type),n.label!==n.id&&(O[n.id].label=n.label)),n.children&&Te(n.children,n),n.type==="space"){let l=n.width||1;for(let f=0;f{S.debug("Clear called"),we(),X={id:"root",type:"composite",children:[],columns:-1},O={root:X},le=[],U={},ae=[],V={}};function qe(e){switch(S.debug("typeStr2Type",e),e){case"[]":return"square";case"()":return S.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function Ze(e){switch(S.debug("typeStr2Type",e),e){case"==":return"thick";default:return"normal"}}function Je(e){switch(e.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}var Ie=0,Qe=()=>(Ie++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Ie),$e=e=>{X.children=e,Te(e,X),le=X.children},et=e=>{let a=O[e];return a?a.columns?a.columns:a.children?a.children.length:-1:-1},tt=()=>[...Object.values(O)],st=()=>le||[],it=()=>ae,rt=e=>O[e],nt=e=>{O[e.id]=e},at=()=>console,lt=function(){return U},ot={getConfig:()=>q().block,typeStr2Type:qe,edgeTypeStr2Type:Ze,edgeStrToEdgeData:Je,getLogger:at,getBlocksFlat:tt,getBlocks:st,getEdges:it,setHierarchy:$e,getBlock:rt,setBlock:nt,getColumns:et,getClasses:lt,clear:He,generateId:Qe},ct=ot,Z=(e,a)=>{let h=ge,c=h(e,"r"),n=h(e,"g"),g=h(e,"b");return de(c,n,g,a)},ut=e=>`.label { + font-family: ${e.fontFamily}; + color: ${e.nodeTextColor||e.textColor}; + } + .cluster-label text { + fill: ${e.titleColor}; + } + .cluster-label span,p { + color: ${e.titleColor}; + } + + + + .label text,span,p { + fill: ${e.nodeTextColor||e.textColor}; + color: ${e.nodeTextColor||e.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${e.arrowheadColor}; + } + + .edgePath .path { + stroke: ${e.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${e.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${e.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${e.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${Z(e.edgeLabelBackground,.5)}; + // background-color: + } + + .node .cluster { + // fill: ${Z(e.mainBkg,.5)}; + fill: ${Z(e.clusterBkg,.5)}; + stroke: ${Z(e.clusterBorder,.2)}; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + stroke-width: 1px; + } + + .cluster text { + fill: ${e.titleColor}; + } + + .cluster span,p { + color: ${e.titleColor}; + } + /* .cluster div { + color: ${e.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${e.fontFamily}; + font-size: 12px; + background: ${e.tertiaryColor}; + border: 1px solid ${e.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${e.textColor}; + } +`,ht=ut;function ze(e,a,h=!1){var c,n,g;let l=e,f="default";(((c=l?.classes)==null?void 0:c.length)||0)>0&&(f=(l?.classes||[]).join(" ")),f=f+" flowchart-label";let b=0,p="",x;switch(l.type){case"round":b=5,p="rect";break;case"composite":b=0,p="composite",x=0;break;case"square":p="rect";break;case"diamond":p="question";break;case"hexagon":p="hexagon";break;case"block_arrow":p="block_arrow";break;case"odd":p="rect_left_inv_arrow";break;case"lean_right":p="lean_right";break;case"lean_left":p="lean_left";break;case"trapezoid":p="trapezoid";break;case"inv_trapezoid":p="inv_trapezoid";break;case"rect_left_inv_arrow":p="rect_left_inv_arrow";break;case"circle":p="circle";break;case"ellipse":p="ellipse";break;case"stadium":p="stadium";break;case"subroutine":p="subroutine";break;case"cylinder":p="cylinder";break;case"group":p="rect";break;case"doublecircle":p="doublecircle";break;default:p="rect"}let y=ye(l?.styles||[]),T=l.label,v=l.size||{width:0,height:0,x:0,y:0};return{labelStyle:y.labelStyle,shape:p,labelText:T,rx:b,ry:b,class:f,style:y.style,id:l.id,directions:l.directions,width:v.width,height:v.height,x:v.x,y:v.y,positioned:h,intersect:void 0,type:l.type,padding:x??(((g=(n=q())==null?void 0:n.block)==null?void 0:g.padding)||0)}}async function dt(e,a,h){let c=ze(a,h,!1);if(c.type==="group")return;let n=await se(e,c),g=n.node().getBBox(),l=h.getBlock(c.id);l.size={width:g.width,height:g.height,x:0,y:0,node:n},h.setBlock(l),n.remove()}async function gt(e,a,h){let c=ze(a,h,!0);h.getBlock(c.id).type!=="space"&&(await se(e,c),a.intersect=c?.intersect,xe(c))}async function oe(e,a,h,c){for(let n of a)await c(e,n,h),n.children&&await oe(e,n.children,h,c)}async function pt(e,a,h){await oe(e,a,h,dt)}async function ft(e,a,h){await oe(e,a,h,gt)}async function bt(e,a,h,c,n){let g=new fe({multigraph:!0,compound:!0});g.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let l of h)l.size&&g.setNode(l.id,{width:l.size.width,height:l.size.height,intersect:l.intersect});for(let l of a)if(l.start&&l.end){let f=c.getBlock(l.start),b=c.getBlock(l.end);if(f?.size&&b?.size){let p=f.size,x=b.size,y=[{x:p.x,y:p.y},{x:p.x+(x.x-p.x)/2,y:p.y+(x.y-p.y)/2},{x:x.x,y:x.y}];await me(e,{v:l.start,w:l.end,name:l.id},{...l,arrowTypeEnd:l.arrowTypeEnd,arrowTypeStart:l.arrowTypeStart,points:y,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",g,n),l.label&&(await Se(e,{...l,label:l.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:l.arrowTypeEnd,arrowTypeStart:l.arrowTypeStart,points:y,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),await Le({...l,x:y[1].x,y:y[1].y},{originalPath:y}))}}}var _=((ve=(De=ie())==null?void 0:De.block)==null?void 0:ve.padding)||8;function xt(e,a){if(e===0||!Number.isInteger(e))throw new Error("Columns must be an integer !== 0.");if(a<0||!Number.isInteger(a))throw new Error("Position must be a non-negative integer."+a);if(e<0)return{px:a,py:0};if(e===1)return{px:0,py:a};let h=a%e,c=Math.floor(a/e);return{px:h,py:c}}var St=e=>{let a=0,h=0;for(let c of e.children){let{width:n,height:g,x:l,y:f}=c.size||{width:0,height:0,x:0,y:0};S.debug("getMaxChildSize abc95 child:",c.id,"width:",n,"height:",g,"x:",l,"y:",f,c.type),c.type!=="space"&&(n>a&&(a=n/(e.widthInColumns||1)),g>h&&(h=g))}return{width:a,height:h}};function ne(e,a,h=0,c=0){var n,g,l,f,b,p,x,y,T,v,k;S.debug("setBlockSizes abc95 (start)",e.id,(n=e?.size)==null?void 0:n.x,"block width =",e?.size,"sieblingWidth",h),(g=e?.size)!=null&&g.width||(e.size={width:h,height:c,x:0,y:0});let E=0,L=0;if(((l=e.children)==null?void 0:l.length)>0){for(let d of e.children)ne(d,a);let A=St(e);E=A.width,L=A.height,S.debug("setBlockSizes abc95 maxWidth of",e.id,":s children is ",E,L);for(let d of e.children)d.size&&(S.debug(`abc95 Setting size of children of ${e.id} id=${d.id} ${E} ${L} ${d.size}`),d.size.width=E*(d.widthInColumns||1)+_*((d.widthInColumns||1)-1),d.size.height=L,d.size.x=0,d.size.y=0,S.debug(`abc95 updating size of ${e.id} children child:${d.id} maxWidth:${E} maxHeight:${L}`));for(let d of e.children)ne(d,a,E,L);let N=e.columns||-1,D=0;for(let d of e.children)D+=d.widthInColumns||1;let o=e.children.length;N>0&&N0?Math.min(e.children.length,N):e.children.length;if(d>0){let t=(i-d*_-_)/d;S.debug("abc95 (growing to fit) width",e.id,i,(x=e.size)==null?void 0:x.width,t);for(let m of e.children)m.size&&(m.size.width=t)}}e.size={width:i,height:u,x:0,y:0}}S.debug("setBlockSizes abc94 (done)",e.id,(y=e?.size)==null?void 0:y.x,(T=e?.size)==null?void 0:T.width,(v=e?.size)==null?void 0:v.y,(k=e?.size)==null?void 0:k.height)}function Ce(e,a){var h,c,n,g,l,f,b,p,x,y,T,v,k,E,L,A,N;S.debug(`abc85 layout blocks (=>layoutBlocks) ${e.id} x: ${(h=e?.size)==null?void 0:h.x} y: ${(c=e?.size)==null?void 0:c.y} width: ${(n=e?.size)==null?void 0:n.width}`);let D=e.columns||-1;if(S.debug("layoutBlocks columns abc95",e.id,"=>",D,e),e.children&&e.children.length>0){let o=((l=(g=e?.children[0])==null?void 0:g.size)==null?void 0:l.width)||0,s=e.children.length*o+(e.children.length-1)*_;S.debug("widthOfChildren 88",s,"posX");let i=0;S.debug("abc91 block?.size?.x",e.id,(f=e?.size)==null?void 0:f.x);let u=(b=e?.size)!=null&&b.x?((p=e?.size)==null?void 0:p.x)+(-((x=e?.size)==null?void 0:x.width)/2||0):-_,d=0;for(let t of e.children){let m=e;if(!t.size)continue;let{width:r,height:R}=t.size,{px:Y,py:F}=xt(D,i);if(F!=d&&(d=F,u=(y=e?.size)!=null&&y.x?((T=e?.size)==null?void 0:T.x)+(-((v=e?.size)==null?void 0:v.width)/2||0):-_,S.debug("New row in layout for block",e.id," and child ",t.id,d)),S.debug(`abc89 layout blocks (child) id: ${t.id} Pos: ${i} (px, py) ${Y},${F} (${(k=m?.size)==null?void 0:k.x},${(E=m?.size)==null?void 0:E.y}) parent: ${m.id} width: ${r}${_}`),m.size){let C=r/2;t.size.x=u+_+C,S.debug(`abc91 layout blocks (calc) px, pyid:${t.id} startingPos=X${u} new startingPosX${t.size.x} ${C} padding=${_} width=${r} halfWidth=${C} => x:${t.size.x} y:${t.size.y} ${t.widthInColumns} (width * (child?.w || 1)) / 2 ${r*(t?.widthInColumns||1)/2}`),u=t.size.x+C,t.size.y=m.size.y-m.size.height/2+F*(R+_)+R/2+_,S.debug(`abc88 layout blocks (calc) px, pyid:${t.id}startingPosX${u}${_}${C}=>x:${t.size.x}y:${t.size.y}${t.widthInColumns}(width * (child?.w || 1)) / 2${r*(t?.widthInColumns||1)/2}`)}t.children&&Ce(t),i+=t?.widthInColumns||1,S.debug("abc88 columnsPos",t,i)}}S.debug(`layout blocks (<==layoutBlocks) ${e.id} x: ${(L=e?.size)==null?void 0:L.x} y: ${(A=e?.size)==null?void 0:A.y} width: ${(N=e?.size)==null?void 0:N.width}`)}function Ae(e,{minX:a,minY:h,maxX:c,maxY:n}={minX:0,minY:0,maxX:0,maxY:0}){if(e.size&&e.id!=="root"){let{x:g,y:l,width:f,height:b}=e.size;g-f/2c&&(c=g+f/2),l+b/2>n&&(n=l+b/2)}if(e.children)for(let g of e.children)({minX:a,minY:h,maxX:c,maxY:n}=Ae(g,{minX:a,minY:h,maxX:c,maxY:n}));return{minX:a,minY:h,maxX:c,maxY:n}}function Lt(e){let a=e.getBlock("root");if(!a)return;ne(a,e,0,0),Ce(a),S.debug("getBlocks",JSON.stringify(a,null,2));let{minX:h,minY:c,maxX:n,maxY:g}=Ae(a),l=g-c,f=n-h;return{x:h,y:c,width:f,height:l}}var mt=function(e,a){return a.db.getClasses()},_t=async function(e,a,h,c){let{securityLevel:n,block:g}=q(),l=c.db,f;n==="sandbox"&&(f=j("#i"+a));let b=n==="sandbox"?j(f.nodes()[0].contentDocument.body):j("body"),p=n==="sandbox"?b.select(`[id="${a}"]`):j(`[id="${a}"]`);be(p,["point","circle","cross"],c.type,a);let y=l.getBlocks(),T=l.getBlocksFlat(),v=l.getEdges(),k=p.insert("g").attr("class","block");await pt(k,y,l);let E=Lt(l);if(await ft(k,y,l),await bt(k,v,T,l,a),E){let L=E,A=Math.max(1,Math.round(.125*(L.width/L.height))),N=L.height+A+10,D=L.width+10,{useMaxWidth:o}=g;Ee(p,N,D,!!o),S.debug("Here Bounds",E,L),p.attr("viewBox",`${L.x-5} ${L.y-5} ${L.width+10} ${L.height+10}`)}ue(he)},yt={draw:_t,getClasses:mt},Ct={parser:Ye,db:ct,renderer:yt,styles:ht};export{Ct as diagram}; +//# sourceMappingURL=blockDiagram-9f4a6865-KQGFBXS7.min.js.map diff --git a/public/blockDiagram-9f4a6865-KQGFBXS7.min.js.map b/public/blockDiagram-9f4a6865-KQGFBXS7.min.js.map new file mode 100644 index 000000000..b9b188a63 --- /dev/null +++ b/public/blockDiagram-9f4a6865-KQGFBXS7.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/mermaid/dist/blockDiagram-9f4a6865.js"], + "sourcesContent": ["var _a, _b;\nimport { c as getConfig, F as getConfig$1, l as log, v as clear$1, e as common, k as getStylesFromArray, i as configureSvgSize } from \"./mermaid-6dc72991.js\";\nimport clone from \"lodash-es/clone.js\";\nimport * as khroma from \"khroma\";\nimport { h as insertEdge, f as insertEdgeLabel, j as positionEdgeLabel, e as insertNode, p as positionNode, a as insertMarkers } from \"./edges-066a5561.js\";\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nimport { select, scaleOrdinal, schemeTableau10 } from \"d3\";\nimport \"ts-dedent\";\nimport \"dayjs\";\nimport \"@braintree/sanitize-url\";\nimport \"dompurify\";\nimport \"lodash-es/memoize.js\";\nimport \"lodash-es/merge.js\";\nimport \"stylis\";\nimport \"lodash-es/isEmpty.js\";\nimport \"./createText-ca0c5216.js\";\nimport \"mdast-util-from-markdown\";\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 7], $V1 = [1, 13], $V2 = [1, 14], $V3 = [1, 15], $V4 = [1, 19], $V5 = [1, 16], $V6 = [1, 17], $V7 = [1, 18], $V8 = [8, 30], $V9 = [8, 21, 28, 29, 30, 31, 32, 40, 44, 47], $Va = [1, 23], $Vb = [1, 24], $Vc = [8, 15, 16, 21, 28, 29, 30, 31, 32, 40, 44, 47], $Vd = [8, 15, 16, 21, 27, 28, 29, 30, 31, 32, 40, 44, 47], $Ve = [1, 49];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"spaceLines\": 3, \"SPACELINE\": 4, \"NL\": 5, \"separator\": 6, \"SPACE\": 7, \"EOF\": 8, \"start\": 9, \"BLOCK_DIAGRAM_KEY\": 10, \"document\": 11, \"stop\": 12, \"statement\": 13, \"link\": 14, \"LINK\": 15, \"START_LINK\": 16, \"LINK_LABEL\": 17, \"STR\": 18, \"nodeStatement\": 19, \"columnsStatement\": 20, \"SPACE_BLOCK\": 21, \"blockStatement\": 22, \"classDefStatement\": 23, \"cssClassStatement\": 24, \"styleStatement\": 25, \"node\": 26, \"SIZE\": 27, \"COLUMNS\": 28, \"id-block\": 29, \"end\": 30, \"block\": 31, \"NODE_ID\": 32, \"nodeShapeNLabel\": 33, \"dirList\": 34, \"DIR\": 35, \"NODE_DSTART\": 36, \"NODE_DEND\": 37, \"BLOCK_ARROW_START\": 38, \"BLOCK_ARROW_END\": 39, \"classDef\": 40, \"CLASSDEF_ID\": 41, \"CLASSDEF_STYLEOPTS\": 42, \"DEFAULT\": 43, \"class\": 44, \"CLASSENTITY_IDS\": 45, \"STYLECLASS\": 46, \"style\": 47, \"STYLE_ENTITY_IDS\": 48, \"STYLE_DEFINITION_DATA\": 49, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"SPACELINE\", 5: \"NL\", 7: \"SPACE\", 8: \"EOF\", 10: \"BLOCK_DIAGRAM_KEY\", 15: \"LINK\", 16: \"START_LINK\", 17: \"LINK_LABEL\", 18: \"STR\", 21: \"SPACE_BLOCK\", 27: \"SIZE\", 28: \"COLUMNS\", 29: \"id-block\", 30: \"end\", 31: \"block\", 32: \"NODE_ID\", 35: \"DIR\", 36: \"NODE_DSTART\", 37: \"NODE_DEND\", 38: \"BLOCK_ARROW_START\", 39: \"BLOCK_ARROW_END\", 40: \"classDef\", 41: \"CLASSDEF_ID\", 42: \"CLASSDEF_STYLEOPTS\", 43: \"DEFAULT\", 44: \"class\", 45: \"CLASSENTITY_IDS\", 46: \"STYLECLASS\", 47: \"style\", 48: \"STYLE_ENTITY_IDS\", 49: \"STYLE_DEFINITION_DATA\" },\n productions_: [0, [3, 1], [3, 2], [3, 2], [6, 1], [6, 1], [6, 1], [9, 3], [12, 1], [12, 1], [12, 2], [12, 2], [11, 1], [11, 2], [14, 1], [14, 4], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [19, 3], [19, 2], [19, 1], [20, 1], [22, 4], [22, 3], [26, 1], [26, 2], [34, 1], [34, 2], [33, 3], [33, 4], [23, 3], [23, 3], [24, 3], [25, 3]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 4:\n yy.getLogger().debug(\"Rule: separator (NL) \");\n break;\n case 5:\n yy.getLogger().debug(\"Rule: separator (Space) \");\n break;\n case 6:\n yy.getLogger().debug(\"Rule: separator (EOF) \");\n break;\n case 7:\n yy.getLogger().debug(\"Rule: hierarchy: \", $$[$0 - 1]);\n yy.setHierarchy($$[$0 - 1]);\n break;\n case 8:\n yy.getLogger().debug(\"Stop NL \");\n break;\n case 9:\n yy.getLogger().debug(\"Stop EOF \");\n break;\n case 10:\n yy.getLogger().debug(\"Stop NL2 \");\n break;\n case 11:\n yy.getLogger().debug(\"Stop EOF2 \");\n break;\n case 12:\n yy.getLogger().debug(\"Rule: statement: \", $$[$0]);\n typeof $$[$0].length === \"number\" ? this.$ = $$[$0] : this.$ = [$$[$0]];\n break;\n case 13:\n yy.getLogger().debug(\"Rule: statement #2: \", $$[$0 - 1]);\n this.$ = [$$[$0 - 1]].concat($$[$0]);\n break;\n case 14:\n yy.getLogger().debug(\"Rule: link: \", $$[$0], yytext);\n this.$ = { edgeTypeStr: $$[$0], label: \"\" };\n break;\n case 15:\n yy.getLogger().debug(\"Rule: LABEL link: \", $$[$0 - 3], $$[$0 - 1], $$[$0]);\n this.$ = { edgeTypeStr: $$[$0], label: $$[$0 - 1] };\n break;\n case 18:\n const num = parseInt($$[$0]);\n const spaceId = yy.generateId();\n this.$ = { id: spaceId, type: \"space\", label: \"\", width: num, children: [] };\n break;\n case 23:\n yy.getLogger().debug(\"Rule: (nodeStatement link node) \", $$[$0 - 2], $$[$0 - 1], $$[$0], \" typestr: \", $$[$0 - 1].edgeTypeStr);\n const edgeData = yy.edgeStrToEdgeData($$[$0 - 1].edgeTypeStr);\n this.$ = [\n { id: $$[$0 - 2].id, label: $$[$0 - 2].label, type: $$[$0 - 2].type, directions: $$[$0 - 2].directions },\n { id: $$[$0 - 2].id + \"-\" + $$[$0].id, start: $$[$0 - 2].id, end: $$[$0].id, label: $$[$0 - 1].label, type: \"edge\", directions: $$[$0].directions, arrowTypeEnd: edgeData, arrowTypeStart: \"arrow_open\" },\n { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions }\n ];\n break;\n case 24:\n yy.getLogger().debug(\"Rule: nodeStatement (abc88 node size) \", $$[$0 - 1], $$[$0]);\n this.$ = { id: $$[$0 - 1].id, label: $$[$0 - 1].label, type: yy.typeStr2Type($$[$0 - 1].typeStr), directions: $$[$0 - 1].directions, widthInColumns: parseInt($$[$0], 10) };\n break;\n case 25:\n yy.getLogger().debug(\"Rule: nodeStatement (node) \", $$[$0]);\n this.$ = { id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions, widthInColumns: 1 };\n break;\n case 26:\n yy.getLogger().debug(\"APA123\", this ? this : \"na\");\n yy.getLogger().debug(\"COLUMNS: \", $$[$0]);\n this.$ = { type: \"column-setting\", columns: $$[$0] === \"auto\" ? -1 : parseInt($$[$0]) };\n break;\n case 27:\n yy.getLogger().debug(\"Rule: id-block statement : \", $$[$0 - 2], $$[$0 - 1]);\n yy.generateId();\n this.$ = { ...$$[$0 - 2], type: \"composite\", children: $$[$0 - 1] };\n break;\n case 28:\n yy.getLogger().debug(\"Rule: blockStatement : \", $$[$0 - 2], $$[$0 - 1], $$[$0]);\n const id = yy.generateId();\n this.$ = { id, type: \"composite\", label: \"\", children: $$[$0 - 1] };\n break;\n case 29:\n yy.getLogger().debug(\"Rule: node (NODE_ID separator): \", $$[$0]);\n this.$ = { id: $$[$0] };\n break;\n case 30:\n yy.getLogger().debug(\"Rule: node (NODE_ID nodeShapeNLabel separator): \", $$[$0 - 1], $$[$0]);\n this.$ = { id: $$[$0 - 1], label: $$[$0].label, typeStr: $$[$0].typeStr, directions: $$[$0].directions };\n break;\n case 31:\n yy.getLogger().debug(\"Rule: dirList: \", $$[$0]);\n this.$ = [$$[$0]];\n break;\n case 32:\n yy.getLogger().debug(\"Rule: dirList: \", $$[$0 - 1], $$[$0]);\n this.$ = [$$[$0 - 1]].concat($$[$0]);\n break;\n case 33:\n yy.getLogger().debug(\"Rule: nodeShapeNLabel: \", $$[$0 - 2], $$[$0 - 1], $$[$0]);\n this.$ = { typeStr: $$[$0 - 2] + $$[$0], label: $$[$0 - 1] };\n break;\n case 34:\n yy.getLogger().debug(\"Rule: BLOCK_ARROW nodeShapeNLabel: \", $$[$0 - 3], $$[$0 - 2], \" #3:\", $$[$0 - 1], $$[$0]);\n this.$ = { typeStr: $$[$0 - 3] + $$[$0], label: $$[$0 - 2], directions: $$[$0 - 1] };\n break;\n case 35:\n case 36:\n this.$ = { type: \"classDef\", id: $$[$0 - 1].trim(), css: $$[$0].trim() };\n break;\n case 37:\n this.$ = { type: \"applyClass\", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };\n break;\n case 38:\n this.$ = { type: \"applyStyles\", id: $$[$0 - 1].trim(), stylesStr: $$[$0].trim() };\n break;\n }\n },\n table: [{ 9: 1, 10: [1, 2] }, { 1: [3] }, { 11: 3, 13: 4, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 8: [1, 20] }, o($V8, [2, 12], { 13: 4, 19: 5, 20: 6, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 11: 21, 21: $V0, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }), o($V9, [2, 16], { 14: 22, 15: $Va, 16: $Vb }), o($V9, [2, 17]), o($V9, [2, 18]), o($V9, [2, 19]), o($V9, [2, 20]), o($V9, [2, 21]), o($V9, [2, 22]), o($Vc, [2, 25], { 27: [1, 25] }), o($V9, [2, 26]), { 19: 26, 26: 12, 32: $V4 }, { 11: 27, 13: 4, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 41: [1, 28], 43: [1, 29] }, { 45: [1, 30] }, { 48: [1, 31] }, o($Vd, [2, 29], { 33: 32, 36: [1, 33], 38: [1, 34] }), { 1: [2, 7] }, o($V8, [2, 13]), { 26: 35, 32: $V4 }, { 32: [2, 14] }, { 17: [1, 36] }, o($Vc, [2, 24]), { 11: 37, 13: 4, 14: 22, 15: $Va, 16: $Vb, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 30: [1, 38] }, { 42: [1, 39] }, { 42: [1, 40] }, { 46: [1, 41] }, { 49: [1, 42] }, o($Vd, [2, 30]), { 18: [1, 43] }, { 18: [1, 44] }, o($Vc, [2, 23]), { 18: [1, 45] }, { 30: [1, 46] }, o($V9, [2, 28]), o($V9, [2, 35]), o($V9, [2, 36]), o($V9, [2, 37]), o($V9, [2, 38]), { 37: [1, 47] }, { 34: 48, 35: $Ve }, { 15: [1, 50] }, o($V9, [2, 27]), o($Vd, [2, 33]), { 39: [1, 51] }, { 34: 52, 35: $Ve, 39: [2, 31] }, { 32: [2, 15] }, o($Vd, [2, 34]), { 39: [2, 32] }],\n defaultActions: { 20: [2, 7], 23: [2, 14], 50: [2, 15], 52: [2, 32] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {},\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n return 10;\n case 1:\n yy.getLogger().debug(\"Found space-block\");\n return 31;\n case 2:\n yy.getLogger().debug(\"Found nl-block\");\n return 31;\n case 3:\n yy.getLogger().debug(\"Found space-block\");\n return 29;\n case 4:\n yy.getLogger().debug(\".\", yy_.yytext);\n break;\n case 5:\n yy.getLogger().debug(\"_\", yy_.yytext);\n break;\n case 6:\n return 5;\n case 7:\n yy_.yytext = -1;\n return 28;\n case 8:\n yy_.yytext = yy_.yytext.replace(/columns\\s+/, \"\");\n yy.getLogger().debug(\"COLUMNS (LEX)\", yy_.yytext);\n return 28;\n case 9:\n this.pushState(\"md_string\");\n break;\n case 10:\n return \"MD_STR\";\n case 11:\n this.popState();\n break;\n case 12:\n this.pushState(\"string\");\n break;\n case 13:\n yy.getLogger().debug(\"LEX: POPPING STR:\", yy_.yytext);\n this.popState();\n break;\n case 14:\n yy.getLogger().debug(\"LEX: STR end:\", yy_.yytext);\n return \"STR\";\n case 15:\n yy_.yytext = yy_.yytext.replace(/space\\:/, \"\");\n yy.getLogger().debug(\"SPACE NUM (LEX)\", yy_.yytext);\n return 21;\n case 16:\n yy_.yytext = \"1\";\n yy.getLogger().debug(\"COLUMNS (LEX)\", yy_.yytext);\n return 21;\n case 17:\n return 43;\n case 18:\n return \"LINKSTYLE\";\n case 19:\n return \"INTERPOLATE\";\n case 20:\n this.pushState(\"CLASSDEF\");\n return 40;\n case 21:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return \"DEFAULT_CLASSDEF_ID\";\n case 22:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return 41;\n case 23:\n this.popState();\n return 42;\n case 24:\n this.pushState(\"CLASS\");\n return 44;\n case 25:\n this.popState();\n this.pushState(\"CLASS_STYLE\");\n return 45;\n case 26:\n this.popState();\n return 46;\n case 27:\n this.pushState(\"STYLE_STMNT\");\n return 47;\n case 28:\n this.popState();\n this.pushState(\"STYLE_DEFINITION\");\n return 48;\n case 29:\n this.popState();\n return 49;\n case 30:\n this.pushState(\"acc_title\");\n return \"acc_title\";\n case 31:\n this.popState();\n return \"acc_title_value\";\n case 32:\n this.pushState(\"acc_descr\");\n return \"acc_descr\";\n case 33:\n this.popState();\n return \"acc_descr_value\";\n case 34:\n this.pushState(\"acc_descr_multiline\");\n break;\n case 35:\n this.popState();\n break;\n case 36:\n return \"acc_descr_multiline_value\";\n case 37:\n return 30;\n case 38:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n case 39:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n case 40:\n this.popState();\n yy.getLogger().debug(\"Lex: ))\");\n return \"NODE_DEND\";\n case 41:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n case 42:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n case 43:\n this.popState();\n yy.getLogger().debug(\"Lex: (-\");\n return \"NODE_DEND\";\n case 44:\n this.popState();\n yy.getLogger().debug(\"Lex: -)\");\n return \"NODE_DEND\";\n case 45:\n this.popState();\n yy.getLogger().debug(\"Lex: ((\");\n return \"NODE_DEND\";\n case 46:\n this.popState();\n yy.getLogger().debug(\"Lex: ]]\");\n return \"NODE_DEND\";\n case 47:\n this.popState();\n yy.getLogger().debug(\"Lex: (\");\n return \"NODE_DEND\";\n case 48:\n this.popState();\n yy.getLogger().debug(\"Lex: ])\");\n return \"NODE_DEND\";\n case 49:\n this.popState();\n yy.getLogger().debug(\"Lex: /]\");\n return \"NODE_DEND\";\n case 50:\n this.popState();\n yy.getLogger().debug(\"Lex: /]\");\n return \"NODE_DEND\";\n case 51:\n this.popState();\n yy.getLogger().debug(\"Lex: )]\");\n return \"NODE_DEND\";\n case 52:\n this.popState();\n yy.getLogger().debug(\"Lex: )\");\n return \"NODE_DEND\";\n case 53:\n this.popState();\n yy.getLogger().debug(\"Lex: ]>\");\n return \"NODE_DEND\";\n case 54:\n this.popState();\n yy.getLogger().debug(\"Lex: ]\");\n return \"NODE_DEND\";\n case 55:\n yy.getLogger().debug(\"Lexa: -)\");\n this.pushState(\"NODE\");\n return 36;\n case 56:\n yy.getLogger().debug(\"Lexa: (-\");\n this.pushState(\"NODE\");\n return 36;\n case 57:\n yy.getLogger().debug(\"Lexa: ))\");\n this.pushState(\"NODE\");\n return 36;\n case 58:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 36;\n case 59:\n yy.getLogger().debug(\"Lex: (((\");\n this.pushState(\"NODE\");\n return 36;\n case 60:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 36;\n case 61:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 36;\n case 62:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 36;\n case 63:\n yy.getLogger().debug(\"Lexc: >\");\n this.pushState(\"NODE\");\n return 36;\n case 64:\n yy.getLogger().debug(\"Lexa: ([\");\n this.pushState(\"NODE\");\n return 36;\n case 65:\n yy.getLogger().debug(\"Lexa: )\");\n this.pushState(\"NODE\");\n return 36;\n case 66:\n this.pushState(\"NODE\");\n return 36;\n case 67:\n this.pushState(\"NODE\");\n return 36;\n case 68:\n this.pushState(\"NODE\");\n return 36;\n case 69:\n this.pushState(\"NODE\");\n return 36;\n case 70:\n this.pushState(\"NODE\");\n return 36;\n case 71:\n this.pushState(\"NODE\");\n return 36;\n case 72:\n this.pushState(\"NODE\");\n return 36;\n case 73:\n yy.getLogger().debug(\"Lexa: [\");\n this.pushState(\"NODE\");\n return 36;\n case 74:\n this.pushState(\"BLOCK_ARROW\");\n yy.getLogger().debug(\"LEX ARR START\");\n return 38;\n case 75:\n yy.getLogger().debug(\"Lex: NODE_ID\", yy_.yytext);\n return 32;\n case 76:\n yy.getLogger().debug(\"Lex: EOF\", yy_.yytext);\n return 8;\n case 77:\n this.pushState(\"md_string\");\n break;\n case 78:\n this.pushState(\"md_string\");\n break;\n case 79:\n return \"NODE_DESCR\";\n case 80:\n this.popState();\n break;\n case 81:\n yy.getLogger().debug(\"Lex: Starting string\");\n this.pushState(\"string\");\n break;\n case 82:\n yy.getLogger().debug(\"LEX ARR: Starting string\");\n this.pushState(\"string\");\n break;\n case 83:\n yy.getLogger().debug(\"LEX: NODE_DESCR:\", yy_.yytext);\n return \"NODE_DESCR\";\n case 84:\n yy.getLogger().debug(\"LEX POPPING\");\n this.popState();\n break;\n case 85:\n yy.getLogger().debug(\"Lex: =>BAE\");\n this.pushState(\"ARROW_DIR\");\n break;\n case 86:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (right): dir:\", yy_.yytext);\n return \"DIR\";\n case 87:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (left):\", yy_.yytext);\n return \"DIR\";\n case 88:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (x):\", yy_.yytext);\n return \"DIR\";\n case 89:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (y):\", yy_.yytext);\n return \"DIR\";\n case 90:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (up):\", yy_.yytext);\n return \"DIR\";\n case 91:\n yy_.yytext = yy_.yytext.replace(/^,\\s*/, \"\");\n yy.getLogger().debug(\"Lex (down):\", yy_.yytext);\n return \"DIR\";\n case 92:\n yy_.yytext = \"]>\";\n yy.getLogger().debug(\"Lex (ARROW_DIR end):\", yy_.yytext);\n this.popState();\n this.popState();\n return \"BLOCK_ARROW_END\";\n case 93:\n yy.getLogger().debug(\"Lex: LINK\", \"#\" + yy_.yytext + \"#\");\n return 15;\n case 94:\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n case 95:\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n case 96:\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n case 97:\n yy.getLogger().debug(\"Lex: START_LINK\", yy_.yytext);\n this.pushState(\"LLABEL\");\n return 16;\n case 98:\n yy.getLogger().debug(\"Lex: START_LINK\", yy_.yytext);\n this.pushState(\"LLABEL\");\n return 16;\n case 99:\n yy.getLogger().debug(\"Lex: START_LINK\", yy_.yytext);\n this.pushState(\"LLABEL\");\n return 16;\n case 100:\n this.pushState(\"md_string\");\n break;\n case 101:\n yy.getLogger().debug(\"Lex: Starting string\");\n this.pushState(\"string\");\n return \"LINK_LABEL\";\n case 102:\n this.popState();\n yy.getLogger().debug(\"Lex: LINK\", \"#\" + yy_.yytext + \"#\");\n return 15;\n case 103:\n this.popState();\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n case 104:\n this.popState();\n yy.getLogger().debug(\"Lex: LINK\", yy_.yytext);\n return 15;\n case 105:\n yy.getLogger().debug(\"Lex: COLON\", yy_.yytext);\n yy_.yytext = yy_.yytext.slice(1);\n return 27;\n }\n },\n rules: [/^(?:block-beta\\b)/, /^(?:block\\s+)/, /^(?:block\\n+)/, /^(?:block:)/, /^(?:[\\s]+)/, /^(?:[\\n]+)/, /^(?:((\\u000D\\u000A)|(\\u000A)))/, /^(?:columns\\s+auto\\b)/, /^(?:columns\\s+[\\d]+)/, /^(?:[\"][`])/, /^(?:[^`\"]+)/, /^(?:[`][\"])/, /^(?:[\"])/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:space[:]\\d+)/, /^(?:space\\b)/, /^(?:default\\b)/, /^(?:linkStyle\\b)/, /^(?:interpolate\\b)/, /^(?:classDef\\s+)/, /^(?:DEFAULT\\s+)/, /^(?:\\w+\\s+)/, /^(?:[^\\n]*)/, /^(?:class\\s+)/, /^(?:(\\w+)+((,\\s*\\w+)*))/, /^(?:[^\\n]*)/, /^(?:style\\s+)/, /^(?:(\\w+)+((,\\s*\\w+)*))/, /^(?:[^\\n]*)/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:end\\b\\s*)/, /^(?:\\(\\(\\()/, /^(?:\\)\\)\\))/, /^(?:[\\)]\\))/, /^(?:\\}\\})/, /^(?:\\})/, /^(?:\\(-)/, /^(?:-\\))/, /^(?:\\(\\()/, /^(?:\\]\\])/, /^(?:\\()/, /^(?:\\]\\))/, /^(?:\\\\\\])/, /^(?:\\/\\])/, /^(?:\\)\\])/, /^(?:[\\)])/, /^(?:\\]>)/, /^(?:[\\]])/, /^(?:-\\))/, /^(?:\\(-)/, /^(?:\\)\\))/, /^(?:\\))/, /^(?:\\(\\(\\()/, /^(?:\\(\\()/, /^(?:\\{\\{)/, /^(?:\\{)/, /^(?:>)/, /^(?:\\(\\[)/, /^(?:\\()/, /^(?:\\[\\[)/, /^(?:\\[\\|)/, /^(?:\\[\\()/, /^(?:\\)\\)\\))/, /^(?:\\[\\\\)/, /^(?:\\[\\/)/, /^(?:\\[\\\\)/, /^(?:\\[)/, /^(?:<\\[)/, /^(?:[^\\(\\[\\n\\-\\)\\{\\}\\s\\<\\>:]+)/, /^(?:$)/, /^(?:[\"][`])/, /^(?:[\"][`])/, /^(?:[^`\"]+)/, /^(?:[`][\"])/, /^(?:[\"])/, /^(?:[\"])/, /^(?:[^\"]+)/, /^(?:[\"])/, /^(?:\\]>\\s*\\()/, /^(?:,?\\s*right\\s*)/, /^(?:,?\\s*left\\s*)/, /^(?:,?\\s*x\\s*)/, /^(?:,?\\s*y\\s*)/, /^(?:,?\\s*up\\s*)/, /^(?:,?\\s*down\\s*)/, /^(?:\\)\\s*)/, /^(?:\\s*[xo<]?--+[-xo>]\\s*)/, /^(?:\\s*[xo<]?==+[=xo>]\\s*)/, /^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/, /^(?:\\s*~~[\\~]+\\s*)/, /^(?:\\s*[xo<]?--\\s*)/, /^(?:\\s*[xo<]?==\\s*)/, /^(?:\\s*[xo<]?-\\.\\s*)/, /^(?:[\"][`])/, /^(?:[\"])/, /^(?:\\s*[xo<]?--+[-xo>]\\s*)/, /^(?:\\s*[xo<]?==+[=xo>]\\s*)/, /^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/, /^(?::\\d+)/],\n conditions: { \"STYLE_DEFINITION\": { \"rules\": [29], \"inclusive\": false }, \"STYLE_STMNT\": { \"rules\": [28], \"inclusive\": false }, \"CLASSDEFID\": { \"rules\": [23], \"inclusive\": false }, \"CLASSDEF\": { \"rules\": [21, 22], \"inclusive\": false }, \"CLASS_STYLE\": { \"rules\": [26], \"inclusive\": false }, \"CLASS\": { \"rules\": [25], \"inclusive\": false }, \"LLABEL\": { \"rules\": [100, 101, 102, 103, 104], \"inclusive\": false }, \"ARROW_DIR\": { \"rules\": [86, 87, 88, 89, 90, 91, 92], \"inclusive\": false }, \"BLOCK_ARROW\": { \"rules\": [77, 82, 85], \"inclusive\": false }, \"NODE\": { \"rules\": [38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 78, 81], \"inclusive\": false }, \"md_string\": { \"rules\": [10, 11, 79, 80], \"inclusive\": false }, \"space\": { \"rules\": [], \"inclusive\": false }, \"string\": { \"rules\": [13, 14, 83, 84], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [35, 36], \"inclusive\": false }, \"acc_descr\": { \"rules\": [33], \"inclusive\": false }, \"acc_title\": { \"rules\": [31], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 16, 17, 18, 19, 20, 24, 27, 30, 32, 34, 37, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 93, 94, 95, 96, 97, 98, 99, 105], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nlet blockDatabase = {};\nlet edgeList = [];\nlet edgeCount = {};\nconst COLOR_KEYWORD = \"color\";\nconst FILL_KEYWORD = \"fill\";\nconst BG_FILL = \"bgFill\";\nconst STYLECLASS_SEP = \",\";\nconst config = getConfig();\nlet classes = {};\nconst sanitizeText = (txt) => common.sanitizeText(txt, config);\nconst addStyleClass = function(id, styleAttributes = \"\") {\n if (classes[id] === void 0) {\n classes[id] = { id, styles: [], textStyles: [] };\n }\n const foundClass = classes[id];\n if (styleAttributes !== void 0 && styleAttributes !== null) {\n styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => {\n const fixedAttrib = attrib.replace(/([^;]*);/, \"$1\").trim();\n if (attrib.match(COLOR_KEYWORD)) {\n const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL);\n const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD);\n foundClass.textStyles.push(newStyle2);\n }\n foundClass.styles.push(fixedAttrib);\n });\n }\n};\nconst addStyle2Node = function(id, styles = \"\") {\n const foundBlock = blockDatabase[id];\n if (styles !== void 0 && styles !== null) {\n foundBlock.styles = styles.split(STYLECLASS_SEP);\n }\n};\nconst setCssClass = function(itemIds, cssClassName) {\n itemIds.split(\",\").forEach(function(id) {\n let foundBlock = blockDatabase[id];\n if (foundBlock === void 0) {\n const trimmedId = id.trim();\n blockDatabase[trimmedId] = { id: trimmedId, type: \"na\", children: [] };\n foundBlock = blockDatabase[trimmedId];\n }\n if (!foundBlock.classes) {\n foundBlock.classes = [];\n }\n foundBlock.classes.push(cssClassName);\n });\n};\nconst populateBlockDatabase = (_blockList, parent) => {\n const blockList = _blockList.flat();\n const children = [];\n for (const block of blockList) {\n if (block.label) {\n block.label = sanitizeText(block.label);\n }\n if (block.type === \"classDef\") {\n addStyleClass(block.id, block.css);\n continue;\n }\n if (block.type === \"applyClass\") {\n setCssClass(block.id, (block == null ? void 0 : block.styleClass) || \"\");\n continue;\n }\n if (block.type === \"applyStyles\") {\n if (block == null ? void 0 : block.stylesStr) {\n addStyle2Node(block.id, block == null ? void 0 : block.stylesStr);\n }\n continue;\n }\n if (block.type === \"column-setting\") {\n parent.columns = block.columns || -1;\n } else if (block.type === \"edge\") {\n if (edgeCount[block.id]) {\n edgeCount[block.id]++;\n } else {\n edgeCount[block.id] = 1;\n }\n block.id = edgeCount[block.id] + \"-\" + block.id;\n edgeList.push(block);\n } else {\n if (!block.label) {\n if (block.type === \"composite\") {\n block.label = \"\";\n } else {\n block.label = block.id;\n }\n }\n const newBlock = !blockDatabase[block.id];\n if (newBlock) {\n blockDatabase[block.id] = block;\n } else {\n if (block.type !== \"na\") {\n blockDatabase[block.id].type = block.type;\n }\n if (block.label !== block.id) {\n blockDatabase[block.id].label = block.label;\n }\n }\n if (block.children) {\n populateBlockDatabase(block.children, block);\n }\n if (block.type === \"space\") {\n const w = block.width || 1;\n for (let j = 0; j < w; j++) {\n const newBlock2 = clone(block);\n newBlock2.id = newBlock2.id + \"-\" + j;\n blockDatabase[newBlock2.id] = newBlock2;\n children.push(newBlock2);\n }\n } else if (newBlock) {\n children.push(block);\n }\n }\n }\n parent.children = children;\n};\nlet blocks = [];\nlet rootBlock = { id: \"root\", type: \"composite\", children: [], columns: -1 };\nconst clear = () => {\n log.debug(\"Clear called\");\n clear$1();\n rootBlock = { id: \"root\", type: \"composite\", children: [], columns: -1 };\n blockDatabase = { root: rootBlock };\n blocks = [];\n classes = {};\n edgeList = [];\n edgeCount = {};\n};\nfunction typeStr2Type(typeStr) {\n log.debug(\"typeStr2Type\", typeStr);\n switch (typeStr) {\n case \"[]\":\n return \"square\";\n case \"()\":\n log.debug(\"we have a round\");\n return \"round\";\n case \"(())\":\n return \"circle\";\n case \">]\":\n return \"rect_left_inv_arrow\";\n case \"{}\":\n return \"diamond\";\n case \"{{}}\":\n return \"hexagon\";\n case \"([])\":\n return \"stadium\";\n case \"[[]]\":\n return \"subroutine\";\n case \"[()]\":\n return \"cylinder\";\n case \"((()))\":\n return \"doublecircle\";\n case \"[//]\":\n return \"lean_right\";\n case \"[\\\\\\\\]\":\n return \"lean_left\";\n case \"[/\\\\]\":\n return \"trapezoid\";\n case \"[\\\\/]\":\n return \"inv_trapezoid\";\n case \"<[]>\":\n return \"block_arrow\";\n default:\n return \"na\";\n }\n}\nfunction edgeTypeStr2Type(typeStr) {\n log.debug(\"typeStr2Type\", typeStr);\n switch (typeStr) {\n case \"==\":\n return \"thick\";\n default:\n return \"normal\";\n }\n}\nfunction edgeStrToEdgeData(typeStr) {\n switch (typeStr.trim()) {\n case \"--x\":\n return \"arrow_cross\";\n case \"--o\":\n return \"arrow_circle\";\n default:\n return \"arrow_point\";\n }\n}\nlet cnt = 0;\nconst generateId = () => {\n cnt++;\n return \"id-\" + Math.random().toString(36).substr(2, 12) + \"-\" + cnt;\n};\nconst setHierarchy = (block) => {\n rootBlock.children = block;\n populateBlockDatabase(block, rootBlock);\n blocks = rootBlock.children;\n};\nconst getColumns = (blockId) => {\n const block = blockDatabase[blockId];\n if (!block) {\n return -1;\n }\n if (block.columns) {\n return block.columns;\n }\n if (!block.children) {\n return -1;\n }\n return block.children.length;\n};\nconst getBlocksFlat = () => {\n return [...Object.values(blockDatabase)];\n};\nconst getBlocks = () => {\n return blocks || [];\n};\nconst getEdges = () => {\n return edgeList;\n};\nconst getBlock = (id) => {\n return blockDatabase[id];\n};\nconst setBlock = (block) => {\n blockDatabase[block.id] = block;\n};\nconst getLogger = () => console;\nconst getClasses$1 = function() {\n return classes;\n};\nconst db = {\n getConfig: () => getConfig$1().block,\n typeStr2Type,\n edgeTypeStr2Type,\n edgeStrToEdgeData,\n getLogger,\n getBlocksFlat,\n getBlocks,\n getEdges,\n setHierarchy,\n getBlock,\n setBlock,\n getColumns,\n getClasses: getClasses$1,\n clear,\n generateId\n};\nconst db$1 = db;\nconst fade = (color, opacity) => {\n const channel = khroma.channel;\n const r = channel(color, \"r\");\n const g = channel(color, \"g\");\n const b = channel(color, \"b\");\n return khroma.rgba(r, g, b, opacity);\n};\nconst getStyles = (options) => `.label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n .cluster-label text {\n fill: ${options.titleColor};\n }\n .cluster-label span,p {\n color: ${options.titleColor};\n }\n\n\n\n .label text,span,p {\n fill: ${options.nodeTextColor || options.textColor};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${options.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${fade(options.edgeLabelBackground, 0.5)};\n // background-color:\n }\n\n .node .cluster {\n // fill: ${fade(options.mainBkg, 0.5)};\n fill: ${fade(options.clusterBkg, 0.5)};\n stroke: ${fade(options.clusterBorder, 0.2)};\n box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n .cluster span,p {\n color: ${options.titleColor};\n }\n /* .cluster div {\n color: ${options.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${options.fontFamily};\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n`;\nconst flowStyles = getStyles;\nfunction getNodeFromBlock(block, db2, positioned = false) {\n var _a2, _b2, _c;\n const vertex = block;\n let classStr = \"default\";\n if ((((_a2 = vertex == null ? void 0 : vertex.classes) == null ? void 0 : _a2.length) || 0) > 0) {\n classStr = ((vertex == null ? void 0 : vertex.classes) || []).join(\" \");\n }\n classStr = classStr + \" flowchart-label\";\n let radius = 0;\n let shape = \"\";\n let padding2;\n switch (vertex.type) {\n case \"round\":\n radius = 5;\n shape = \"rect\";\n break;\n case \"composite\":\n radius = 0;\n shape = \"composite\";\n padding2 = 0;\n break;\n case \"square\":\n shape = \"rect\";\n break;\n case \"diamond\":\n shape = \"question\";\n break;\n case \"hexagon\":\n shape = \"hexagon\";\n break;\n case \"block_arrow\":\n shape = \"block_arrow\";\n break;\n case \"odd\":\n shape = \"rect_left_inv_arrow\";\n break;\n case \"lean_right\":\n shape = \"lean_right\";\n break;\n case \"lean_left\":\n shape = \"lean_left\";\n break;\n case \"trapezoid\":\n shape = \"trapezoid\";\n break;\n case \"inv_trapezoid\":\n shape = \"inv_trapezoid\";\n break;\n case \"rect_left_inv_arrow\":\n shape = \"rect_left_inv_arrow\";\n break;\n case \"circle\":\n shape = \"circle\";\n break;\n case \"ellipse\":\n shape = \"ellipse\";\n break;\n case \"stadium\":\n shape = \"stadium\";\n break;\n case \"subroutine\":\n shape = \"subroutine\";\n break;\n case \"cylinder\":\n shape = \"cylinder\";\n break;\n case \"group\":\n shape = \"rect\";\n break;\n case \"doublecircle\":\n shape = \"doublecircle\";\n break;\n default:\n shape = \"rect\";\n }\n const styles = getStylesFromArray((vertex == null ? void 0 : vertex.styles) || []);\n const vertexText = vertex.label;\n const bounds = vertex.size || { width: 0, height: 0, x: 0, y: 0 };\n const node = {\n labelStyle: styles.labelStyle,\n shape,\n labelText: vertexText,\n rx: radius,\n ry: radius,\n class: classStr,\n style: styles.style,\n id: vertex.id,\n directions: vertex.directions,\n width: bounds.width,\n height: bounds.height,\n x: bounds.x,\n y: bounds.y,\n positioned,\n intersect: void 0,\n type: vertex.type,\n padding: padding2 ?? (((_c = (_b2 = getConfig$1()) == null ? void 0 : _b2.block) == null ? void 0 : _c.padding) || 0)\n };\n return node;\n}\nasync function calculateBlockSize(elem, block, db2) {\n const node = getNodeFromBlock(block, db2, false);\n if (node.type === \"group\") {\n return;\n }\n const nodeEl = await insertNode(elem, node);\n const boundingBox = nodeEl.node().getBBox();\n const obj = db2.getBlock(node.id);\n obj.size = { width: boundingBox.width, height: boundingBox.height, x: 0, y: 0, node: nodeEl };\n db2.setBlock(obj);\n nodeEl.remove();\n}\nasync function insertBlockPositioned(elem, block, db2) {\n const node = getNodeFromBlock(block, db2, true);\n const obj = db2.getBlock(node.id);\n if (obj.type !== \"space\") {\n await insertNode(elem, node);\n block.intersect = node == null ? void 0 : node.intersect;\n positionNode(node);\n }\n}\nasync function performOperations(elem, blocks2, db2, operation) {\n for (const block of blocks2) {\n await operation(elem, block, db2);\n if (block.children) {\n await performOperations(elem, block.children, db2, operation);\n }\n }\n}\nasync function calculateBlockSizes(elem, blocks2, db2) {\n await performOperations(elem, blocks2, db2, calculateBlockSize);\n}\nasync function insertBlocks(elem, blocks2, db2) {\n await performOperations(elem, blocks2, db2, insertBlockPositioned);\n}\nasync function insertEdges(elem, edges, blocks2, db2, id) {\n const g = new graphlib.Graph({\n multigraph: true,\n compound: true\n });\n g.setGraph({\n rankdir: \"TB\",\n nodesep: 10,\n ranksep: 10,\n marginx: 8,\n marginy: 8\n });\n for (const block of blocks2) {\n if (block.size) {\n g.setNode(block.id, {\n width: block.size.width,\n height: block.size.height,\n intersect: block.intersect\n });\n }\n }\n for (const edge of edges) {\n if (edge.start && edge.end) {\n const startBlock = db2.getBlock(edge.start);\n const endBlock = db2.getBlock(edge.end);\n if ((startBlock == null ? void 0 : startBlock.size) && (endBlock == null ? void 0 : endBlock.size)) {\n const start = startBlock.size;\n const end = endBlock.size;\n const points = [\n { x: start.x, y: start.y },\n { x: start.x + (end.x - start.x) / 2, y: start.y + (end.y - start.y) / 2 },\n { x: end.x, y: end.y }\n ];\n await insertEdge(\n elem,\n { v: edge.start, w: edge.end, name: edge.id },\n {\n ...edge,\n arrowTypeEnd: edge.arrowTypeEnd,\n arrowTypeStart: edge.arrowTypeStart,\n points,\n classes: \"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1\"\n },\n void 0,\n \"block\",\n g,\n id\n );\n if (edge.label) {\n await insertEdgeLabel(elem, {\n ...edge,\n label: edge.label,\n labelStyle: \"stroke: #333; stroke-width: 1.5px;fill:none;\",\n arrowTypeEnd: edge.arrowTypeEnd,\n arrowTypeStart: edge.arrowTypeStart,\n points,\n classes: \"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1\"\n });\n await positionEdgeLabel(\n { ...edge, x: points[1].x, y: points[1].y },\n {\n originalPath: points\n }\n );\n }\n }\n }\n }\n}\nconst padding = ((_b = (_a = getConfig()) == null ? void 0 : _a.block) == null ? void 0 : _b.padding) || 8;\nfunction calculateBlockPosition(columns, position) {\n if (columns === 0 || !Number.isInteger(columns)) {\n throw new Error(\"Columns must be an integer !== 0.\");\n }\n if (position < 0 || !Number.isInteger(position)) {\n throw new Error(\"Position must be a non-negative integer.\" + position);\n }\n if (columns < 0) {\n return { px: position, py: 0 };\n }\n if (columns === 1) {\n return { px: 0, py: position };\n }\n const px = position % columns;\n const py = Math.floor(position / columns);\n return { px, py };\n}\nconst getMaxChildSize = (block) => {\n let maxWidth = 0;\n let maxHeight = 0;\n for (const child of block.children) {\n const { width, height, x, y } = child.size || { width: 0, height: 0, x: 0, y: 0 };\n log.debug(\n \"getMaxChildSize abc95 child:\",\n child.id,\n \"width:\",\n width,\n \"height:\",\n height,\n \"x:\",\n x,\n \"y:\",\n y,\n child.type\n );\n if (child.type === \"space\") {\n continue;\n }\n if (width > maxWidth) {\n maxWidth = width / (block.widthInColumns || 1);\n }\n if (height > maxHeight) {\n maxHeight = height;\n }\n }\n return { width: maxWidth, height: maxHeight };\n};\nfunction setBlockSizes(block, db2, siblingWidth = 0, siblingHeight = 0) {\n var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k;\n log.debug(\n \"setBlockSizes abc95 (start)\",\n block.id,\n (_a2 = block == null ? void 0 : block.size) == null ? void 0 : _a2.x,\n \"block width =\",\n block == null ? void 0 : block.size,\n \"sieblingWidth\",\n siblingWidth\n );\n if (!((_b2 = block == null ? void 0 : block.size) == null ? void 0 : _b2.width)) {\n block.size = {\n width: siblingWidth,\n height: siblingHeight,\n x: 0,\n y: 0\n };\n }\n let maxWidth = 0;\n let maxHeight = 0;\n if (((_c = block.children) == null ? void 0 : _c.length) > 0) {\n for (const child of block.children) {\n setBlockSizes(child, db2);\n }\n const childSize = getMaxChildSize(block);\n maxWidth = childSize.width;\n maxHeight = childSize.height;\n log.debug(\"setBlockSizes abc95 maxWidth of\", block.id, \":s children is \", maxWidth, maxHeight);\n for (const child of block.children) {\n if (child.size) {\n log.debug(\n `abc95 Setting size of children of ${block.id} id=${child.id} ${maxWidth} ${maxHeight} ${child.size}`\n );\n child.size.width = maxWidth * (child.widthInColumns || 1) + padding * ((child.widthInColumns || 1) - 1);\n child.size.height = maxHeight;\n child.size.x = 0;\n child.size.y = 0;\n log.debug(\n `abc95 updating size of ${block.id} children child:${child.id} maxWidth:${maxWidth} maxHeight:${maxHeight}`\n );\n }\n }\n for (const child of block.children) {\n setBlockSizes(child, db2, maxWidth, maxHeight);\n }\n const columns = block.columns || -1;\n let numItems = 0;\n for (const child of block.children) {\n numItems += child.widthInColumns || 1;\n }\n let xSize = block.children.length;\n if (columns > 0 && columns < numItems) {\n xSize = columns;\n }\n block.widthInColumns || 1;\n const ySize = Math.ceil(numItems / xSize);\n let width = xSize * (maxWidth + padding) + padding;\n let height = ySize * (maxHeight + padding) + padding;\n if (width < siblingWidth) {\n log.debug(\n `Detected to small siebling: abc95 ${block.id} sieblingWidth ${siblingWidth} sieblingHeight ${siblingHeight} width ${width}`\n );\n width = siblingWidth;\n height = siblingHeight;\n const childWidth = (siblingWidth - xSize * padding - padding) / xSize;\n const childHeight = (siblingHeight - ySize * padding - padding) / ySize;\n log.debug(\"Size indata abc88\", block.id, \"childWidth\", childWidth, \"maxWidth\", maxWidth);\n log.debug(\"Size indata abc88\", block.id, \"childHeight\", childHeight, \"maxHeight\", maxHeight);\n log.debug(\"Size indata abc88 xSize\", xSize, \"padding\", padding);\n for (const child of block.children) {\n if (child.size) {\n child.size.width = childWidth;\n child.size.height = childHeight;\n child.size.x = 0;\n child.size.y = 0;\n }\n }\n }\n log.debug(\n `abc95 (finale calc) ${block.id} xSize ${xSize} ySize ${ySize} columns ${columns}${block.children.length} width=${Math.max(width, ((_d = block.size) == null ? void 0 : _d.width) || 0)}`\n );\n if (width < (((_e = block == null ? void 0 : block.size) == null ? void 0 : _e.width) || 0)) {\n width = ((_f = block == null ? void 0 : block.size) == null ? void 0 : _f.width) || 0;\n const num = columns > 0 ? Math.min(block.children.length, columns) : block.children.length;\n if (num > 0) {\n const childWidth = (width - num * padding - padding) / num;\n log.debug(\"abc95 (growing to fit) width\", block.id, width, (_g = block.size) == null ? void 0 : _g.width, childWidth);\n for (const child of block.children) {\n if (child.size) {\n child.size.width = childWidth;\n }\n }\n }\n }\n block.size = {\n width,\n height,\n x: 0,\n y: 0\n };\n }\n log.debug(\n \"setBlockSizes abc94 (done)\",\n block.id,\n (_h = block == null ? void 0 : block.size) == null ? void 0 : _h.x,\n (_i = block == null ? void 0 : block.size) == null ? void 0 : _i.width,\n (_j = block == null ? void 0 : block.size) == null ? void 0 : _j.y,\n (_k = block == null ? void 0 : block.size) == null ? void 0 : _k.height\n );\n}\nfunction layoutBlocks(block, db2) {\n var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;\n log.debug(\n `abc85 layout blocks (=>layoutBlocks) ${block.id} x: ${(_a2 = block == null ? void 0 : block.size) == null ? void 0 : _a2.x} y: ${(_b2 = block == null ? void 0 : block.size) == null ? void 0 : _b2.y} width: ${(_c = block == null ? void 0 : block.size) == null ? void 0 : _c.width}`\n );\n const columns = block.columns || -1;\n log.debug(\"layoutBlocks columns abc95\", block.id, \"=>\", columns, block);\n if (block.children && // find max width of children\n block.children.length > 0) {\n const width = ((_e = (_d = block == null ? void 0 : block.children[0]) == null ? void 0 : _d.size) == null ? void 0 : _e.width) || 0;\n const widthOfChildren = block.children.length * width + (block.children.length - 1) * padding;\n log.debug(\"widthOfChildren 88\", widthOfChildren, \"posX\");\n let columnPos = 0;\n log.debug(\"abc91 block?.size?.x\", block.id, (_f = block == null ? void 0 : block.size) == null ? void 0 : _f.x);\n let startingPosX = ((_g = block == null ? void 0 : block.size) == null ? void 0 : _g.x) ? ((_h = block == null ? void 0 : block.size) == null ? void 0 : _h.x) + (-((_i = block == null ? void 0 : block.size) == null ? void 0 : _i.width) / 2 || 0) : -padding;\n let rowPos = 0;\n for (const child of block.children) {\n const parent = block;\n if (!child.size) {\n continue;\n }\n const { width: width2, height } = child.size;\n const { px, py } = calculateBlockPosition(columns, columnPos);\n if (py != rowPos) {\n rowPos = py;\n startingPosX = ((_j = block == null ? void 0 : block.size) == null ? void 0 : _j.x) ? ((_k = block == null ? void 0 : block.size) == null ? void 0 : _k.x) + (-((_l = block == null ? void 0 : block.size) == null ? void 0 : _l.width) / 2 || 0) : -padding;\n log.debug(\"New row in layout for block\", block.id, \" and child \", child.id, rowPos);\n }\n log.debug(\n `abc89 layout blocks (child) id: ${child.id} Pos: ${columnPos} (px, py) ${px},${py} (${(_m = parent == null ? void 0 : parent.size) == null ? void 0 : _m.x},${(_n = parent == null ? void 0 : parent.size) == null ? void 0 : _n.y}) parent: ${parent.id} width: ${width2}${padding}`\n );\n if (parent.size) {\n const halfWidth = width2 / 2;\n child.size.x = startingPosX + padding + halfWidth;\n log.debug(\n `abc91 layout blocks (calc) px, pyid:${child.id} startingPos=X${startingPosX} new startingPosX${child.size.x} ${halfWidth} padding=${padding} width=${width2} halfWidth=${halfWidth} => x:${child.size.x} y:${child.size.y} ${child.widthInColumns} (width * (child?.w || 1)) / 2 ${width2 * ((child == null ? void 0 : child.widthInColumns) || 1) / 2}`\n );\n startingPosX = child.size.x + halfWidth;\n child.size.y = parent.size.y - parent.size.height / 2 + py * (height + padding) + height / 2 + padding;\n log.debug(\n `abc88 layout blocks (calc) px, pyid:${child.id}startingPosX${startingPosX}${padding}${halfWidth}=>x:${child.size.x}y:${child.size.y}${child.widthInColumns}(width * (child?.w || 1)) / 2${width2 * ((child == null ? void 0 : child.widthInColumns) || 1) / 2}`\n );\n }\n if (child.children) {\n layoutBlocks(child);\n }\n columnPos += (child == null ? void 0 : child.widthInColumns) || 1;\n log.debug(\"abc88 columnsPos\", child, columnPos);\n }\n }\n log.debug(\n `layout blocks (<==layoutBlocks) ${block.id} x: ${(_o = block == null ? void 0 : block.size) == null ? void 0 : _o.x} y: ${(_p = block == null ? void 0 : block.size) == null ? void 0 : _p.y} width: ${(_q = block == null ? void 0 : block.size) == null ? void 0 : _q.width}`\n );\n}\nfunction findBounds(block, { minX, minY, maxX, maxY } = { minX: 0, minY: 0, maxX: 0, maxY: 0 }) {\n if (block.size && block.id !== \"root\") {\n const { x, y, width, height } = block.size;\n if (x - width / 2 < minX) {\n minX = x - width / 2;\n }\n if (y - height / 2 < minY) {\n minY = y - height / 2;\n }\n if (x + width / 2 > maxX) {\n maxX = x + width / 2;\n }\n if (y + height / 2 > maxY) {\n maxY = y + height / 2;\n }\n }\n if (block.children) {\n for (const child of block.children) {\n ({ minX, minY, maxX, maxY } = findBounds(child, { minX, minY, maxX, maxY }));\n }\n }\n return { minX, minY, maxX, maxY };\n}\nfunction layout(db2) {\n const root = db2.getBlock(\"root\");\n if (!root) {\n return;\n }\n setBlockSizes(root, db2, 0, 0);\n layoutBlocks(root);\n log.debug(\"getBlocks\", JSON.stringify(root, null, 2));\n const { minX, minY, maxX, maxY } = findBounds(root);\n const height = maxY - minY;\n const width = maxX - minX;\n return { x: minX, y: minY, width, height };\n}\nconst getClasses = function(text, diagObj) {\n return diagObj.db.getClasses();\n};\nconst draw = async function(text, id, _version, diagObj) {\n const { securityLevel, block: conf } = getConfig$1();\n const db2 = diagObj.db;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const svg = securityLevel === \"sandbox\" ? root.select(`[id=\"${id}\"]`) : select(`[id=\"${id}\"]`);\n const markers = [\"point\", \"circle\", \"cross\"];\n insertMarkers(svg, markers, diagObj.type, id);\n const bl = db2.getBlocks();\n const blArr = db2.getBlocksFlat();\n const edges = db2.getEdges();\n const nodes = svg.insert(\"g\").attr(\"class\", \"block\");\n await calculateBlockSizes(nodes, bl, db2);\n const bounds = layout(db2);\n await insertBlocks(nodes, bl, db2);\n await insertEdges(nodes, edges, blArr, db2, id);\n if (bounds) {\n const bounds2 = bounds;\n const magicFactor = Math.max(1, Math.round(0.125 * (bounds2.width / bounds2.height)));\n const height = bounds2.height + magicFactor + 10;\n const width = bounds2.width + 10;\n const { useMaxWidth } = conf;\n configureSvgSize(svg, height, width, !!useMaxWidth);\n log.debug(\"Here Bounds\", bounds, bounds2);\n svg.attr(\n \"viewBox\",\n `${bounds2.x - 5} ${bounds2.y - 5} ${bounds2.width + 10} ${bounds2.height + 10}`\n );\n }\n scaleOrdinal(schemeTableau10);\n};\nconst renderer = {\n draw,\n getClasses\n};\nconst diagram = {\n parser: parser$1,\n db: db$1,\n renderer,\n styles: flowStyles\n};\nexport {\n diagram\n};\n"], + "mappings": "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", + "names": ["import_dayjs", "import_sanitize_url", "import_dompurify", "_a", "_b", "parser", "o", "k", "v", "o2", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "parser2", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "num", "spaceId", "edgeData", "id", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "TERROR", "EOF", "args", "lexer2", "sharedState", "yyloc", "ranges", "lex", "token", "symbol", "state", "action", "r", "yyval", "p", "len", "newState", "expected", "errStr", "lexer", "ch", "lines", "oldLines", "n", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "Parser", "parser$1", "blockDatabase", "edgeList", "edgeCount", "COLOR_KEYWORD", "FILL_KEYWORD", "BG_FILL", "STYLECLASS_SEP", "config", "getConfig", "classes", "sanitizeText", "txt", "common$1", "addStyleClass", "styleAttributes", "foundClass", "attrib", "fixedAttrib", "newStyle2", "addStyle2Node", "styles", "foundBlock", "setCssClass", "itemIds", "cssClassName", "trimmedId", "populateBlockDatabase", "_blockList", "parent", "blockList", "children", "block", "newBlock", "w", "j", "newBlock2", "clone_default", "blocks", "rootBlock", "clear", "log$1", "typeStr2Type", "typeStr", "edgeTypeStr2Type", "edgeStrToEdgeData", "cnt", "generateId", "setHierarchy", "getColumns", "blockId", "getBlocksFlat", "getBlocks", "getEdges", "getBlock", "setBlock", "getLogger", "getClasses$1", "db", "getConfig$1", "db$1", "fade", "color", "opacity", "channel", "channel_default", "g", "b", "rgba_default", "getStyles", "options", "flowStyles", "getNodeFromBlock", "db2", "positioned", "_a2", "_b2", "_c", "vertex", "classStr", "radius", "shape", "padding2", "getStylesFromArray", "vertexText", "bounds", "calculateBlockSize", "elem", "node", "nodeEl", "insertNode", "boundingBox", "obj", "insertBlockPositioned", "positionNode", "performOperations", "blocks2", "operation", "calculateBlockSizes", "insertBlocks", "insertEdges", "edges", "Graph", "edge", "startBlock", "endBlock", "start", "end", "points", "insertEdge", "insertEdgeLabel", "positionEdgeLabel", "padding", "calculateBlockPosition", "columns", "position", "px", "py", "getMaxChildSize", "maxWidth", "maxHeight", "child", "width", "height", "x", "y", "setBlockSizes", "siblingWidth", "siblingHeight", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "childSize", "numItems", "xSize", "ySize", "childWidth", "childHeight", "layoutBlocks", "_l", "_m", "_n", "_o", "_p", "_q", "widthOfChildren", "columnPos", "startingPosX", "rowPos", "width2", "halfWidth", "findBounds", "minX", "minY", "maxX", "maxY", "layout", "root", "getClasses", "text", "diagObj", "draw", "_version", "securityLevel", "conf", "sandboxElement", "select_default", "svg", "insertMarkers$1", "bl", "blArr", "nodes", "bounds2", "magicFactor", "useMaxWidth", "configureSvgSize", "ordinal", "Tableau10_default", "renderer", "diagram"] +} diff --git a/public/bootstrap-icons-OCU552PF.woff b/public/bootstrap-icons-OCU552PF.woff new file mode 100644 index 0000000000000000000000000000000000000000..51204d27de92c7bb0f8bed6165b9dc888f38ff38 GIT binary patch literal 176032 zcmZ6ScRZE<`^Pm-lu8;t|$Qy(j!m`)%3#0&!6OKL?#J|IPh4)Vg(~;^j@N!pFp2H`SVol$tUM0 zFyFnKPJjAzgz(Prr%#-sNZ^VRIpTbhN{Cn2y07)tM7dM5yGF-fCE-;dg^+-~PNPof zuU~t=e*Kg(e+NGLdid`Bc|DT4?qno6pOSwU=Br#_~zfL4KPo}qKjwswBB=00}?zR*p3 z_Ob5VvHYdqNzv(dwuUv#-N@;CJzF<-o9iS_I-Ek!8%^W^iU;Q`DHP zM?!XaN!hALYlOGR1w0h)ERue5R zKU`aTFOQLUU}BwCj_$2^Enk`Zp=izVAYZ=Zv&^JNX)Cq-8t0b}$~yU#iK}M&Wv5d1 zb{RiP*CqF}PKCnjm9_ILhDMgxDfeSeIm2t(G%`jr)&%#{PD8?@+e|Wkx$GO9y4qW2 zj4TF_+MCRk`-}vw>wdwuXvz(e{tL_zN`V!%jE!7wqM%&CKuI2BR0v& z`_4&{v)At$+%_9ULk(q0GtCCvOBw~73}xLiB?qjRy!?{o#?fwrvhCkHXE0e;EJcj62E zdP^>Q3BhA6t`4$3nX&^Kd+AwEU327ItFqi?#kaCaT??$CbU6V_3bnIdVoU?Pd#w{* z^_gt_mU~4Lt`QO{Igb6+OR}{y8)6CrTT3*xeH+q|+3o$xwR7jsiQ?q?zc9RR$=Q(u zk-r{$<{rrWewO$f^;|qOL1`?{HF2tTW8zRTw5|24!!uDV{gj@UPH0(ce>&D`YWI*X zwE3gA=kL&e;q`6LpD;~!*S~%4ku$MWAM@OOtKqqq?bKj>1B;jT6#lTDW+Lu6+tm1B zZOU)rp~+ch__VSU`ER~|W{2))@4|mk*F|qUIYYBN&2LcuC#Eo+{7LjTA~2QZdC%{f zLrsOjHmGBL^>3?xo`(TvvEd`h4R<#*6!3=iJ`)0gUviz?CL8_us1e_lq z{c!+mol)O(8t*v>xR~auYG?YB=WoqP&^rf~1}v#E;(>c;3z zcwggp7yC7s$QH%sCxySsUm|BBH!~GB)5d3CuIC;pAFm`H7ZSN6v7$>xJEf;1VZM$X z`I|%AZl|^9a=n|E(XNg@w<3mEBJY^PB5v*grZW4-=f5Y}k1ot}r(nw4EE~ zHrEw&FcVHQH>E;gJ4`tyMnpvpt1RXp4jsE){O_`bZ7uF(KH^Q}x0L;&^JgmEDF>pb zzC@l&Z2k)037#md(q(ioa_+CvIkfL{W*t$VzdX0Ib$Sx<%5jDMq>Jc$S#~)cIp4mc za{Q5~-9B)+5xLWTI(Ht}-nq5keD2-ebGdkQ)_$Qvj8a*lIeBLkw&vINhvtlns1n)F zM)QF7R#%5W!At(zgH&!YwViVFEiWP(+3oI&P*}y7&ab^NXq2&|ucDEC!=%1y%sWl% zP3@xIWUM^Rx_KigwplILSay^$Np0Z=x74ixwZtFtbvMJ++P5JqY^=9ZVtP97Iz4(R zp?EKkdgzT?=T|X)D(ayaj`L7QrIOY#ywv3aW zM{Tp5<928_xpVbz1!Y>cl?LN| zdYXJ4!uZ;lmU~kE_V@;zOGVJNzjN%WUXb0HYLux;oa;L9RiC~u+qJc@)X3wVsM3|c zAi6W&s6=E9>S_P`?IpkK(>t}|^m{e`qv_$=d93K5QRXw+ux53TL;OZ789iVwIiN2q z*{?6z*WZw|VXiRXU6*4QKK@nOKWXOSQFQg6isQKpwutJ>5w=^)u@nVQ8%3pV+*0p* z5&8R0eOHe&<61@N=un&Gw3`Ic%kgLX-=i2!C%1>p#Kh8`i=DdxALU$=ZCyV9+o%e# zx05|eYwwO+ls!(0K+WB$dZ+UJvzeIMrU9``S zzOZ?yguX38o$2;jRNnLKNv<*5 zU~c|iRb#us8uUGPC#6wv^KIxt{?3Pwi`|VizN&WjGrk}FJ@a)rf5bAL+s`^aF}JjS z8q!wgvvhVE5ux_sp2xa~tCts>!gozyUpvN(u0`J%cb_(yxlEq{o7ySaLxZO*2k?-` ztwpmIY#(UG_}0u0vQF(Bi}hA34x~@zXRMA!L{|`}G_88T_x*6$;Oc@_*7`tF$-5@} zv{!HTZb@NN*R=PhSWtFz|4a$8%xhEJLf^t{z+6_kzqO>K%w?!%d6J^Ouyt(Kb?Z~m zWb?+%A$;KXch~10elk9kho6+5rc6fui#*I!+N_ftlwWS46#2qg^+5rjyOEGZKO?Xy zWi_4lqO@6ZI%`uXC|O}VcX=>~zL9c9)3v4fcbb33my8+D&48m4rY+t^2Je#4xsU!# z7oUmpz{~kJa`)tY^i7$@Kk7HcX>ZcJv7B%Cq@;W|KZ&i|VrT2vNbygq!kGP2-rt40 z%cdsxOf>)L)W12G`-Lyhl<&&(9x^U1A2Ii}=*V*ywJNQU9L-u23XN$s&HXrNvRuBm zVR6V9(Dvn#{Ra{3_~iO%*V-KmQ+to<2AcA|(Zw~2fZ~6P-sVVz}lJTG*ctF|Em00W~7cjg!U_K=Do-X6Nvm=z1nv|eo;gezif=` zpxKY^(3ywM^&Q>h=`5bdz6frVo~GNRPE%WaVf5ind3RflV;J{gN=kRnUrJvnn%S+} z+BXn=S0%;qJKI9LQ%L4**Vu;6N->50n|_@w+lDV?`)MdU)NIFp`B~UmSPfWMX%X$l z1lY>s80Tk=CG&0%y&LcTc1RZL+{hzC&DHrqO#apU- z8MV1;wjUn@m~5wh`F^x#8vpg#&u>QYC^>X|Ac%7MX~TEnfWB#pqr9`P;VYI+DbqdP zpKTYEcl^%pw2zAJ^<7Y0=0(m`@3S4#Ts*i$IQ~=Fb36+u2(J8}V7bD;o!U_$$-V)K zy}aPLN-4HXnt=yOJ;jnC(~h0ZBmX+L(|J`rI&-%G;H0BJF=H0Y;09G zo~t+iQ1-vE6_>{G)~)MTjX@Y^a$53>Xi5FmKr;EKjpM8SRED z7hIOZtl@)2%FYOiDdypFLwsY81}P!Zse5XsNraYob7whG-Z70qJ&1H#Eq9qK%t5!j z37vuP;83bfg&j~HD=C*RxJY$A~>yXbGdm*MQ zgqBz4+HyYJV>*Mw82LWySaW(gAI>q0!5p0cRIO0iCM=z6Onq<{6Vhw_YBU;V$vvhw zXbU+=-?KCgC$uD)JIeX+jTsFpK$JL_b1|oV!SrR?i!C{$&M-^PgGO|kjuOYR5{3+C z9W#o8S@ImDqQ@Xg!fpYkLpbZ`(OTH7p2vH%w9YMLEnV3+*e_mbjX`-#Y_E03sF>V3 zf>C5S9HZ51oj=Mi#{_2-c2hTXCU|LhRHBn~TKV1Xnl2E$bUj+o0}umvtz6k#SUtP6 z&R{x*w=YtHcOqs~QLY)8E$Sv~N=eu-^e8|pL4=XDd}UoQWr)XHbSp$StyZ?o1*WXw z(S)W!*>JeAnQq}HGDgo}hg_dc2ely|k+mviDTJ`p(H@wxmd9sw3JOW4uz$VmGmM)3 zv*940PB`DP8Rl2tiB#Dwn6kP@5qbzY$-Vr@bgoY>e$-Wt95uqa7`ZI<+0Nf?RMdS74}dCyZs$ur|Xr`1ueMMgrER^8n$eSXPO?3n_*f za;KsE?v%BlQ9AbsVTq$oa;0#2&Si5`?M1ZKnxkAP>eOhE0h5fELrKY>KObJ%w#NLN zuhl8)T!w4K4e@ws#w{VV;@Z_2S%@O;{>NcJf)q$l0ttG+5amsxc2r|zX-k!o4`ToV zFd%Rb2yB5}Mu33?=3WCJ4bWi)z(@^XlsJ&|0H8FG%m;Q9sS7}cRU|CJ5Ll49`yXUr zevUaJw0a^87+KD4x%+Q4V1Cwk>J&MTgHW51r8!SZKJXe~XbrFYHUP{ylva;7Z<51| z8e{9}HTQjjLPkp!S9=I6b3q!!<~7UM)qt`s(y+#R}SIE-7G z)8WdwWKZ&%)dY+jz@PyP2f$DP4bCL0S#3s!mV7CRW1nH%pGXK-G!0yfjEy^qN?C)E z0nL#_WeBiZ4C0%BJM=}el*B_LMg}`}z}9DE2zvwc@w-E}+X4R)0rYVJhGEF}xBLpK zdV{V~?)Zs!9Kv!rH5eW@$>chMS2rphJ#c*(S(^p1fytP?0Z<7)km}a~6MUdc%LO#Z z#Q@HdIT##)0Fx3xCzTy^azTd*bR=~EXOI(wIUr;Pq2GV-zZv-;yb3}}5Q>1wrc4mt z0U;9HWd;%$Y^MbrjGr8M9QQChvXWNF^yz*(O&ge`SwbDbb;)BGnUm!S(erk#;t_7j zY62dK>rw~^nLy~x4L|_{Fdhp!yr7e#1310lpj0l$t7?F$xyg@E{;7;9;Hehz!A;7rb{L_ngj$CfB+2;$b-U_ zXppLh`<&4ms|I8fd;epA4s`-B9LFAd3L0F|8^Ld=u%#-1Q3Mz%2-QPHLm+t_03;H) zJU%>oXdciWoK1yYW&nU20LXw=DgZL*14(8e`9Hu|28>wH0A?}(BP3q~9i$St90U|D zUW8+p)IzBmzT=2iyst+Vyv@nbKk`r_vor(uB+r32IyfYTYH8I10OKIw13)wY3;?hL z6*IaEKwjiGMFY<0;B0-ey?r{Mofa_50CNN|OHkhw2iRk_oOl`fe@#KfY-@2(>Rmy| z0d(k*?MbBo<5+->ApDcOCBP77j}EqhknPpQQ!TlR1LN)hW-&0X4;YsY1U>?R5U?v8 zFwy{n4gO6r9PCH{AQu2rfKirU64=M-8vvRCa0qBu29E#qH30MgP>p*M+r}Hsa2iYH zx?(GlS@0PuroIkBu4o1uBQnXlS5&UgxET6>@B-!*{zRY83N3`_`V7Le}^!KJf z#RR8tPb?!i0hmSQx=1gPndXRp!W+RA-Q1o_wMnFwXe?F0|H&g7k{#{S07WzIPu?bP zbm*5js?8+_iN>5rqUs?W@D!g|+8tF4C{K;myflmM;-bOA=-me^I|wjj z0C3N`B~SqS@?Qo1@8@cc#PPOtp@^*j=uT)gpI~S(?3(pNJBkV4o0pr)D|qH@8e6&1 zj5mO~%o%v|3eIGw@_@nx3LhZm?1JIh=G=fxt682(HKkSVyTh2QS4Rke*x^z<3$)k> zrGVGX=M6%nMd)wx3SMNIbArMv80rS2v0m-PP=N9P6h`aSYK%N6WPlJHu)~fz2A~Lo z@*ETvQ0zfb0t6opEpA7ifw?U?f=xy=|+NUc% zviu_Ct_g|(DC(f-fuaqH5g@BzWEBF61}OTLf!{Ec))S>_yeaTBd$Cm`OL_6&)Jp%SyZ5ap zPLMtL-oXq-Rm;FOC<$2e{a0%OPj7HG@bvCdflseB`1C#kg&mY9SnM9p5F*XnAQlct z9{Ac&fiD#mm!N{91iEq~41WX6h{DryMHzI!;k4lJpHP=&z3%^@9smiNU}ymc96^f) zSi69AHRuPYfkQmOyaOLFbe9b5mjw^*9au}e0(}iIj{^JkdBG4J7!m-RN|0%}+*w+d zfk>#l^@I+R0qVl1F++f8EVX>jywfNpmL_ddMv$jMA2o*uN1qVa_)nQ;w zi337H+&~B$4~CwCP!IR?=&>$cbB_e}w^BN)YqREc9pUPHkvh~$ zXZPgxH^u=l2UkCe(4(GdPG|n&&m!l)8btU}ypAu>lZC5icyq^z%xF;CpDF={D{N(0 z7%){pgC|bp0s(X|0frF>QR*2)H6SS{=fB`X_>nY)FJKCStIKY3$9bRUGJn~jfvt4g z14c7o9KqGw|MA2{oS~Rc|B1p@8o~)be9rI%b41=a!?QT%kW~`7{b5zuN})R8ha3ZJ zCF>1y2(KQs5(=q4M8Fle?Gk=Sk^;CB_^J)m$pAkG{5>|g{eE%4SRjz0j~j%HUJNr> z8yL!SdE#{3pu%#i?<%?YauEjvj3o9I+Fwfsi5kSwaR5kI7f6NP0TLT{(Cq>nj6g>z z4G11e!G;+o{(=tAe-0n$M5F!H5A|Wg~NB ze0*|wtx;&g%R@B~CW26um#+!k`UXva)pN_?7dMIt+!?hQ2$bT0gQ4NBR4Az&zGowi zz@37%LZGJc>70B`sMc&W)Zma2hLoQ0#OwTmR&()LqgwMoNCrYC5bB{&mH2cHJ~?FT zTQmW3=n6x!OkfGz3fM)QP9U@oh1$Sbvhz(KK0*w!T%nY5_~ea`pxuA~oLNHlOxF8_dXyDor zb(|^Z&kR^ke#R>976}Ivv=w%7DTjc`g5y$=M`}m-1A!HNAP@rt1c87o5ZD9)Nuk2ULOiXwLY_AV}#NI=|5L2An=YOzjiKMaO; z-UYxl92Zj_cgjR~g5uJF`)=mA8_wAwpC=`l1;V-~AFt@@FBaVY*N-5csE%_c=JBPR zFzK@H$-Yxu@_88CKX+p{vz;C=w2(dLNt`KiOa`oeGO>zFUP8hB6NvB~(6NadYPCZetK7eqmOaGbOYk699Jrpod>z73N9_twSqr{-oG#)ZRk$D1`v= zpSnQ72JcZig#*O{umGG>pzo&#P;?a>o<(CyqQ%jfrk z6_=~=3v!X_tV1WZyDtYlfufoVa99B60Eo%Ld;Df0tV4cxgB6Fi@C(7-yeZ2~F^YN1 zG=v?+24v6PIRYqTc7fl_aHec6x$Pb+M{uNUEm-XySGFU1h9(SIRouvf&(XPr9lr>^ zlyPFTqC+TsaLb|h?#q8lgq_Jy{KDr;Zoo)XbZ}-1Zt0HLeVNpbUpOMFv$jV>DMnnd z2cMsE>>eLb1)qngv9{;&q&OPk7smYvJ3YI=MnUjp^?08cD$t26y7SMl=OPzv%4=?^YG&wa`FsS4=4Ajz}n3e z7(Gm&1bm5ZPiYQ+T*YYr^XdKX(BN>`<|l8Cb`@-nR+? z9!Sx?JjJl~>H#e@NXO?r`$XVdAq}2(5HH;RcFuV&2 z1tT%**-y|iCE%)n-8xsM7?dKg1atLZt{%f4oHuKv8X_1T^?KiOG69rqP=Kezaxxv1 zWKi-zc?Ajrl((<3$Mdg#D0NPHdH<334i^1Ur!!5Hoa4B z($$Q80g7SS)e&0mjS)9~AU$LXZ_^<+g;(j2n*e>}X7FU4{33Q16mq}|hf5@Lo)UNf zBSWCj$e{p8rvX430OL0=8M5|oC9EXK3KR-|bnm=>|K zWvtQNt_K+TfN=#d)Br=1c85rBrjagM5HIAYd)vD09Va$SP7``Uk$~Gh;^*v}D+LUl z+tx&&<0Ot2u~-2>mBM(T%S<3C4M4^O+=dZ9XNpR3ydv=(=kBpz0&YPR0PPq6BmlrO z0r$s;pEJ6>IG)M@ID(dBPKjd$03OgHzA*uYtf>Z>PhouJMII+MP*RgHN0)$WXXEF* ztT)vlUO;Z2G$e8EZt(#yUx4#6q98u(G>vn2RW<=v`i~Z2q`=P^7ig+MePMWeVvk%C zIwX>S%bTG^D24KKh8~(~9G>d{2E8V6_qZbgqpujF;GxGca*gcH{5uUl!8LIzbol@1gc+T_Rww3j2*jOjG6X_X_y^kb=4< zOB_LWG_&HS@w6_iurB^yMS@`g{~lZ+t*~ExQz}7%rs*%}@cieLf=)E(=z~rz2nS0* z7zaYT1lYLWvPo)lo$L3MH;stIitr~ZGuwVd?dV!bZMF- z@RY&=aC(M|Ysid=!Lg#KvzKh7EfL`q$AgT_gLs3 zUN3z~9^RwUz(qPC49n$*7!l;nzRql_sbWRPf%EY_lP3PiE+}Dmy@?egc2^1igpQRv z+ImHkuJ%Wc(C#h=_V|Pb)w#aU5qC74!5k5x0>iax9{}HLPo7{Bfm#Mj9m{~O_j$VifKu7&BJ4#d> zNkeCf4A60730##EblWZ#rMmQvJw`6#l@QE@+nUhJZ<@LK6N(Ub#&J4#BRkGQ5JJ1I z%+`bfJ*fD)D5|TnU5#Sv!UEgaS&iuGZ!@IWI=Y3$MakkhuXUrkX7V4=1x0eo_4jbY zR@ui3Gn%7AkD9oEUv&+-2S9BAvYCC|s49sMce^D(*y97< zq4G^NO2V~npIpdkhRurd|J{qwxt)I`m~h_1gmEoK(7`p995U)Pt{}cM#=nC+MF2gS!zz1h_Mma)~S2OF?Kavz0zx{yvxd=Q>X< zd>jL%+l@`_kDNs!PlgmscbWI{Qu`k(!;x}$ZBq%p6HW}&a92|Yk0uy#3M+ULp~KkP zr9?z}u5=`Y`)bd58OFtEAYaQS&%N!TdvM9g9So1;UMVVF1fQ>JvuQxoABOqtx*^gP z5Gpx!({In^FpCp}As*o&-bhyWlg-`byKRN%q)@2Opd&;paPeFdis{>>My$r|ivfQa<}QKVTIz!%!et}xGT`y&17K4I57%Cr zs5af4Z!q>aSrFc3jSw2N#r4kSU$P0x!7teohawcL!wwa2e{1J-=<+W_uoC$v&G_E1 zB|${mNxv1Z;9gdHoY3Z@d)UTn7Wm#Dgo^(-AHb_sEte!CMXj@j!VJJR8>ox&-e<6P z9p1%Kp-1g!ox;4ds|?HRJ0*x^+`>7DFd;kbWH{rRy!5I4Cf+bFVFl#+T_l0P5)cr^ z;gZvQbf_gmROI>>uL0yE&|-_~w5#U;T7Y>I$v}&e+%$@s@WMzQ*(nsr8E3trPhI;P zI8AE=<@%q>N?)z@0;0cpm;4&^WpIbB>9hsoG zxi&)kA|tOLs(D|Cbh`KzP>`8?wP)1760|Bu(Ws}+|3^d#IJG1BNfj@hXfa!RodS@# zWo_f{p};4j***yHO=d#t;?tK>!XJ)iQ#Uz%sFGf|?@QEFQ(EjnsQa{NP&b`PFeqkN z;rf z8!ei2e&R7gOHUsNv|PGl#2iO-oZ4LB9YeV~bbk9X*8AN;rY|ohFx#hokolt_o|vW_ zZ91hrYU};}X3P)No{p0YJ-ow9gga)!PJ^zsE>q~#?WREghN)@hgbPNjwok{&6}YQ< z5t$;id3lBrYZug+KZ$rmQG3oI(7*ctyV8(?d)lVL8`EZQKruJPXnM@5%n`FSZ-&K1 z58(=!RQO_s&PWCJw=*z5Ivo)mN88c@Vd*|ME`{k&d~^yz$B`ZD)m$;j7s<3=e3b(OO)`k?liI}jV0^XfQQa&Ps*FKUKKFC28g+h4M>6B1#%^@hh(9INL5zskC2vwYxxU`;MKv7 zGFoUlWvL0=T79jmlZZ6UO(YT);dELx}tg_{XHxB7()>BI@evN5<6 z`EU6jRn}bH?I5Ks?xUnPO%)Nf(=hqc@BaN1)htkR*)0^8&awMRwex z-S+dru-6*%8(i5cpdxLF%i;f{G_4N=jMHEH>l82pDYamVVV)S^YEF;ho&Y3+)*HBV zGHC?vv3`r0!u7J+HRdws{bV6*zuV;I3k{wZfnhV~H+j!*+7{fIckCB7=M}mY6M7@k zB(#8n^xUt)6rS5=3|!{!$E?wcDM<7Got@FUeN@G(8FuuUzgNWKg8|)K5DWIWZQb;1 zka0@k#(E6!qbF~)l)c%c;0ozP62&b6oVWQi4b{LRHD?Me)4gnC_{@hNsjoM*Vq9sV zvJa&Gi;{v-VKCa54_f5>V3#J?^MJ6-nP5lq{(t8Ni*+Rn;7tE$by{C+3UJAc1*MCMy5ZmGcK6D!2*E9@_ z>Uajja?y3eQ7koL>FAA^7nS=*s0H#G9(eLsNAOy zeB$&$^_=BvIs}e%c6YLbN?5UstDD1$z!g>yaD_F;6QiGNM3x_Pg&}M<2D%+g zkNCE1uMdEm04N4P1_%rRKnj2(+@HNRFwVoE*i3`_QyU2(8}hyf6e&2|ro(Y2Ra^cT z^hb^-?!BxE2Um0GyqN^HnO>PIZqE<)u$?_c=mgoau@X~_>q~Yx&b~UkAWMtTn=?&i z`TQweadT3Bx6yOXt4QSy-b7o(U8nUjowF?91lJNPX+h;#5 z6L7EC1USj-O@Qk*joXq(lA8SkqO{_&?WW(|PLgPsUeYqI1jCNFq9Z{8{ zx;>HBAyQVLg~&R*GSG_o$rOpyvO3q)3S93{mcZViKSXscU*s_Fp0L3(+piI7B3Zao zF4q4SykX3+yR!2}@stm^SDB5}E?L4k)9n#_gMb@RqSUCK)`x1WLwo$d4YNpr_kP5p z_?f-?nj3jN0_lo74UEbhy|clO%~D(UJ{9nXE<5S@4qRS&H57dv`2RjFtv6G-$1T_y zMeFHpyR&a2JfBZwSzFlaS-H5leE!n><#UCF$8$(MwCIp?qGPwvgP=)A_dC6XDqXBQ zF!+jArUmQXzmx8F;&){7qoam62ba%=?jN&0qai1XZ^uRcpo(^zCLXoX-)3mC2xyQR zy>s#u|1v1_XeMYb{OBfC4fn4BcQ_}$k|Wnf$12BQ|Z*op-gDb zOwup34WBQ$_Xk1D48PX;i<%japawiemRaYZ%(u`uysMO?fpOPaQz4OFHU%#xIYX} zjrrb%+m7Gha8SCzG9VVN_vfL|6}og|I-96#YHvT~vNL^be1>YehrI$fxZPX5a~4{^ zJZ5(ky*EA^@lR1#v5*x4K2i;Fkiy-%$t&*t>e)$FSL!Xg;)hDzlZH2S zJLHGP!2Kjr$Btf*=)5{Op<0BLbNe0iqcoAP>&k48fph|8cdM(`zzX={K*|R zo@@j@nv}7E_!R!S%v{fwiBf$^5>N6Z-5Z%TW}`oi)t;tF+9HdfdN06^M!4lF^Xs1$9z~z2=Vf$8wz4(KS$kcz8+Q;gpt;j`jsGlbN8*d9 z%bZ-jEW@byNN4NKDC%4tdJCpH_haL|!jsWTzb}Nd0d-I41HQPx2F73O^WjHG+l;dd zfnO&7yXvGBmH0zZ;kTiQZ;-6>;S&B=7pi=6|6zk|nnL zLkCy-x7u&yIQeSuy=swJdSu9?M3V5D^=Z0zd6@vx?byNni)Ed^1@EqO&`${VR^Q%J zt9LrWJ(oeFRu8b1LNTIN0S!wGv22TzH+!vVK73nWdLbp3FE{iJ?pf>l`jL31TGY)t z?rR=uLG|=w5TP$M%hs{Nn)_9rBw7{?37=PYE^H)sZ(Y-uun!Mz#Nc2q#d)Q7*RmGH zLtGtypPsq|Njwam*|l$6vev5R|m`+u5zYLii|+C44esia<~ zSs6?49mTWzaNvC1NHZ&+(lq|;O&m8eFEt32&nqVlWWRgoVF^zA9O8v)@16#_Mf6dJA=xaZ0tG1y0BxQNy5nZXoT&8Ek*YtR^ZQl4Pqc`_V z?+B0Fyn(nfIccu=JZEI_`tZ#=ZWX8I7NV(Eo;;BuPU56rs!>t}Z|KxTKZa`v8(cp| zwJZ^%mJJp-&S|UniozLMobFemHy?C94zX{fV3*G{C4W0#dc-sF=G9L}gZC4*)YxXN zZp~bHV91P?!*s+^_rKn^p?*&-*ta5r{M{D{MOqqut{eUjHP?Ei;S$;+Mcc75v&BoE zoQOO+lJ0ZcP77w)^&l43EEE!^$ZM7Yjt52GEq`Uhj0 z{lksF#>K{uMlvXGt-Ps&FZWxU)l!v@rF$?+3k{$h^4n(KG9R0rmoHmfFpmV? zz*W;k?KZVRh?5#CcUj-Rvy4%%3{r^xpCd&v4RUFjhVw+BTkq6X6uGp;Hcq!Ie{F}c z{?m`<`0P7hIvmK;_-a3fFc&>dr6(FW&QEBUcxWoXHHOA1F&e$%zpbO~|0sCd-at?4 zetw_fCN(Cq`7mH#?AGKI|8k}MCfDM0JxSx2TTHZJlpkoK)1E4jK7airQeNoV6VjO@ z4S`RIpUb%F8`2)hSz_i)>MWj@RMM9VO7lH#{7AF?o$sEKB6sMz%bUnE|CmSbbR^wKbM% zyj=zkwMgSK!+uVnnmfFGoGFs-(ueFzlG5pE!4)p-a=VwxUU(9vDk&|_)lOL ze$Sc|Cx4J=lh*ZO)t&VOl3!WZ0%w}e|MDJq!!GNdd@al8o(km>sS zT{3G|&(|pA$fdd34-RXdx=g+a6qzs^*PlR^K$iTAUsitXTYFGPEaxxJe$2%tBPIPI z_4A8OPn)JYAF`bW5oG){2Eq?!Bo%n>wtIx;C2dLQDY$*nHAx#P43TRRa>w#lL;gyK zH1)SPzuOYbICx=b+(xbfz4vnUhIS0oo2|Qph3!vnkdC(WK%QM=rHy0f)2W+H{HgVr z=V9XbQbZ%!%)3$zTeR)%hHsd}r|zv3SxGuW45WV49< z#CxV!^4>gYHn?^@HzGgib)AgB@(sR_(y5n~F&AcflJO@GFx`|J+Z~j@e<~$5+$To*x1n;vDK(Y#mLZqx_&G75mf5rrhHH@GQeF0neJ@6(V9ZDT6Q<=t zM{~O*R&?RLN@9ISElQQGXUd_JM&A5t>|?<(nOpaD-CCsIihrGYZ&XH4J80whzxE>~ zS2JNs+ZB#wnB;gYE9`FT;)-paALRFw!Jo;xw)`Faf7ZmQnxd{GKY*2!t6yJSLqHBPFc4ATgDD zeRI_AnY4y`FU7|Xj|)A%*?t(;C05>;<0m@R90nKJ2*r@bBwT-14Qn<&CVThM;JwMU z{cZRC!y|d$qM4Of-+OT8BpI=0KO|lmI+6EBpeYv;KG5?nMdB(U-*4nPIsLVIJCzn_ z?Q`#~y`$XU(-LoagkvD5yeM1qYN?Xdeqew<7J3$f z-@AZFO9_iPF5FAZn}=Y`Igwmz=?s}mriyG@g%vp^rP@vv`xn_B_Nz_QR6QRyE$#Dd zM&EyNd_b2_V>r(0C)N5`On9W8(x$+eTJP2KsdV>yFP@k`IK24sTRCyMDB9qh+X;Q; z1a_a&^dQERjeqx`eBZ{EnlHx9e1+@YFOw>@J<|xb?@ZJZfguUV!=G`FR2;9g{;GJx z_9o;#^#=Tr>nqOprBl;Ct6tY!!Khg=e%R(b^xRHl%zX=acg^uWO>}Qj{S5-<#TAye z+h$uo0=I)CH=i5cw)L2Yx+Qiv=S058jTG{iar!F&Cw;B21rK%<3H{j+<@KFn;48)7 z36IBqJeo)!nhgq$*rKc$S>}Xgdif`jE9q=wh6Ab2b5UFNKN7JRkMiqVh_Q0j_(&AD zmBt5kGylEp-}_(5gc~K1`cQ^<^j$xo_IIyPY33xBx(XQ;AYqC!AKWWS+#0pHW_T=2 z!~^ssDN5Yv-!s0APuR*%;CGKL(nF^2ZrsSJ5Lfm2o-1~k>hQbZ*1_S?T*Ul(P|HPf z1B!TnNUbGKSOK4OQ!@c2&2Hb(O6$$ zneLAMS;zR4WDS2+lt`e#o|Cbs$cN@g?!vn366GtsPM431eEU^|+_!jN4Ef(8Uinnm zMq>Seg!{_MTFHw$mBY$zZ1Cq z^lwA2;F#urRUP~!Zb_8H5~b`zKNN0hPLUK*mJY__K$sBBe5)^e$UdKW8=Ch z1ZEq-0-gLke!a9?nw>3$bH(CZxXV8X#j7(jc#8!6>-d3vDcEQp@ZE#H?&ZRVpsp6S zY>E!7O&oh~Zp25h`S!q$1=|g@4TuD^=@r6MK#b!M7`A}b$_Fv*JMEX^C4WMI^S%sy zrKel2EN)AV=8Djk9nE%$VL5?n`f+4v1(y&|aI)$cni)Ew$LQ<5X zrRyMCiW-}G;m<|G2;zn(g2APUFuanftjn6&oQiGe2HeQhG!Znc0(ztpNB{A~z92tu zRS|Tsd77;MJ3(eq|Moh3P=$>#aX@uuldkXYgYt#%l!JLTjKRYlD!@T(JOW6)Pf zsZR>^AHE+)qxdF=bowf56NHwHS=*Cd^M6dLcj*01*2RJ{pT=%HQ;>iO8yWV%>=>xP zy@>Z`^qImI3W6u#A*}o z!2qYe&4%;p`nWgl4@-g{j^%hHD~^VeVfp~G!hx{Ob7WjqD;%-C(Q4$!`cUL;JYFaI z;Sz_y00ZNJHg&*j$AYAg6;7I@PK(S#yT)h|=triYqieUeLH|a!$b2v%@DB7bva_`} zz3xZd?bSkoz)OkiZta|`gvXnTv?Pj4lJY|9_!V=?!ikzpB}tk)y{0Z)cf%4{y-^ZL zQx{bLMhZBjNLt z8&5)iK1A-^q(&Ku{^ogXOPtz@G(S8aySDFq>;w=dOk#|KX6)p}Sir zH~ND-L^lDo2IjaO(EL3p4^6f-hbCis6DX0NZn^L`{b`ur7$ybpP5GnQ{L3$mQX=h> zD8boxKEg~fW-`cU!CQ*Fi%!J5zlu8LtMH0dHh%mns+Oe5!+JZ3KcSkXMtQU9FJ|mshYGXG^ zXvU%&&*TLQYUuNLP_O{T%aN-Il$az}Zy6@VWy)1^2xDd#tVb{^QHKOe9Vb}qUBWk* z?+2rL#v2-A`o!}i`tQyCJ~!jjXdL*s*RMzYc$WKzD+0>oqFe45tyB>%OAk!yoF?$= zsnM=sEXRIjY?qb!Jkj1il8i3$w#XD=rie6&1K*I9WB9HeQ3H9A4EdP)Zdql<=}u;D zDqw_tlUcGmU}$2aKlV-TMDAZ@=I1wMCFA|y0!*c31U!NFSTlYTUcjnB&+(Wy4)uRQ z*7Vu z8gzoa+ni);2jfUQo|SjxWdkL1tZbzG{+95kygwR43#j+}2-eWV2HHQvP!UG@`ewgF z#g>MVW}7&Z&D$4Z-QfYA1Facld7w4tRRPo_52%8ncD{KL?R-4fCpGhLjFZA~?fj9k z;+T#@g}=o%)y(zw15_B_fX1}6#7{6!EWu_uT^rN-Eku%)?0Lo&M$nY-Q%h<*;}%)vE`w! z$W^6R6sspuE^f{U;#sed)Eu38Jy|a^riC%bLTy4d>b|w)$2QDIm>OIg+a#IX%vXp; z*uSVg8xO(+eKt<8FF~IT>JDygU{nO}E|9T6>K&|MxIv@t7;4ADpq&7^quaL;*z9QB z8T0y$&Hh+mlIGwId7S1Lwh=BycZ{d-B;7Ht%eZXa(aTwM15_B>F^p3kU~^pf-UT+# z8nT#ewbko3)D~cJjP#fm42!hKf?=WB z+!eAZO2@=Mv*a*P6^)qX>lG#NRyDVzty-E%G~>{s=PmigP*K#QvLeApomfguJSK^z ze8sFR{Qv6gwY7_16Wo|hFB>^Cqo@xF*R!fk7uW-N&>%uMCl`H zM2CkEIXZ~37aBl@Q@*pf=ucUWBU_YOvg24&&7gr)>W}@nU3F;4uRyu)G>P!x!h)*y zU(m-g34|BxV|n9bA4{f_2cv4EZL*q8;bwl{OY*Ut8FaB+l0F_^{UjI52qa^PFb=38 z-8nMGYKL~t4&(i=om=cU>SM{Vu1+~w??v=BsSjNiKayo9$ zag)WR#Jw<`Wk!x>y<*?L;+`J%ucShSLN~_4ayk9+cxp^^u?&-Ayj+b?W6-}cgfSbY z18igbE8_%f$iFgS24akVWoJMCO2(%V|7v&K>(@8)rqPIhWx%Q$<6XIQ-^!#;=|%ch zR>%8R2K*TN(RkQI8f!}B^(!B{XH*;#f0B7|2mRR_5{$afsJYf4k%f^<@RM&8XGD!O zMlOxOGO5amK)zXI4n&Z~8&M>o;#)?pyqVRTT+oy=l6J?)6(K)Ij&p`5hGz{Y8LTPy z2izMVt9v|7>eGsReTY17Nm7eVB3~~n|M$ohMIM}Cj3lZ`P2goyQmGUvBNy^IrowC| z4s(94Z=%C91-~!5yf?XI7%mk_26N^sM0;<0n9c)q#K0LoX+Ckl&`n_YgoL0eVst%* zvC7v+*a$wB7Mi)cIV|6mM~0!dG>W&(=$!bw5atm&56}_ge3)+Nv1t4QX0|U1g8fkZ zC>e*NAmrA{VcWVLj-L_F(hcx-)VG&T}A)L37<+V7TEQ$5Z3RfTqQq(6UxGyD!NGeR>yQve__D{P4ouCyV1UPUwS zR19p;cixHgGL$<_H@)<-mr+@B=$$Y!GqroyL4XZiT3eHJ14MZJUNnpPS7pbRWxSZ$ z@xp&4lCZ(GFdI{_Fyda9#hIs5$2=;#k%XHkq3A5izRiM8VZ``fE2}4tRFAEdeKoch z)}s0KcH~%;7DdT3aCIz({E3bgRX*TU9JlQJLiKQ|x;DLbh3bm(+Cp`qRBWu)DBW>1 zW9rD1X&6@1_kv(HAjQ5#ZHRho7N4EsQEx3F{%Duadc_@OmBgJ%DIw`e#tAtLItS-2m zRQ9XWqqSLuqM{TF^>VqMmG0vJ)Z9@B{Bp5YFP4=;K`9sOHCB2i1!`cNg_-0q=8s#> z18Zj*W28ND_ne5OBm1};HQk6UxYz?DS>t1{Cc68USOa2I$>MAP zba2g}yj1qg$4#%i^qFdN0Ik_nxyV-?O^EVgMh10&Fq|T01zvPNDyjRSfav%07?{xN zw}sn;*WfHshF+t`cuZ3ySXA?7x}=A#OT8?vGgNm1V0)x#t`(?7K(D9Rh&r6tDF{PU`l>iA~riW{89Jzob#!wmAzxUojrA5qZjlb4N2_RA{VFQI?CEzFZ7>6AX*Xx>l5Bkt#7f zfb=BjqyWOL>e>{Dxn2wILso!EADV+N8>OK6zN=iOj!-!HsLc=U4RGm3lL zB44VUZ=F59Y#A5-Z}u`h)@#!Ump*UyE=Qvk@&sqfjppb*!vu6!w+-#*4O^!#yBvLY zAlEVDni8%6+6S$ERHBp*A+iLNPr!?%twTJP|S281YD-j|!!_fh|=?Z9xF9#V)N8ID3 zC8I!06NKPmMgfZ1CgG!-r%x};IZ3d{*5_g7qdhH({C;Tb$IDGxzn_7TNP4Sr7RBaeJ zd0^or9@`}1g0qf~pZJ_-GCPor;YcfT-sf4bP?T3#-us;BD>zo1pJ#Ko%+Ux(Fu50A zaH7Hkimg0Qh@AJcD+}m1PVO$SZwW)NEVD5TK#&aGlK4|Ly_&?GB`)Q}Um3ZN`{pZU z`IV;sxEp;1J(H{gsSk=O&5r>^>;syBB4u#YgcUXtKoACT&&aag&#RJ5b2q|u1dcWm zo_|Hc_m6?+$I<3|UkbIZyz-Tbjx3^oC=G#>mUklO*$e}pKJb7_2wU7d2If%`^~sls zW$Ie&gmZ`?CM07P^P9zd)j60y;zT*7bC};pFAwI_heTP9tt;3(djtFX?#6H$m>$oe z*lpmdWoC126TZ5ZjkhpuL!8W+ebsSX=bL>8`D=93^v#fj&61;Qh44_3goa}n)Vg}1 zTq#!;p1mmuT1{*>du|xI*XRxmBMZLoST+oT?2_x*s;1exw^rY*_iaWTZ_f#fET`M; zJhJEj5PQkuWiSSrdgu*J6lKGfgb8vHv8S2*p5p$`^vYo}f| ziE@2-dCrAn!VUXo5KF1p&)Bt+IA4l9Uso?r(bI-&z@KFK7W~a*K)$=wE`fEXnPDRW zGfLI&$!Pp+H!L*>LYS*UJS2JADgSR9c6;9)t z+g?Anf0BqU%R|>o7Tl^dEnE^?UKx}$6|jgJAz(qZQW2px3{6LLtxxRBsP7*{23PL` zGM3|CgZSI}hQXE;zxE&w=6Pr`Z(0YqnC44ibC;{6K}R^qvk!nsVpHIrB8TvF2LBh- zYk0=%3&ifXhd23-UXTDGBHFs+-=s&aN;B4f9B?&t)3OY@vhuDRWbg2clrFv9rdrY0 z>btx39DfkfY2eUt%+&*p5NHhzGj8vPG`Grm^B|U7tGD#HS!s0&HTxAP zFuE-w%u+$rOu)%FGlmss>j2*?S5~B=U+{|>wcox(sb}ey!Ew9gAlhSpASHPraMlj7 zNfhTuufUP*ptXiYCX|hHHYvQi2&z;6-}}A5tu3ttG>-0yip6rQTVe2_m6i3T?i+_P z&3^YWA@55^sVM-e3CTsRnsn?ojZuI*Xtabb-Px0U^#_ok-@yZ z4^6`ixXq^F>)$_tlzHFuGK@3(Q7);xW|GkzNuaUO>g45SB)vvI6y|BO0Fr7&q!dKu zauk$EWWB*G6imY+VgF)CEJAbO-Q+p8>zTUfhP9Gis)nwpo8zwK`k^|s!X1`bg8>3G zUrAS|BADF<^T>94X*(Rc%Uk3@T)7S*AHW7g_MtK87-r$-FcpQPnWqZ1A77KWG+d>(BhAl-ea0`ws zO9s`z)(Qd#&qTGL>#FUG+*s`EH0({T5^h9WaX6{rXzXm3qZ-{l9G3>i1yKPe^b)4G z6GBW14|!D)$VduBQ`bG)DK+uT^bNnX$3ioQDWmxk9Cu@(eCS#pNnQ*HdBme$V^luRl7Q% zF?PcKu2qkTZQcX9rpf4c#x#t3)Q}iRalIm^7!F#atgJd zg^C#fdlQ6I&b6T`pEc=q`)0#v`%OFH^#}lEK>v+hvf=N4%PQ8(D`oimu}Z5_Cgt*n zK}CW_fx`!LH9r9A617XU`tseo?#i`g3T=5B;K02pIz2{?I1f<{f&&L4l~x%bs65XB zia4M%W83sycb&{2YGn{#e{pSln(b#Wp|^+5mLW0N+yCltPyZl?wRL0G)Bna`Hy;3u z1O2>`liz9JT^GmC%>!sc6Pk9$S^)hJtQ>Lv*My8eJ=EpDFrGM{MK}jKe4!sl#QXLW zsh4D6q&%SmL^LQ$8iSjWvePHqpX)3kmX8Use3lSPw+e+HAVE-#T;lsaaiVH)KBMA8 zmIUGI?_qzi0Oc@Dq8P7S8LVI23Im~$d&%op()=&Kgk-4 zD5y!A_-*vq>bm|60{X1(Px=1T+tK^77Gmf@O_GFuez_$WVOE3{VJq=Y^&>3MC6(s- zi@SV218Ou`>-FeguYqXP(!!uzV%D;w!qv$t@g#pjI>XGv;kwCq{9rlVlM_h#u*nnT z^{FAKpzz54vO7r2%>!u3mUNAEGLMq-KL0R?Pg(3m~WdgE)FA}CUmp6hUpJiNf_bU*loi6?hTt!^r_Y=n>=4_ zDMV5U{7^*}H9{nrXp)M4W>q4$YtuzZRb)F)9-|_vn<+XJx>q^0iW${(>^K;YHS>K-(VaRo(KPqAbcm z!6s_PYn`njyg|4VeOYYX9J+R61Z;z^ro+^8+aj0Y7}1F%b*|lwna*6p703*Iwx0vF zNvqd}b_d8|9=dI^S1_k)R3UnJ5*O7ev^Hf%M=P-;wmN|*2A!5D#g(H8#-MkxXCe(}KyN1ta(yha|CAJP_%VY#_|l4#OL429!(S z_TJn=u`%B$F1$Mv&9P`Ii2%P>bPQQhCBH0TFvB@@qrtNdHa1?Ki0Nd+j8vjs-NCOb zQpE!$+?QFtHpw4ZUl;dU?fi1Oe^%*NRGM4u^dnUL3hm1czDE;Wu%FRi(56$+94V&T z7NdbTld|i6rGC@(3xEBU%9W>%_%?C!n~W{_Un!e2r&hlb+5VAJS03-zCs=G<=n7c@ zXsgW2zabnKt`TkmS-nSijqp13b+V-9j)V!ZHczsZ;i%^+=Ei~&O%i{u$H@iEr-Kjl z(g(8h-*^cUr9U0Z~IUt1e5Xs%RzD3#!&bKZ~l>Wm8l& zrNqz9Bxn4Q^xjTkrwRW*^@wd4^;X-i-&0FUw~H*1a#J=WO4X8tCrStOKGl>(_DbsV zGc!5kk0kew!dst#e_&4`qn*ZfNWu|+PdFu<7H$__A>1pxNq8&p5PQNHP)9`JpW)x` z4U!b&b--}%WuHYg*%l)y^!f$<2%UI`=-!GK-Ws}{TW-6xaBJkuE_+wz2%MB|Pie^r zT<6pi6C$#>9=Io(NZ{lwB{2H}(OoyXHS$(od+Tkt*tdq>@~rdDQDWCQB})UueiQ#F zNz8gL@ki>(S#pnmK@jvLwtfkE`nGTwDBJ-W9}`ZZB^AV3NL{!dg`hnev$!Jx3>CY{ zVE35Rrp$ji_}}Z!hH-<=?!C)nVG)vwdplhCYgr|RDzQ)rZ~0%}vg-${0saU6h3|at zzbQl{OIxbkl-0*%si{z^G$r|Q1ur!3c|7~^gW%~v5NNUvWkr}0=AfTngt1zW!QFC* z&B6%7Mt}IjvY2m^Ry%d6x40MGng)_q4*cS#E63AARY?ElZ zA9bD$i&C{i;*Ay$5nSKwvJEoQa{f9mvtW_@^;bdXCyGZte}rwK(Vb0#+@4M1-DXR? zg{~65CBO=A%(w=FB%kmA2_;e1q+4#mJu{@cnbx`o$5&@r@y>oo+}0%&kt|x`*Q*Hg z!aB=$e=FDuZxkM8yCscKC!dU$(*}c~v!uN3aJEZ1D-$>0#hs-5=Vxz{as-QWIekqn z?uy#gJhSgV67_k$(ruA@aTW&7q!vFVC9zL97AtoL4p8r4#k(c(6L(;|fcF{vJ*2E8fdid#6-{U#P+M+%|&X5^47%L8ZT}2 zujJ?PD=hC)1Ms_@^&jKm&XwC^+gGyP)@r|fp$x^H-p&vPM_H7Id5bjMe#VgC)Xb-6 z&W%B(U-~04-+)GF@%Zj;V)L`Tk}ARs+q->S8<@?(EwyJ8eBLwyCfBG4-LV?c;7|Dy z7+a-bI8q2M{C^KWtf=ZB3@aA}LnD)~2Hg*ig_@s&fu+fy{PQk?qCCuK!eiZ+g$qIi zG+7g_h4J3aZ2X(#Nkeyal8pcd7_>t(!KVq6;|>h%;zqB(aDpaH0s2=M8G^QrV!*4r z9(_p?N!Wz(*?l5a`^694=AT49F0rkI-Q}90Sf$UXGkC4zUyIjfYm#Vbx44$&{tr== zt~HehBq{kM^}y6_WRn0pPSl(>YU*zO%I=gTmkY|Q-`;9%=}Jgjtcx9aPC8EVjYT4yzAmW>|gq3|E%!7xMy)Q|q8JuLD_Pv1n5wM#|xQ zxGjPO9pgm!iiokG>zJaS?HLz#cq9wXGOdUkc%AJN646F6>hT>!)>Im*VW)+=@x0tF zdRoEqJToX+ci(Q>ibl28Va0+0l3Q5%obH&OIHS#mP9@Ovz$!Ri#gQfQ8fAqRG%ABh zM2?GB-FV{*is2V*UsWn@AuOoBwqsZ@)FFp&7FC%lcA=wLYAG^`<(YC(R_(}kZOy(4 z+Lj_Kq9WR7{Ju{C*M_T@t&MG*Sd4+y8incZM}E&M%MC)0v1pdP{5txob%+;U~G!kDS+ zBq2PG?CEQMjnzVG#Y$4SLam>QX2RE@Ka~{m*wX6pOxdP%6R2V+@JBahi_?oy1KDn& z%aw$pt|s$b2|S)~1ni8fa`3b%Zhwo~fp5l$AUR@>ZH~K{?1dgiF&zV>rkYeCz9`8G zeea!4=s1-*QBJZ#YAzGLYFpSMB`epx@fZvj`P&NH1u%|`5H`k#Y zBh~-25oDws534w$NV!Ne{-vn3+JM*W<`6C@;c>)R>vDh<`kPcyL~*Y2dR4pd9fno{ zK2o0XT9cH;3cy$_dtSL1`9^h7`SpUTGGt~q)JznD=>>n6w!qXtrXNeZY$U7#W*j6CO598#lW2y+Ug2% ztpE+MAX%5pI-xI)yZDrA`C#_p(Ph&lJ|0$XmMlxtEK6GVE3_cVbf!qijpWS8WwtIR zFhLR2iIR18#@MU(;{^snjh*vbx}r!%0bPyOY)Has4PGnB!O+$GSo><>`&cH0BnxN` z{RnqS1=$#)bpsux8<@bY(?qeY)EHAB3K}@AHf^_T z5&fq1>j5E<-DWFIGrZnOo<{fNG#O}7m8N%a7A|YwxqPAN@K>COAXHjw$*f7 z4!x=4Rf!sk89AaEMn2F_l|E|_zgE($iVbSRkiNlIyz7xD!-rSWoc7^ZYb-g=w&Isn zcluC8Q_HTp=-7dFWJ{-RMW%jSG$h9~iT zpN26IXfEWJrBVVcC?$LDqY81#>v6iy585Z)tvNcebe zeOjllji(3JTo0qyH}-Ic&t9J@I3!2u0P3{!39uY6mAWk65HlO_HEUh;bFr7wIGvU3 zwzJX}YvL`2IFg4EA|nwyLo$KVXsNQ%(ll2gHzhYjcZVphrZw5qH#M08AUEx>A@Uyo zV47uh6_3lDm>&fyUs!OsgB^OjO9(lxh zEb2JFJO*`UYkm)u+!9#Z3fP;t-wo!qSQUG5H>NS|(ssO#sula!7Ta@>S)f0I@w1gp zck$*<=geXEnnqkH*mj{3Ul*4Pj#DVd-zt~xFPEyD&f@ED?rfZS{i5?~%b9NcU}M^` zvI4?T$oYA3$DI!Jd}lz<-!Hrsbij`ZKPfz&WxU``I~)jc%Ae4QcP{d=Ty~gochZem z!inIZ8ySPQ(o6+-_-ubut*?3fn`e^`|t!zUh- z)yH_!9C?qsuhV*4$syTDS)Jp4ZaHyx^NaGp$9|8@CHvRT4m_IdZM8($7&u_Ntx{%a z^_USK!`Ne!4OZAj=6tWoz0yh$`L3da0xSAUo}@{bE!VR_)Lj@;tPr!Ph|ohy>hp>! zQUz)bB`L%d_7tu^uS#%DWZj>b)vvR4dRSSAySlb74wk3+3MRrIE2-mNHio7x{rNf;*v zEUk-2IZ&#+u_3DpnD_MWR%ChQ@3;>)kAH0({yC+eNByQOXmb$jUrQzy`?y*{oq4PB zdSibya{-!Hj>Yhcyiwl04`w7sYas~L2!n|Fxzk&OqroG8>4gM(h2b(xmnpUv+u#cZ zqb>(tcTNjE(KIU+(-gf>A9(e$W|tigew>n%qfr6sILsp4axdMVNP7dd{J>Z`{b{bY z)?{Mkaa|fG1N($h=4IlM(ICn};rKd_PwYRHmlKSDxgs|UI~HrYUtDEtED?4_!zg(+ zsIkP@8UnD!_iV{v?2Mxi%b|+)5lbZh)|Zr zScE?)5HWzER+W%Jvi-RzmPA=50o)Ts{H{erD8dC<7V~;#j@c7DQZnkq%mWW402BAL z!^8@>Ax5XS-rHZeJ~|#msSn|6#?tyP_J#D+KJ7J6QX_wckM`e@8Q$CjF))De5=i`^g*&WpUgy!XaTkiQ4V(#rj^NZ^ASpBf!iA z$v+Hqp5(1&0`EEX9TIYz6R}j0Z6G$!C$y%ghIkk$GofOmI$k zM0hO8G|sS|?IyY|%Q6sWh4m!#F3UvFZp_&v>AYzYK^BD+PjMeS{snlV$L~#%_H4+f z5WBtn>$fo+kbp6zYvzToo7%V4Z}Mn_Cdc?mZYt04v#Yjn4<;PetJiw5=f%t`3(tSh z#1rC${JHa(w(-JuG_zH0SK;q5_$M{^N1B;htEHJhxvK_@^8){>&d*eCYdi@f{}K%T z^&~bTz_XIeb5auJHnz;?%Af}Ct`_-+AlMn*HMYVAN5Yt|>qg=Ggzpz#FZ>A5{R1oy zLbBs|pSlSlGkUjkCQ_V|l4j4(u?@P}jKMVNvM-sAju!?qVh}d#gHDk$hjFr!070)wvZf$MtJl0<`f%$ZCgsEvnbZD+RL@Vv&{aV!*K?QpD$YGjKjr;2Y!752t>_&6Pt~)k2cdQ{(D$kub?Ar4uuHIhu z&A?J5byd}gN-V{S?yuL%)0R^XH>0}c*w$VHzXe~Vx?113`pV52v9fXHRW(yCh?b}+ zYbt2e**A5&N9E8C;vcR4ezOutsp>(ngH4L^mrEr%m@NTsEPV&sXnCvb; zGN16OE6eo&=va!zo_GYyr2GggKk^9f&78bL z2Yu=ZVWPd4K$l)2Y=b_%jzuQiF1$>5h44Dz4Z@p2vpy=kM|hv`uY`{YpA>#d_!;5n zg{OsI7XGd9CE?eEXF>Bf(&RI7{vR%_!EYm6iwAG9#2aBpfsbAS`owYvv+S(FZwQUN z|B|Dmdz3VelJF=QxZZzUN#1}s_~+nB|B>Lr z-wb?w6TYPDhtjWg2fhVwgy$adpA3dS7(15Wt-2B550><#91sAd;qjl1 z_To6ka~#2YF9w7#c{aRECVxF?Nuzx92e?1*K33IbvUn0p4>9oB8w@>P#+M_j>m&T0 z1sTA2-84G9`tA+c79}wOoyhHe*#IpL3@L}N2Cxo9Aeo^>0!smrA zqRuUoj(16|Fb(@3{#5c$AFNhs(hx^JFQqvK-sF~u4ezPs|H6Nps9&D|4yFJ9WuJD4 zZ8#X;4jJPZZyRGZtT)Q!i7jwc-bI-TI z&{M$Hdy)b6Lu1;-1MJRIAo7311}IvN`njL%`F~<$x$vERY=uGnl=dBO6dn{F8q!an z5`J3vjPMJWX%lupq??H~K!-ms%>taH=IEsu4*Qr3-GEyMPbB|)6Yao%0#o6s^nbFw zFv(Q7@b!N>P)?cNI+Urg?szMqAAejKie-CnG|TUBj_8q`(L?7W*`^M-pWBJ2Kh4<> zciQV0cP3p;zxC}bg6-&-(*B2gveLNz8QX6a=!9)}J+YWmYxy4ubBBANCw*BPVN!lQyu#qBuLVsV51>^I`v-=FYjFDP1$z zU*k1eW)j)#uWZ5aousVs_0Y?gWT&TNvi-*2za{*R@cY8^!k-EMQTUed*TO%5>}4rv zV@xiV{xhC;!ZrBq*I%h|I9?T zF{UyG1zEz|B(XMF6FD-P^0#;5P*~0^& zO}Nf)26$_?)#P{J&|jOt*JmGRnT}KMV1DP?fj%+a=wpQ(PABSk9^oHVrAIMR?^)Ah zAvn*XN_kXLe>9Exx&Bi)VfIO!NRU;}d=?*m6z6Xrm6OL$FwOHxjJ*HU^}~D9B8<4s zv>z6kLdDMV`52?zURZo5bw1DYvj>BSGmIAjB2M}xAo8_axChT+=9yIoV54lOFuqoD zb0B9VZYah#R?qFa$D&cdO-&==x7#RLv&|--XzNC*kpTA)4>P+t0|V@)M~9DB`D*9U)T~s|o)HEi_y! z$6!!W5jvR;zhmcjCgAnIxKXovGxVLTspqR`pRucXXdf8Jk#MKiKkC5r| zbNe#*?-Jrplz?Y50Z@ne|KnnTppWLqbU>l104hH)78y1gz7IhQ}EC?8Bdl{Y-} zko$U~O*c9$P2Lv1cjz`xTl-mj|a z2PEkO@IhixT=rK@sHCv=@iqAS_<3306zR{Zy0|IApRWEa6_fpx`}NQEYu~@-hbGp# zvVV>F_8qWzxw&NbLCm%Uug7(9aX5=>phw8fioX%>~2lAv2SG|Kve7A;Dw`Mu6 zml#dC7iKuFcr0XL1HhUl0N>s~wbu{A_A}R?d+ho}fNxLt>Ru6k;N!_b$O0HT2G2Z` z#rP~`zDFTIrIau>33S4xo0xU99nXfdJ*a_Kh=EDshpt})qAzwZG>J56zMA7WK;2>a zat#(gxI|Wx*{L+6(^26B?&A?~Ns9U6Hx^L{C?_lFGHLI`-F7eTt%A)8gJzJwxYtf) z@gs_IopL1}Whi=dn)b|Ll;%qBt+9H?}0@R#lo8 z#a4@5xK)u_H>%Qo^?Kc%x}sjcV#hc^KYLe?AVprI9hGC-pldUv2JKfYy40&uBE^z9hJD`W2FF+ez1hgH7HLIY|C_)t( zMN}zRe?4;LEz^am!-uB|(|%g`xFl8QoI()AHP-ANV#ayGkvwjKG$MDb&6m91x1aM$*V>FJj1^QE89v4PYB z^Yi&w!irF4yO^EGL(w1J4FeMQvZPgU#Dj`aGr%1VRkAaB23GrBY=-Au^bt6|M-<szxkQrIBx;GI1`Bq7TrzHcvdKe9@Dvnuw_$J~BAK84|FmAWMwAfMHB4ztU zAz2KkrMF1amyc^uEf%Z&wX}bn#1P{yfk)YRXN8Rw;xwmYJB_C9sXQ3CjfsrmLOh7u zQ#`EtET3BWbAI-lJa^{L@|>J!`e;0ttWt`QAJaYMR+xacf;(`6p1|%?lk}SyM18AB*iTlg+kQjJ^9>b`3 zo~0yahaE1H@`z}@&@cWT$R?9XiGEhZql)KWkf>BeA4f&{0*quTO!h<`FU#Kk-mxz` zJ5b^4hhBoK1gqlWV1?Ke;2dqHgpQgJvek&kh10^zpdZ^6-i70~G#x3Af1YEBTYCR8 zB*p09mD$<2kACqbrtDdK|H^F8=iT|2n!xa*Cu3pC_N$l@+R!&)T=@;ct;4dKtK)aLBfL-nYDRN1|f4On|5Xrj7k2+S#I}-Y@YYHVJm?Ff^cgv50A)CHCDP3F;-;ae$Bo_aB2J z8%F}R_e}4254XZOY`5DsI%*1Yt+|4vXokd#*ogT(XngfEXX*$<^7Z?jQ1a_#=?&O~ z-yjvo(&l9^Ic?G&^u^O;Bbo`rndqe=2X1UM6Y>3i6QA-bw9*n=YsPZd)81yQ-H8;G zNZfT7GX$w|8<`z9TGS@VN~bA8mgY`056P-=zjER0^Vcj?RO-2=_FC)g>1gL=*SbGy znU3Fcqi6;y-D_UCsJzdv8-6foZa8-#I5!ka08dU#hX30XE5dg zWSIvrCrNjs3wPEcOr;ckQBsV+FoM}Y5fu{LxU_n+YcFpcE-MQ872eBbk{8DF zRi&WR56vE0mL-{(p1-_&$RG;Q6eK6$S3DIXlNg*K74g7xVzf(`KWw61ozVSo@fKqMMrV1gF10AqzQ;*spw3@1jA`EymSvRV_ zs~L)}s6|I_1d2wfB*FkUK*+yXTQLfOD9U=#R!u7Zog7+?meM>rMdwd7iD4L}qHe1q zHEhK*d`~KX&Kjq_{aHI-=T&2kPfp zT3P+Mo@hmqrR?u|QHHy?;|3gmP=pUrQbZ_!vLxc(DD3!LuKcH>SQkZhINvWmUxN3* z1Csb$Nx~;(k$e=l^S~Wi;3z)`4FcO2yjnUV5*f4di?Vd8U;GjHvWhFxDfv9XqlD+b zt4l-{bx=0{FO(z+Pye$h>QJ4ei_+f`C`)idC-U!0(v5FGOho)R3L-5M%ykCG6YNBh zvE1)=Ntl8!{-><;CxmeD@%USKg6a98{P7GIiJW6cj@^>TNGbAKLGf^k2oe82#e;}{KmdK2k>hhB9wj_~dxC)?pUO(?n+XZ8%#|OOr3X$U z`UF2_i3AkGb^mbuJ2)~*irk#ZY?>B)PGMS3p4SC`+ba_26x2zZxNaWzt=U{B3&6|p z=DDB@_^5iJURMk%$yA5oonjTKY!s&MT@+OU|I(4S9tw0_Gof#zfT>D#SvCv0>Jws> zoaS8>G3Vn(7&f85xK_CSB4MGe_8etd(IS>OmL;Nr5`NJUduta9>+`a#Q%v`#o7IXU zTC(C6DyQP+O(jEDZ@>B?QTYo{`cx|zsz_9iQd<;hq4vtdwd?AIsBq2E#D4SuPh8O{ z^ct9VBu(gyZj%)ed%A5A^W3iLic%3B^Mj@%Run~-YAYKnHCHS(7n>#Vc~$wGVcW*% z6qRq&6gGmO5vKmTw2p-XYMCa<*lv~VU!PxAEIf9=Cc7@XJ>E|-sO81e^ypY z3zfc)vqBCDZv-k~zCa&%X2R(9!aG&s2;c?+( z!p{p|5`KHgO6Y}?^3G(@Hz_?E9^Wh^Y>Y|J+8I5^pw;Z0=I?{mJLdU1Ir#ZFO{4y8 zKN%=`)71bc@EMUj_#s=9_)%@#H>H1|CrV zf9l=^O0ugs5PbLjf0_9*U%vM;tFp4HGAlE?yQ-_YD=RarX?088`n05y#78Ya5?zvz zpg{<^1qLhu7SLk&NHYEm#em0_yyl}m#)B;|winHev61bW@e$))vuLn)j)nIOHmr|l z7ai{|V_F+=@B8P=s;uhjwvf7BzW<9G5jSo`+_({&UiSe2n{}O%ke>75_+6aQ!?Xh8 zL+5|ABuZJk5=PUi65Yiflu>ayD-DfW~QP)`ZkLUh5XgSAS!MzG>-!t3?xS!{qO@6>qpPcIF9&qi*<`=>B!%3Ps$teEJsn&L6) zRE4C&1(MXhnSgQoLd?opZ%^>?^`7t3$;G9;##@aD&K%yyUvsC{Wj`gqi5!`w-9 zVvSTU4J}Vbd|d`Tk0#QCkNIW1^@Ps#8t#qUJGc*VzsUVh+?TmO+KI;1Mz>&MF$xf6 zAhSv{lr@})u6T==Iv%81!-?qZUr(?``gteK8{;Tk`GP%X@`035 zE$uuWV~WRPg$Is@RG*5~D2TXXORejpQppm8kbYvxlf>hO`uz;1i0vN_xgf?2TErSl z(X$D9Pl28OI_@-BFCXDP1-<(B#@4uA))id^&vHM<{VMk*?%!`$<9b=sb(F$&Y3Mti)^+je9qHJ6 zW7hD;xzBK40Bh;r#x$;%A2G*PxGoJzpWR&Ry6CjrT^d!!axt`6mbwgNDpWYoFJ&EKk$NVo1II^7(YXFohQVQ1W6YKo)={v zS%b$iIfAIeX@d}6*Kxz{A%Z9i7;+@Y^njk`_tLbTMRJMwX>tevvZIFdG3RTsX!^1S zYok>_?_cGv;DGJyS1*lrz-^@uCT%xwc;y~OGrWw+{Ibyp zBi-SCEZV_?Iw+ww$kWmxPhBc<$LKw*5B|~1TSrK;;()Dw4s-TXUhJS_;ZhF$XCwZS zOj;<^Lx9Vcv< zQmq?dmYfc+OWn*@1o`aI06_Yo8Ml<-SdG=hJRVZ37NcSEq(2mg?}(lB$6lt_5Btsk zhWq=Mx!3$6srDD$$$rH}(dsY0Z+_R+`j}on%zwYl{mtD*_L8Ik|p%r5+}z;EB0neug{oK-&C`I8A_b3RQroAIX2hoFU3sj z7<22})9hb{WPUl!t&gGAUjlMRw9cAW|HjK)KiHmHf6+<0Hm*j0@d-PQN^gYvd@?`s z!`vshC%E5?WjGq8w_oJ(caY)-U!-8AEtXd~;6`d}tc_6OcVYNF9ufX&%1Q=o^yi)l zY=|FUR5ku=REPvm3crbGLw%c8a?T?p$fpdf!Tr)ef;5 zlsfNqx=s^Qf?{?P?B1A~R`FAWIvLmS9DRmnLt*DhRTDQPaxX7R;yF<+(Yz5qER|ZA z<{LKW>@}9SwOuOF%_{7-=nq~dO-bU{1nKY`5k*P}mZ;(unkKwddJdmqPt!EVtN7-1 zo4o^&Q4aBel_s+4OuU|ZLs)C#4CpBw37IJbVvn~7BAGiZ32Xdkr(egSsR?)Nr+qA*3bAK1)7?6m?jG%e)z_UK zTE2ULRTi`TcfiJu*5a)C?|@AydeJF?%s?&Z)+6qb#>0j%h14oI(YE!kXZr7s8LBHbjwN48EjmdDs(Cl8WKZ zSyk8J)oSnqUjZvn4|xdjhSqt^({q02IaA-ijyN&EUZS|sVb7vSIx~z+TO^u}h$iCt5FJ{> z^peZQvl7W0p9e$R_=27%ey!?IZ{Nq(?#8oSc-`J&kn;vKs6h{S%wNnw7NV~6OSuxM zkQr}kcBbylz-}p5wC&h}KU}EnOwP@eXXY>wSfT3L9$jiF#J*qU2J!lM(D$W`8F>Vw z>x5u*0Z6C0NMe1ORAZ0<97P|x`poPUgDzW+6e^zWRtuP+j6yo;@VP<^M_30h$VL>? zP?SyKYFl6ke-|sFzC9BZvfx^Ojip3iD7fp{07QA5g(MslY?0q^D zj?YsFC@iFEC@&zZzMvS-Wr1|azY!XS?ge@;7l#uq!21DHVCR7h?2f8Lc^DHodktLr zBeQMOS;nRCF57lJIeyXKg4yWyV|OjH#q)#SqlO_6amjM+g3FX2*D68R6ZzW|$(S;v zJl!es8IaJ=khholF%9q9N{etyQ+GYF2(LBNGpaEfp&P4)0&F2?h+ z3DO;y(2x~2C+`xM3&Yyk$fFD zf?b%4Qfq3{;RL_udg3tH26aMw0QFuL1Zigd!D)_yN z+zJ2uqc^Sahj@Vyfj@GD{T||1aAh!0h}f1CJ$E*zE3#q8{;t#(30@Uurgc#gcv04Q z6-PRi*JY6xBvG3#N`fE>nv4ti6$LhutO951 zf`THq$|H$fvK7%Z#f4Qtlu-=GqHt>3-2-3qw8%^hU{P`B% zhMQN0eu>y@<+0F(^zN(~88&z}5 z_Z@9@e4#bG(!MCF_|Q_|m=VV(S|-J^cVix>tj(dUM`C9GV6S}*sr0q59yQ{w!Qm)%7#7d{8*tDa+_Y zgR!bVNF(-5TFxxx%n$qceSf}4azxh*5c+z~F6Ue2YjZ}<%w=HuH%-ShUE>;x@U{h` zgKH~lsctVtrpbDsjD47uIGt|l+& zrs10AW1G_~^6MbKV{N2Em=RC=R0)RZ8|Tf2anAvpn6juvekrV<=FtjI zS8+EXg|guppeG5S#`1RCpv~)(K(4R^c6=`P@lixMId9II3`|KcK_}LvyKj7Sb6O;2 zPj^h&lY)Gd=s6yG-$zQFUy4L>Ox_f@17NWY)rH&!_MVI0``9RaJsry9$2Uh37v<4G zTat~XnQ+YZW_vy?$CIDMD!}+@vXK7PIUgq}S{xjc7KvQ(qbQNg5kHa|A4p`UkKn;f zGlL{NaXl-5NT9ZX&PJ>gBS6vN$V$ai8Nx{VA#{L7<{=kieYh@QkCVe zZo#ce3^z4y54Q|`=_c;J&2ThLnu8$w4h$|alr;xkui2r~N(X&+7?|jE#@Ay-gAOLV zWSHw5N1{#|!F-|q`-ZLSWxeO4`k!*m++1F7J)9E^%`D_fn%+X6tY9knVll6P#b(+y zi)0Yu;r+ak&zX{$&zo0KqAcBWPkre|uwHVxl>@e}9k>~cVa=4~QcvcO#W#BajIHAyN(1`^$!a7|KTGV9iZK5ME=C?hF%0fI7 z-8QIxKyT^!xmRp8V-0~>TN;TpjG(I<1>?D`_)$*qW0$*nj)T!Vt}6=0NV2{k9sq0CaWRk$9*|VQbwpiA%Bo53GVU5$^9N1pERa^VL78_7 z2-`56!bmE7UJw|Zu7hE3u8RS0j?1eb+o~@{^_gaHesi=|JOt(OQNRpq$C^o0gkB9@Hmocsv1_jvGdG@^ThVpAcmJ2S~US>+R2^t&M_Q3n|9cxkzSsyyYB7T{+`HYi2OYm zSHFqJr%uNA_-sM%?f8K*34JWy8e0^xk$2zttJ@=RQtn={6UwIAxhWO*hMLeAWLt~* zkRn-Ipm4rwCtjp2D6+Y4DU$|Igzed8$BJx&>9m(4(*u+3nTvZ~CK109VtRzPr4>VG z!UwdJ)~&LAKuK(QTX}+7jN%B2^h`h|v{@0(anf(;$D#ol z)RoopX)THCFt}JqRuG65g@xYc&Jkx0K~r z+Qh5WXx|t*&3$9N<>Ss@4|~oKV4E@ zFg@bbI4#+Nu(Yz-D34=S)3SxekdJRvBQr^~nr>~4F5XMFcXekLE6au7Qx?Gv!mRO| zit?)wv{O$JU0qvKM;g>|^~tb|_L{1bwh_1I7=5q~*e*~gav?G@jZ2k>68^*O5d?jT zQ|R9uwoigJlozhWrkBhmdtIIk;){E>8in5&`of|$Y)>aVg1(n*drEO;_5(TTQ&ckX z^MT!>{Z?+txZAazJRX--p4g60a$B6Vlo3MI&Wt`v%jvb9a2PG3s^Iz)434FBRsH0R zn=;P_GMs+6KL)SdHSDIO`w97le##rTH(aQvatm(Rj{h>-ofWt<)9v}?3m9+5v3Iv> z*|>bXE!K>|sc!7OF1|Miio-f>=GH#{BY$PY3v9g&9$D`BA3aAu_bK>F z0aqOawjaiSp|6We+fl>jQ{ea`$_t^L^ux$RdXBEZG2-houEmh^uPd6S{0sbQ!HBO3 zQMe+l(M?yGN}*__5Bgqt7GqgrwpH9GjTOp6Y)F8OprlMdx2}t3Q4A$?n(Pb(?Ewso zXK2}2Zv#|ku{k#oI!Pub@UjQ^V+_o=RMBz<-ClDO1Thdc&fsr0mTp2ATB|LJsrb0Y z=-&dnWpxWKP{LxtVbxBh%*qAJBRJ$Nqs_X{8lUu6PG$1VDkE~8J<A5>+cMo*_`2C%YGIUN1JltDq#&jlsMGGy!XjAV1>#%xVLZ*a1U*#J>8+5 zusz+dsY5%;=*LH3;WTUT710kg>em$dbH&)#HpN%`Uw|whg(UU6%6{Vil6vw!nz>|5 ziHq}lO)r?$8`3Var7i{^mCpZ&3g4Kbw2A1oZPhqLlR!Ke>Hr*<)Rz(NqujL@0y$0N zz*e^QKvmuv`ZJPv8cdfq`x&m{CgslB#s50*;;@STmnSDXwc0V)IzvPCA1JtN z=`oB`%u%=)<>B!0=dUTk^~n2T(0XzJ5r&ct`V^B(u}pH^2WFRM;ooXyW(IaVE${G$ zwPH~_%sctV5Q{IeE3YK<#u+<5AsYH)x*<;FZMX1% zc+g8b=`@Lfgzm6LG}=D2>+ZA*|2Br9{o%1^4fQdkBW$oF_R`Eup55&?#Ix|gJu%#n z&ptNwn!A|70Gqns;MD@XpRxqw3+_eE<2c_fpKeUgwH`}B1)P@r7%s*aXwBaRGR+mZ z3hJ4I{(!F6!z32CRwvA2;Ryr#IhBNOeB%|W>K5+nKT~+-D$R_&SCNVua119_w97$LDI#k31Ymo!&r6e>r!HY6xFY4Rt;DHp|r%q8&T-njtuB zK%gXjT-E`N(AYD&CH>0OYo@*#!X?D;h*^0?;&K37(Mb*d!}xvv*s-U5ii0*kgzUo9 zV^a-AQ{2SH7zMsQ09%CC!)_%4nJy=|ohB~TlsD`2US<}Eu%Lag07h{umL;hRs$^Le zS22E=DGhG7QBu_GsPg#@ew}rM9+c=}L6!?eLuq9QhqEX(I+J#k8Rs;MZ;kT;%CtS) zLFl2}0IRO|0NyBlq}=E<1048PLbvaRc^tg3ebCnRO4D*0<&U*T@y`RWD4;cdLS%DWw` z^|(w^BF;zV1{Sm)q@5ujl`Z)_64BKjFsW+vKv|Zqq`P!ODzf~rR4~|gje>M9-ATxO z_RTq(U1jul{hXXQNOgzw(WcYQ0_30G^PZk+tQ+bh5kwEHuMYubKKw8nk=8@#Y&+!J z1+s@TI2*>wHuP!EcV!@b2Av>7RH9M^E%e@{h1$Pq%`O)2wPu!zg}yQE8vWNs`9=(9 zV!|om=1+=?v(~-1c~9SPr;WZAr4uO&)BC0cy76hWk2FDsRdH?tQ{d61rHg#OJ2(nI zaMbv4zSF50Mjn3KQ@Z~916@_zsVSrX;Sc9^z1Hc#6~lnvzA-iBsH)LV^wAz2O>XAi z1Z_Qv>+5L2Zmh*hF&?EY0p`Uyj%JX!WCa0Y0xx9)bg2H%?A4C!0&YO~Ecc;P&tq+H z*~|Y--jfTwq-eZMFbPImkQa_F&;&M`PGnwFB)-DZUVMXT^Y5iA!O_h9FfYrw)y8U0 zmidw(e_R&6pR=r7Q{qKaot8w^C@XXdv&!>TstJL)XsDtzt(qb)y*8=sw*yVTCuz9u zSd->3I#&+y!*Y=9=kDgt;)t6kY~&Ai5^YtWv6yPaZ)#^J_`DoOX3Vn$8#=edl9}+h zT9{U;Uqhr=#xs5fk`OI-mH;oE)eghTJ@U9{eubJB3X-7^rC=O;^%X_|_6#X6=GC*l zDXjXxp;2_roTLc?VoKW%=J)GL(~t#aMpBKUAP~z?r5Qz#ji#cCu;7l*Om;5^QWt;!-3Q-5#UTmq=v+i?8rH2CfONuue5o5G={liN4A3fSHoF zgM~)hiBD;#0vvi-Eq*?NT^7%To8a82raj08mWDrp{l;NGp8~RU5+gwdep%oQC0}t6 zI=X6}ZX6W)52(39PAz)HTS6d3=>#wH*DMRNa8MGTRdb4xQ{h5C4pIp~pW_LC%`9vd z^mC#d&i6+6yoP%v&Cj$wtoGuJmOwG6Ba5`Au@mSePLQf73)@foYirNq+2K8#Rb`5A zM-ku*GjF;+i`^Cyg8g=rmos_mnr-$lXC$L-$ymcIwpE{*XAPM5+Y{IbBKKV`4?KlY zE{D+uM2Xq>=xwMFd_~elBHkvIZa*y-bQ#pt({kL;S^$0we6;a68jP*Q{Lf01{ANv- z#5F+`)$#J%h*x4i|BAw{@(?lfRV_K_3XUEDX}Er?T0J9Y#$ zZNzE$+6aj$^lpvQ9!(gCLCgK9anBmkNkKR%88L*mHzGuHT+ENpc$7;meCQ5GJux<= z-y%wY9)*NPzzNy^?1%;P-xuTv2K+o9;)KUMiG!Zvb=q`7C*A2NbW!uRTv0(6&%>yiWQLy!p0>JBOJ!@)L;M^FCf_R*0jR#=V`E0e`+78PKJA z8!G#5Oa{bwGltqjhIor0+#(t~!YkeNzm?+gnODo&x}+SL=fyPW4U6h8Psif4xc5zjpTQYNGX7 zG`;@9X&O}71g6>w|G@_lj;#2L}hpppAm(`*K;RkQ`WK);7*fN2;ZyCc$_ zV-TO&F3qC$VUCb_nnN{^R@3OOF9Z&}B@7(%f_8-sRF+-Vpe}RkuJk2w3V>C<1A0^q zfITP3HPsQNb=IPvW)1o!m8F<`)So{CbxsuO3V;g#eR5j*db|a8d(C`}4qfKvM+>1$-3IwTnS5BF zs}AYv$cP6fxD(tOcM`o8gVAA8yTAe;r-PagM66{SJLZEw43|_2iTB>OJ!X(&vTKTK z)98+4n@KM?HBfdg!Cq1QboC3{l4A2`&u)wsWDNdEu#YQYbjopm1_gb1G5FKqFJj#( z25xTPPQYRj?A15kk zF3K+E!EQQvf_X`uc4vSNu7TsB?@H(%gQcXqv_h`%9zzYj*q2NB_77U#6 zB*dEZV6STXuiM)wuTA(HxdXGBXa-6ob)?`E*^U zOWkAbo=u~bFv@PmasCBMi_7v1ullVjxG&O_fQwWEpa`;B z`*X0}V5ifLIRU*+Q>jr0ZIcJHm2Xn_-?NP4e~$h9Oe}x=M`|Ch5rw+@uEE+GS5u$g zdc42eETHS>R#&;KxfrZX5v|&e2am*UfGi&-v&%bdcA3_o@tT7*2IFt1v$;PWx-oz3 z`!#bDw1pEnQTkK+w`@QEyUm{WgTvP1j?9|x-RxpRyP#jS+o2x%rlyxq$aihHPw``UyBDDxQOqLyXnq43x zeW5Rie2MA{p{w%K<5K0i3wb!!4<|SmXo^uVRH8H+9a+H?djp*QW1VoQa!Huz6h+5g z*R3BAL}CghR+Hs9U$XiExlG(*XOar4#Mf%Y{T14?=GYZAA&<6I>U)U{MTT zxDy67AM6j@s74(Y2En-yw>wzrgiT-#Yb&x66az^@_gj0at{e1my9Bxk5rvvuuo{Q@k&rxJkrKPdc=mD}H;a}@ueh;YAaZLnl+2sBCka>{DI zZGR9oWRP)gB+fr1mCIl{78TYOn~agoXc(w1xF}$qIKC9r-vew^yJK|H8)eP5 z6gD$9c_Q(q=LC3w0bDYF4LYa=9n?og*(>LV&Tw&ggew!#cb&3DFp{O$ z$rvlcAoai+Dtv`@*G#=NHKwPA#ZoY;NAbvsaovtV)1!_#Kc>GOt@YS+T&JFmFH`m} zFz){{ns2MSHL6ECDIM3zFnlEO;o*TjHLhpTAUV1wk)FyOp1}5h%pOPmaeW-zCN+v| zT<&O8kLwvF&?Qe~x7_tyT0LkHopiEa{=qv4r@i=5o%r`*RiYGvKF9NlAeMmfiC~DT zhB8D^M2WvH*q20JB5+R;25mmYu+NBM0mg9w`k-!#Fpvwp2ol-fk)w;TF)$q8$HDNJ zLxkw8bz8Z7FQW(pDy)svJ0=z|RK7ZLDEq z+J4m}Ws~5yGl0Pkll)9#%&5}!OrsH!HVKE`KWrH$zm{Q(1$4S%XEe&N6}P5I<{+~f zF-F*sn8W>sO}T!jrevZs?9ieN;D6(oMx~gb$2Ay-v=fSK%f{TAR@*Q+H>2RTZODCk*&s5!vSmW5N*yf$IcHCBs z0cOf?-{2N;CU}H(>rb#AC23}f@I5ThB7Ku_|xUwlz^2+fM!cQLA2nXA6+w0(01AHA1m>B=j$a?Jl4U_F5{=f*zB?;N;mHjK^cKd(kU@HuZnZX zxQ-|M416-N_I!}~XuFX;t$P=Ve_k_Uv&VJ><~K-%P(Ch{gE< zw5Nu3)6(k#x}AX+a(Ty7I!KYf#r2=>I}GEva9mLNUNNV?AEPMG3hJPk0}ERH4%Vr7 z|6vTUJT3@$9UnO>yaq1wAk!GVnxq8Mx6ASdEaNJyHVg)NzAhZ)Y5He}@qP$YP!D2h z^1y0EP()s+^tx?Znq27h_M&Q5TUuSJ{a?5c;r+O7LcnDd8?^(Id9eRgJ}24jZtp-{ z&o>WF(jefaT5ai_2>Sc5q9ztu;6m6eR_SvPm7-xIR*b%VKUk@ghH%v=7L5%m=>33t z0Iq1f?rZ|ITG4pMD8iK>DK*^~#hcE?LE>Wl;|JJ3TEi=PMFEj79K$CLzfVyARzPeE z$MHjl-_QGW#`wr0vOM9+bjnrMKCU9 zOg}&h$rpyt|FQo(Rw}1UTiY0n-+vg4IDAqtWTD^Z1$bT%@KJcfefNn<4E{gH2;Ko* zODJPJKd{>`1~I2@;nP1`gd++7Lm)w**B)Kg> z3fmceldcn_P4cs%4u;NLB?Rx6@M||F58<2s%VqX0A$1(bE!9ce2p*O3xgmnZaAu{blcENG^IOrI0Hn~DhdMgf zi$`8YYHm#X4(;FloWhmEIHP7Uu5mM!I;KrC?fLxoqE{wtgMAqNA3Tg&QX;KgJDK{- zt*;zesngB>U8idoL`l~y^Bl&`HiT#D{>A#rL3&LR>qKbaMYuzY>DOp0Y+@;7+XdNn z02i&J+E4ZALrJea)1aNGRh`~Z(p82kg#_tSy>z|xhYV!Legd0e>T=2n%U_YjJdZ@$J!j?Ayv8kbgWT^ifM;%Q;S+{N4N;r*aWn?ntL^_ zK)C>V1^P2fF^LhUd6s-NrlX8U!w1;Ht}{X6vb7)|>R7Zq%`#`{x}O<~X0pdDx$t{P ziSpuN+YQbG33-Bh9e0|pp}-X;4C-`ig8f|}`C8B}zn%Wf_3Ab#kEzQ1_N|AT)o}Cd zb~u3xb?bl^u!>J2%6KTnXg3r`sn$P(uu_2KbstvPv>9E)2C_se3>Y5_*ih=(4D`aY zmOCU*PFxUwCMGGyW5l)8Ov+gNcS4l;3q8;ucXx-(lOgR;sv15X zRUYy^_7U7>s$Q87=`M8eSP7-tHafLmZTvIa>bz+>+;Ty5NH19ri#IR3FW*s*ZE^ZfIWHXb7>k1u%nGp*67wR8wI+7U-0K z0U%@i$ogBShj|j>&G1qwhiGq<&<85|85i$2!qu6iXc|1IgQoStgcZR`O{%gaYS=an zULfk0`2vCq8(>AVSTr^1eKGSvrgl%zjs?(+ucW;TU~rR&1~CyNwe1ITDc&45vD%Mm zIH`Gvr$t!`8w5Zeryv5b@rJQ8{>=5iWM!eTclc$Y6OB`)CHl&!i8v1_i!b0i-jAmK zGImU1ibva5O3>;`=v{BP0D2`Yg~)=4+dX3vag^aR9x?9=Ede_+57r{PAZ$0I?JK$4 zxwq^ReMjLS?*HCC(H|LQ2X2G-k8g#P&~M7{(%S?h-8g4-sPu6|VUup&s!vniFfD>B zsx3mSVbJZ6d}0JY7v${MfJZA_pH}A>#h=5&TY^3Nb>6oV_wW8>p3l)rsxE@#uN`Rqh~yc@Nl$d zMo9Jj-RbwS5Ss0G??W`a#IJ!nevf`AY*dmKH(vlPhEjD!cF&l!$ufM#BhuYb7Oa@v zlcd)jyCtWSdA;H#Nw-hG)0t&T$0y`QG6h%`P4Cz_O{aqjrI$nkIzEury9e&g%Vwh@HGcL$}7Qol!~Ml1-c4q(r4!54-u^<0n1%4c*-}7Xpqx1)ug#flnr-6}Lu$L!`!co4fAZkG@WILLif~+#N!6~2e2EvQ1->XNg-JyDw zQd8AbUCW7rss4Rs|LUOwQ<4pDb)`oC*s*SHRTl4RB8vEyfc5ATv3)hHr8!6;-x--_ zEKZ7u5?_pFJ-?qM%Ew|$in&DWJdQ(3o+i{hjFZg0m3C*5SK?Eheo-@O z`fu2cyiwpQ)Ap?Wg<`EZ?edfJ)rFRz3N1Rr2@Huz4xyXmOwBXpR@I)ityfFNy?MX>!GP9` znIf^E>3KMhnU+4022Jqt4ZAu&$-C3gfGuhPmPDD#&$;o{rr+&qpCNgve$ zjc?h9*)0b{F_hcJ=pPC~0-XEC!{_e{G|n`D@8DRd13d7`0IM?;AX(-2miFR6N)~da?wL}%V$aZeU*c)2W_b+(P<#H{w9%5V z=jhQrEc7S_+hrK@V5jlej?@i?I3}Z&oV%b5C%bl0ft`uK*_j5!w?6HysWfg{Pgqq-vsKe215gE ziSpB;$it5!5}hbV;R^f&SMWAN;o;t*y#GkwEX_K6aoT>`oe^qlyn_B**iH!|i67Jn z{s{Dx$m4;;qa`N(YJHzPUE>SWb2D~*p~=Y^?OWfK7IrZ06xA(h0jNcCl=oaD`K~nm z9aHlHkQm+cPv<>TEKcM^nW&u$N6BR!%o2@hC-c=w2PC>EcvInef6UE_F{;^;mB8X~eE(E!+B|Aq*|C5ab36j{d6O$a)JJxxeA(!-&3r^>!c# zNE;@}4@f&EXrqX?Dae<#rv%BJcH>lmCa`vJF9Pr4tS?nZ=Y8qZ?)Z+2_Q2l(mOVKwv)PLy7#c{1?tbW_+j<3kF_k%X!CNik8disKZY)@@GZ%G?yKkbN{!TXhiY$KKc{ z(`<1KDCYPt?6^cZG1jTcAr8sQ^qwn-BGx29gKjFE80*xBQhct4Z7*7imT4m7FOBK}?V zqfTMd+DulQWWr!JAsYU2dap7)1?`=iEs<#$#{4ytaTs5-V<<;5!VbV6Me4Ddb+`=@ z3g}p<038J)h+ZwyZ5OGI-NMzib}086ROA42K#afP`dWbbXk3X+t{x6W;M3KX@Mc=Z z@Xfq4Q#6)N`mK`0=cCpV1;ye1`b-7DEKcV6iRlf0wd(O;rArWxut+ptE?&Pa$;hsG zBS|(aCTT&4C*xvrowj71)?N?D(~g?);*^JDetk~dH;v5!@O_ziON<<{d?IQS5Bkwd zl&@Txxtao02$HX(7SzOrA}J1fM3768%u5AX5?j0?2}HKw_~S$DaVvbMU`UGs;bn0` zm3}kL*mC%N12m60uwAdk)#C}FlcAmsU+8QFxrf$7dzq?WOsae}uBd%1rjGqiTxt8z zxNSW}g$mWV1cLj5C{X=uDkg1$3$h3Y-d5P5V_S$HjMH7>j&Zkh@5sbZdjx{$ekX;9 zkwQSpMC4!?acqAGZ@dmXOcY~mQ6Xd_cnF>T{t!0({a@W$xcos1-yE$m?&BB7&*RBa zb5mhC0#DLym@9d{~*B!yL61U7w3o&XZuur`hQPJaEEuy>@>f*LhFw zU^3wWJuffv-xl^AUe>%iKkGh;acd%q=Pwi7? zYW(ct^kk>@o4hRXMDI-#!ETv$XSzgkMAMuiJul}P^IXV_`)LiDd0G!^xz0Of7gq~1 z-ot9-%M_v8h5u}>TGACM=N648^`dT+bODBvxqG+UtPS0+cKR{luO&gg?dYHY-|)u>_s+sg#}!AU)OAo4ZT3~-Cho}%uY zT2}jT09!+c3~bRMGtR*Wv-G3$vGM-^j8Sjc7WJ~5IC5BHZ3mi#O%L{=&9E-WF|)SFBgeN z#g8>P4;Q%D`)zI!?Y7waJ5*?1E+jug#XOUZ4KM!D(!1RHL|G*>x$xt;yq=@7aN&b- zFzk9~iYK{!`3M>{FO|(Am44qsz?9H-?rKI#U7DX{M$|<26G11?L3m9QBwiN;EL$)52Xi8i8n^-@FHskE^G-tsQLa{p z{jUPAO9VKJ$P$rxBI&$9Pw}8w$iW#H!bMx)1-iYsk4TyX4}56YhEhZNqmKVt?v32z z+^4y3aQ}Hb+J2mXEF>VL;3DZ?jzL8jub!fzcS#=`-}bmIqC0FrRw3n+C*ss!xTv>} zVex!F&IV}rg?vCT0TxzbBWX@px{P2Y6Iw7#5^L;*jMod5RR(wnB z7I+KZLI_w6u)$lFvp$qyDjwc4%y(3t1&71#SDrU~;!=Xk1`q!ka&(4B21eA3$rt0^ z*BbA;Bkz*<*j*n@YsS%>$htK-MJxy${YM{^j`q_06zv!kTr(P%eW zabX98gOz2^^=L{Md4L5R{THRZKQ>E&dJP6{<}i}t!x(>*6AfN0i?&Kt znHj@0DO}~Lb55(m6YQu@y0d)U)8X7UXB+N9ldpiN|Ee}k`1p9GB7Dj?1EV!32!1uG}eB^_9|3hR5rt zV!;5@3ypvti`-vQU1xj^XM9!Qu`S~dqIv5k$YFz=Pp3mV2EcbK~tY`eRuS20$B8#^2HcUpqG z>`oI04pWW*l6Ky~GL?*%`$1XC@B(I>)eSOX71lukoBHwW3%s znsW9L+^i;|7eZccQlEIo&uJSjlI_Iyl@v5y-{+6^ptpkIc^?!3)@6x8`(___*x2wEoQ;B4#brc**TFXMnu31| z)Yd{cN1^ud7-&JA;r+mEHic{+`s3wv1+UXQLQ-*1<;V1IDhUD+Ot-3T@I7M8AwWyy2gKC=n{rM*Fql}BqTs9xkryT@#7fcdyltl?_DrCMilvRtc`CqeyQ zn~WWhwNph8?x^8?Uhxb)!20nu*dwd#rt3-kku}2JR$5ytg-_vPwHnr`_lhh||Hm-i z?&r!FwcIM_`9=OH34w=)$_-3u%|loy|Wli0eU@1=MGy>=%JKOES6FR1+vk+Y>!r1p7p;m zyIj%sT=pxotH)Po>E`F)i!+0(uUMiV)0VEddNA|YtbcKK)x=LTSz3fK2WuQ-yssxW zIs;4(PN*W`E_+A;KXWi3{&LJD;(e`DIa(=|+9fH^TNa-$G~OtPB1`THzx$1e;}gc8 zUn|Sk3cP(tlV$A?|D>cyq($H#?3nvxd0&`wl~idh*P{f+vskpqVe$yReXs|+hhq!C^nvF zlBVX@^6-mN)R>%nw+;W5N|Qts=R}2+_S%Zr0^Es$VVf9bR8R|fQBzIB+GiQ2s)>0x z19uYBHUz0vu}bJ@lr&9Lw0yq2QqJc!MbtD2XHrVmfumnzF?Tae&}mFA&oI=jmhkgO zK-JU%0G=0d@=z58!I)ohCoEMZpzj%=aci2KS9K{zh^kr>?#jF&f(C8vU05(BqKT?* zp%ehkLDYz3E-dV|bbtQ;e~<&f&l;_YxSwWHVgvvqDy)Cy;R!v5w<0 zii77JUT`kI_V|3x>0Wi+D`wCCqpX_55sRgqpsBN+$pf~gYgSQKqjSZACTn)t0MQs* zOU3eO9nQ#3nAVKr$6Y6$ro&mI6?; zDxog@se)@KVEYvJ1sZXh9NCzJhA}uuX)xj!I-L`j@Wa2${a!ba{Mo-)vCYq)kpA^j znW!G})2GRxL8-DmIYm>!4R0rHTzLSul>A??IcYA0jBVmpJIKmr#get1&baZyKYu7n z0hhF;KFa+o?kVo~{4uo~EL%(cF1uk6(}-WN6oS~I5x>BNLDlq_!=>twzf2@i2|q@rXadT5k%-!YXD4?*#~&9qQ!{ ztCMtuPy_Y+Up$X5Y2oI_)Y5%{)~Z~KvZ0-^Etfb}ytbr5Wy)Sw6C_EBPVhba1l3z- zePEO(l6)3O|D69p*gO^5*Y^1z8OnDRqXc4w$i}mwpYs-wJrn}iw%1W<{cTKCh#F^L z&oX%C{hVL7$J#$y)@7E6>W;DR*Bk>ApV|X{OQfJKNCjpZP<5;|V$h)u!&|&Var+%KzchBi(gI7nvH2caZ5U`Rh&aLfe_#g*$QA zM-6OVgpq>|A2fwzNdDsql*X1zi6ef)agg;5JJ~lP#3(5_@AnPbnis=t)0Ad*Yn_6# z-i9HKUZJU{L-~m`snXnr*<3h_6+*pPXGFfwh`ZXfA1Ed07wA>`VU+ed;+=D>C#+FZ zu8pP~1zw|fcIYH;xiuh>9s>h{0lw6H??Qcko|@zGm^?(!s_Ly@?(JJ zrY!ytc(%>%6Q70CEk6YmEvf@HZ*07u=U#`IUTrqM=6S^*$3YMF$7|4e{c(Ab?NEWYPjl1ge4{@zbmBq2wm1oACl_lx%NCM8aT@SD z12m?|UPipdKk?A$w*)5^of&wY6WOk8?xn{a>UNB%tSndPnx4?o#0kwstMyatR*a+)MIKYz+1}By% z7T|AT3oO8iHa-9krr!~~^bF$EaRR^g0q#Z4WwqJZf&-l2?kH@Q2P`30Wr`QX7jc%< z^|ZDt2ou)Zi&b%&{6nFlSo!}hDpE=AEL24UyTYT=JNe>Nm3Bk6t_*DhhnwQA;_l^s z9=?Pba@d64TH_rFvV!$! z!KS7T3|DD4(F}L7KI8xk!!P0T4lG*R8z^$;Kvw~3cl$&F{OwZ=MK2M}J6=&qNmop7 zrd-sBv?wY!SjD;{%aY>MtvndLGoD%?#O~X~Qq>0@!Rqh;TN`jxoC6eUUo;fUQj9NZ ziYQ3@K9RSHa5FCxAdy6hg3NCSB$p$?2G36b(Nx}_pA6(wdvi&(M7)4!H!5(N3D>OxxA9CzF*PGE^sQHGqT&eFJ z%g{LG$XGiq@HWQ%z*ZnrO|Mia)~ke`Gz7kg@h*bE;|gy%k9$|l%N5{zr|4AUr|FwC=`GN4_!2KXnKP>sg~@!-&hL>4(3$qp`08LTsy8$lM80*Dn_^-^I13>f>3l{$hlJK;?#;tAd|-8!(T zFzc14WMPdj=B`z|oXsC=NS0~Y{0YBq(RV?g!%9mq;sU?+fM464E;{piO`NdzdTpgG zD@}Crt(B$jyj94R>T}ZC4L4jb&(%t~g0;6RJGTAaJ^O`-d@@DuvTh^eyP``-*T{uwSw+M_``UW!6KjMrG(RVd-HhnvqZ}k zcn$s&CmdB#m0VGnYqjPCt8j2is?RTVVDPUktsa=1Jg~Y{`vqbb^3N;h>pa<5!?7B#J2a$t}f;4G&uxUt=W?Od3 zUURJ_lAjLw} zcFZyrm41K5oKf7M=QGiusWdxHkCGJrKD)TM*tvXqh40Q>-huu0!BWM3=RNnl)2@^b z2EObZQL$znt9Q4=(^+glmvFCO@|{~{`5#br%KsqCw|00F&IWbEz6rAAILmAc@))xz z(Y{aRap=3Df|;Jhyopr%>|#an&@lsOhFx!663e!#mK@Xt3wh87sZuCPFet)~Q_8xQ zvqb42Q3TnLBm>3=7#d#%D&(sKL4~8#Nf8FUZv^w>tj%_+)e1Vp2g$bom+M3_{rV&Z z-ZewS>z?Jfs=pR-0Y)#AD{&Q?V{adKfa`+|eVn_NdnL$P?1QJdw{!309^@Y8KFmEz zS5{#DJ+JSRo$yRg}Ce|EZ#w zvOFhAmL&dAl8T}QOL{wsaSAJZ2)^yQD! z4^`<$Pf!5nbRD2M6wZ>81$?PM-p)<~P4a_Qwt z?12gTiiubwl~^M^`gI2YdCXrvo5<-{N#%5myNKfX9HWBav22br!5h={n%kRIVe70BOqgUe0OxRCwa3Z03* z67;z>=n*%A&3-#~2X{BvQ4etM;oi?Z0)65W+%IvT;(nQXg8L2Z8;S?Ap$jr>F#LCz z4B8&;04>%TRyxWQ>9#-<=^h~{#U&V{r1&q0Mrr7L*&7@ouscP(eysOE|A24L6K{FY z0SVTGXT8*4Cq~RANfczYSu8e+#b&A0pgR+w*9c-mQgu;$iBqKl=;}FAvd@2u*tQLQ z;{5l5t!&2*a0?@0)h?0qe?^}r?CI}`61?&+=(oN|KhY?a*hhah)-4E~Bn$p45r;nP z(Kl7-!$ta{nPTj}Qi;AQI#%hODs4mj4K4s5|3bj{@jBd-8Fjd06QofI?x(|aM)Bg? zj|ZHethv1~MkH38M>D;MUyGQ3M0{0@pM8BTga6l}*Tn7*{B;v>{~qo>;A*a$h-BJi zjdllg&$80@Q1@=LAXJ%IG+1V;vxwex4_XRVYIp?p&p?h2m!b3HY%W#AWGtxt{ZhSD zsyC;L#py{Kr=x9FML-g9BA}?L`Jz>}W^S9YYy!Xg3wce>@2%xbRh!vQc%B6N1=TE; z{Da#bHFLGsz`pTmVGbBicfbdAWb$~kI2uR6JNIY%k*ik_2la#a=! zx|Wl3671y(F*N}W*S9cqM zYi#P{zKeplIk2f7r0WJqIK+E{Fo7lFDXa;9v01S~YnYnQRuiK$YdqLZyMoKJ6p!>P z_fKJnskuTI7Oa>UVLQctcGpnr$9W-cujEcb|Gpoz0`8(PpO;9p9j`hQhS>bg?x63* zh!>Bu$t96R(fsZ%;qB8A50oX5rMwWOwII$&PK-x~xEn#|x_3KcQiD!pqALx}|4v)! zF~8ctajB02vFyRN-Er!K62dP6nemjQQU0M`CY*11Vb$ToGIw4WvP0>)MVSuE6x!-$OFR5ZA&pMiu!zf zE`^OTi(tLI3L}8F7-x19N$El5-MfLI^g#0U-M~+U+shpRUH-OB#*SS@O*Bxf>;_W& z!Qr{xz{MQb!Y^f6c+!-z2HuOHSBe?oBBqoM6QJ=K@lmAJ&hy>?*Y|W_SmiN9eHR80BIai+f_Bpt zxrQg+VKy68O|Ld)Cseh%bMAesCRAqg-79p_Ycz72R&Bs*VLSWPok_fmsUL6-oU??Y;N&^gF zW0UP2&k4{PJ0-_Y0k%8Wg{Bhz+5vt{iW`cH_@RGacx>e3jb6j%EZk=d_i6ualG^jV*@T7m)-rnhMz8 zTPm6=^nP|gNU+BSS=%S9Rm}f-NG$xhY-rs5I^Z%7Xh#eR8g!N5KvBhl2uKIi>l$+Y zxqv9Il8L6jnqu2D8PdNwasZZ6<1h98WsSWTrRR(uj#qZ42aFt=Pwt+pD$5Tz-dO#U z>Id9>D8FX6P#fWu`2gR4vE=u-L;Ws^<)^nE_IFFt{^dA|fE3dMW89z!MiuF?q> zVs@g^nQS>qSw?(e>|3x@ll_$CL2${Vd15g9>L?BNYs#N1d(zCl8QCqj1c_G+TD^Qd zSe4*fHd}?swofyUgMXqg7fqSZRm3U*y@LI0do5(F5YGa~UEyM|~uf-_31@1VEvUhP0#MY=fLn~9m zOI~ya+p5G`j~Qu{6lxtg$zj8|9M7(Be7f-idOv zY){QMRfb)oW9_zKtJ*SHq9$PJ*U-9;m{oHP?DA*Td86sxF@gbPqRsTCz` zC1JBi*8<1>R{HB_&PJTH!4P*YU?tkTud<_Geh8y4abuhTl_78EOYmnK8*6JD!weKG zf%&Sxbcij^CDO-K`4)T+Y|eqg5&nnksmu@$g#;cj_Tx17Htwf}S86JVpOBRjT!#4Q z20KH1(~Bj72p7sM_Z7fO*Z;%tkz0c{%kMgKhT-9Cg1J7*aP)5?p82NFF@_3gQjL%1 zm-377mw!Q(kK>DAv$nc=I`9wDpI=X|vpN?t3VFc~OrWY+%P<0bg|R-|i$tM$B~H+| z1F!r4)AlA%l3d4OVE(**UX_`3WMx%%b@fqQRns#)-P2uNUEOof0E4S=5WoNg1Yk&u z6o(`Z&hQY);fmLQ6h#T7b#N?E_JWdEdW7vK`9bpT%ADPm*5>ZBmV&(Rt(LT<Te zp)$>ABUKr$znFYHa^(KG0RLNIls|lMEW(j`9%EREys|-B;Ru$4k$E)<>y2dB++!*J zjc8LH(bV%PDH>@lwHZ{g(%oj)L;^L^>y|((;j*|7a+6i;c-w56<#51A2Y2?K1}R5m zXqnLF-E6Br&_=t2>(J_D$46FRRAHz5Hh}s{dU+BpM))K`*B{{(fjZ*e!x;DXNuQ9u zD7}39G|1tfEKNphpp4RJ{PW5DC-PSg4O1R_DJ5GY*>8AWplc(!^?cr~2cmU``x3Ix z<~?fytH$-lc>Wcx6vZW@F#b9Cv{5sz8StOIkk#ZAU(&u6>um3$R8A{U@se2am$m*u z^jBtxFJDlVYqESzQN=HWkKPB@4EQM8>lNpOjY4&XWS`T`Lir{39nn|GBQQUoe1I7ntmuQ0#J2v( zqptBUxrRRdO*|w|yuqLN;pjRX%IUMEYz|!wGc?C`kjC+x#Ar+Z{&MtK{*2d?hrYru z{Cb3%D$r>W@Y;&@A5KAtj_LQ;$8md!fBy~sLh89V4mm8p%3m_DAijrl#%=7`-SLsk zKKt_cxMrW*ibq)+qs8$zLyhi%$uhhR>YRy)BxT{`bm~pv@Lqfpj`=uyqg?TM{^E1E zULB`g#8nyIIuz4S&!OKPZ-#=Ydvah>-Uhol8M-Vb2D{MF4_Ab+CSn`%_?#Go`akIshXb1XLaOKgqs;}20?>N06Y{OXNo6LRq5PS#t z3~#~T_<|ry`TmR*X@~i3lM7nLE`FCm4D{|Z9FXmBY+MrUk-}|gyZM_q9zvj&svQxm zx2Q3Ecy+?w4xb@kJ(0owe0;*LO3L^D2JqP-X0#S24LaRUpktCkcZce93oP8QR}GK# zfYw{BPIu)D=~cG}+go7(pKS%zaC>Wa(A({fPpmfmoN>*k2Bz2_wf3mqjQc^AQ~lVv8WQN zk%HsQJ@epCmFlJBza$AgyN{yH6&HwzT0&#ZCfrEOmY6q@X|P}#ixVx9tD1}E@D)6` zDzGq?SGNtFYPSl>xjrnLJb}k7v-eko&!ThDo}|(S>a;$tiJb;tHN=(E1%jo-$PrQr zg%mn)PWr7buE_GRQ(Tw$6tYvdwSslv{lYDc>W0nEouMi~%o2+XdrnbRQ~M6?zBcqf zHEtu$m$$~SIY!Y6n(-`*2H_oQ~H~w)5-=;~BBeIX`%86bF0(HBsm- z;Xy?k{OK1J?S=)k+l&_WqDA@dI=%%YEbGeOybi2&$>QiGF=?zH*p}8=4ff=_2OP~D zY7TaBvo4CCpjUi3depjNMGI0K9!+^s^{uk@vsbV3$Nf`9wR|Tk3;Q>UUM8K_zY9?P zB@y;6{TBQ)Fe^3AgX9YKT54CsGHFg~u=>D^k77RF9a(VZPIZ*hiWFoitszVxw(O0q z=W&Ts`}|ma`}b?=CbAi;Z?%cW0i3N)sAC`3d_5{{N+&>cMKPSLUrqJbcQ>lAS!v6@E0qcF5Br3H=sGyh1nFkM6fiEyPj8EoU@x%=jqydQMZGIVBR}4S8cCV zOL}{wIKO#F)3w7ZMcXfaGFU4b{^ABHnYE*`YFPCK$fO0)(7jMxt17ah)(a(Tzv!7} z$?mSI&T7X}<>uyP74*Dg7Kqy_l}hXHb_-r{$=}?zs)f?xf~v~O{JOYiMS(Il?v@|W zkah>%K`;nuA6`Rve`7fM^UY)Y=U*N>w)wv3Jd!n7-zCJAC^T>fSQ!T?*=2On0~V3T zQ>4}nEYI#5wK=C^mV#p4EjD|4K{suyXggMOXR%T(%qCi*xi{Lvv#EPxA(WG5<~OYvg{&rcc@ByP#7){H__ z+Pz&{FZs0s){^zSk{{GcMb|c}q+%B@0DP1|N)`-inf1`C%@wMZ#hoSqxwhXfSAxa4 zrBG89RW}qFn78QEN!1OX0MIEzA_M;s*8O)H{G2)aw*`59eS5urdmwKesn?Ip=M#hxg@K) z<*)jnljXy;Ihh!;rGHPiWP`|awVLNDiYil8F1W3`+OEgCJ(#xBzSq?a0yhvtvuppS zqWHE?9f$gkr|SiGuXU6f20hx^a|1;BG_9(R%A*}tJQ)m7pf|A!PNxE znzYOER6u6};5}aPi`QGGExm(+LFY^z74m@#o%kQz#Aw2YX?L4$qYnVoXWYny7Lx_sowaL8!6>!$7+CdN+ZyYukkhea$K(|EDAYJ}A}$2u17?=&y>aP}xF1yQD{YbedHVlNgn z=@kpaKdVuWaIOQKUF=hx3+WEJVcRT;Q|HY{d8B710xyT1Fj!vDEzRnXtR0QE>1v+)T`a_#p0ai`*p8yth9N!b`i<3vmYL_oVjXftk%BbJ2P-Z zp8OluXU7IPvB>JzOM@za++9Hn2%9*toKwtVL3DZbY2d!WHcwuyA}Mg5>0z9p@=2q% zP%e`N6P$HhHOMjDnlCMMsIC~U1Hb2IeE#i)Lx!e4I;Vnf4!3-<3>eemouoQnQiDeE z$n=jBpM8$mfKnOTXnASjDXO#KOX@Pi)WN*kUTn;~Oh8c*`)RZ|SL$pk&u@V#x;4+H zc)f+L!!x9#z|SIUHE<7z3`KpAo2L(A=V0}oqz8eVz;Z0Ad$~xGT#T^FGJTVPB;~Da zTd|RZ9Rk6+zo7s?&){=gIRLF-m4at%qCJ0$tdGFNOY({^ErQ*A{d!z~pT~BNFgl@W z-ik|t9*GN%#NwJiEP0qc(w zAjh*NQ2nH!aEtj&t!1`^__7Yqa{w0o5+@cbP5Q>a#p5tgoC2iQo) zeGd0T`@N{ZTKvT)2y^5EoRO?hd{Tw&uq0A0gsn74u*H^AaD*lPa;$q{8HC+D#nTdUX4S@U}!G9cJ zqbAzHhTwdN-Uj9kaI0hu&ZPJQe z-9HzW4lg;n<7ky-U{tH1P!p_A%?z6b%~i`gM@uH?VPCJUho)X!?^ZA2muxIQKYy&I z6}5W*WOeaO%dFY*T(@F17Hhh0!~K#D7kjvWp(0^eI{C*y-O zaxs?7S8V0&rW~!EyOYFs3Y58w0iRAbYK6lMl9q1HY}nUw(&YjF*p#w>=PQUeP|bq zq%5y0e76sF*Xro^hh2}1JfhtSdfCVP^@l%P6`n+2e_eQ*^NCOFCl4%@#JcVd(5;6N zmFyni(}ee;;Bkflrrd6zAOs_)%2GpFhrj_Yd=GdBi;9Ph^#pHdS;oc^V1U`4t(6r; z2OHV$Zgg!$w-mFv+B9YQZUaVIR@>NKShG{l=T8(Y4QMJl#pMnI?)(yVAr8Z`W~zR% z=qvJLz5}|-gxfS*F^yU#Cd$|GH$aa*Jhj#mYmUYYx6_0prLzu_43`MGK^JGsB5M-4 z3&uH2iToA)1(5a;UNk~gmOsl;^BA6wfeD}}$=mz|{ySt~{$k0)jou7pmHu*!V}dhS zxUy-6@r7*MlJ9*VNN3Sn%EVl{xa_&Zy$e7JL^i9Y+M#jpw%ufNXp&Wcx(BXfU(C*m z=$<~UQv;jx>XkrKOwGMt1&dS(DuynD&1vX`Ilj&}0h}+g-euEbH=~jI-B6$c zwgTM(s}bIz2f#Y3z@6PK{9L3(E1wIh8KmD|a8s&avc0T)wBVu}AY3^EW1P|^%x8;N zGgN4aWWt1g;3v35ZSl$rBov7yW#@gDM~JiYo)tx4d!j_R!vd<1~_fe-(p+S_;v-oZMa`c zzX#i#;`z^37pw4pL=N<)(?P0oHKsRWjSd{az;9}2w+vg6YM z4Rm&9O}rSAz6fHbrq|4Bc^pzaTuM*#seL($usp;Qild4FqjM9XaJ zSY?h)l}KdtltgRLM3cPRVDXqSIq)$#Rt_qv3$789n82tW9L%6^t{xl{l((Vwb~94& zz>4nqk!&14lS6=(%0B4y3nLW>F$+B>w;+=e*Mqac)-E824hr4EC7oWEbvI^(T>Aqo z>e{Ecj1aI2fvtWo{_XaHmiQ}b!B;qn`#f$&7c8H^k8iygpOj=v*M1fcnr_J+?vg5Q+5(JZqE}7?B!`V9EKikmr$d z=YL}{vaN91ow5p*0{qVNLe(`LHyP<}XM}9erDH1aYj!TpNr$A9m>ZIv@odJhLc?G% zhjH&Pd_#BH2C6FW;I_gnFAOBGKwKtxP*82xRu!+}{jKEeHx%{woyS2E$$GKVX{{A? znY=4J?8%4kIV^jJ1tvtp-n1|(XB#XI9KBfs2O4ZDwcyAq(PXEfzO_<9i=f2n52yAM z=J+m4o4_IW!MwtX`?#ExK;H!mi0=i%onb6%XSdI@bi&gz$O@WbJ-PSmUsTSVKc>r$ zdHjxj6Cm>T@7!1PwMW+U>gvhWLTk14Fruv>0iIP7G7NJE`SC{GJ+^}VP;|f-+!DQj z#e$aR=ynTm{E9@ZBg;nJqEm z`>HUe@6u|%qE;3Fu*zq2L$$j{ySSOJT5rw;Rz70RUaK^%hdoc4cuS2!KQFc)-}a|L+c66QccS; zRm;@09Yd?QMc*&F70mz|em|n&f^=TG6XgAatQsGi)ADJhDN`UFlCy&S3_INe(QYf~ zCQC?Fw#1TJ3K=4PH#~9j*c@qWojh?A#J8c=dv{*gUvBPQxO0v^XjwYIUoZ!CRz&iHz>#d9D;rfK>q0Qw^{xG$1G3`!11^TV=1%9h@AjI>oiUMWU^q+p0K+ z&)jwPh+C>@cPPpM$ao(&nb6|WG%ABFjYL(9jSNMzHs8Foj*-Ywn-ABSwsbB5!H0gZ%lHXN4rq`RidhB0_KJ~29(cliS1S{C>pP0<>rr}@(1nuy4bfT1ItkJ{bn z>rb+~Gi}Kx+uM7oV{mnXmHpPp3+P3r^{C&1dyS{r)oI?6O9o>rD>MC-y#rX$m!mD5 zcaJ8rXX&+uT{I@pYZncFjBaixDq@~^W6)X+IvZvvOMo3G{`8`A@5^GpI~yyCuK8{1YMUb<{s+Xi6%m0auiLlN}w0=T?u6u}xtd@t8b zADQP(@I^<~q{mmBV@o5)&yIL#k0%(+9!)F(KOVgI{ zzMg^c1IhASCT9(I*dK%Wd9U=uD5Y>O1kOxc#=tChkzhu$QxgR%XpaalhRP1zF5_n3R{8293p+E%#TYcA& zI;G6$H*}@c1j`brQgKv$Q&UAE+g4A@+~EMHE%rBVPg9{YqiH7Lo|!_0m>dPJ##&w21LF=> zmj)G7NV~y+4#Gi*0qPKVu^j-aw3}TwW4XZ?kc|qNu|NeSN~Q3fLPhz~jpyIQbhqs?lbKGo;%O!dRId1T|K& z1Z#TK-z!`6a@2jb{KOO2ud}Kf-<*aW>w|j{6Ge_c~3ewa*>R4?b9)P8tbo?L9T}&=2}{RkuVHdqq{B*`=A?{PCy0Fa^qw#R1Cd-x-%)t zy2tut+k-$)6X(H=r$J?#?;z^9Fr;6Cv3=t|Jzx5mTDE>%^IaO=c%Bx!D<+&eSSXR& z4k%KSkfLhPdO)i4ZXqD9L4DF_tuBzp%KcTU+JwSDKUFCHx1YJg9$Jp;l~x?pCC}WU z7{xPwmFl|gI+o*6&015`LP0Lo=W9yMwG~%cZmJ8d<(i>-E@ic-wS+Ew?B9dy{n6gp zxT7)<0N6R*jOCG2a?Blcq#6g3p^s$fCUi(QjI}o6{635n^gvwqcX*QB3N{S#Ia5$e zesBFc+i3F3Pq60h*FWU?D-E)++G-G=8ZfU4?tGO5bG_DZOOmtzoi)_JW`|~MBw?QRUEezRvT0yPL zax&Qk26&oH_J`70RLU9eeQ9``<2@at>En1~3Qh+YwEL$cmp4ZH zw>d^s+;w-r;km4-apQsm4NNf#6_1a_T|dBBWFSBAFbJ^U-T)NScsI?V`<`_E0F=*m zDT()!3Y*u1X+t3B!+9}}VDcacs_;@=mtQ-n>a3iPpd;e(xF9`ryV7tbM$?Dp;sl%y zFgRbBikz^fz{jbIHG9TKXq$~s*dHbQcdWAdv2gAA3~?Q6=+@7FMiOlZAHKN_K6Ga0 zZ4ip0B1FAf#a_)oonDo<;p=t=-2g3wG)9ovK@Smgtz2F+$xo4sL-P27|CCy`ZviMz z`3u$^CK+BlZ_ZU@$6Z`>9l0{cpgSg)UDI^S@{ZE`%!Yqoxw2>0QY8o~@FMJg@}w=Z3ckzo$sTiCBVL#qg)hh#p`@?p1XI0mAAh=Gb`WOJdD%3t;H=v_rwU`Po`W&hw4dg?lbQfynmD`kj4 zV2D8uMjVId!tgmwvz~nN`gM-S8-M-elUFksBruwVBo<{RAvp^0xb+UNBW!fqJ%OdoWwoiExi+QsvYPnSA2S#B3i z``Kr2e2H_2LY{s0TKg(Sg|4>Ux0`oWfg4t;cbNc0t72Bw$5+7i9oBK*qlT zBX+haXFwlehYqWUSxiQ_WNKQubaxou&35VkVF`3mR&xDJmO%(b$rqU7$eV$NOk&%I zUH9<2aDU8GHgbzr6R>z3cAH^9XD|bZNnBkU|zuCmS>MhR4p4_D|Lj~;Y3;`4) zF6s_|v4#+<2}u1ZXz1(LpTy3k2}=I2AWBuQ`j!b; z9e-|jh;#SB{pWUbZPI&h*Ka_STghgUWP=GSb8tW#^}L$)WQ)4A9mrO#@IMioujSaS zkN+S(#5C*m(%SIf(-hsRdTrh3Qr{zuy^djx-f-ZFBX`}Tc1y&`0 zZW+tjKkY2L=S-!-s@zW=spUfa2lbU@M={U2%O_dkeTn-+5$y3eoxN=jBNvP5qjG&B z9tRka<`jf}D02y2RSbh{gIK7ttqxHKH{82$u(|YcqlSJN;( z@VuIc>+Q|1$w+5>2ajpvLzuadZ-X;qo9iq=Yh~=+tRZ2MmL__A$p!pp^XENH&AsR@1F`7`D*(mD1NUf&e^3L=gZpZ8Vx z&bPkft-Aisi4XpOuHzk^{)rR?#{P9U*|p4(F6JOw4pi1*EU2 zx~481nV|A7F11FSN0d> zmE#vqwtqs_4EgQMHNB5Dn#jcUS|DTZkRFxZA$>r)j=k~PeX+C;hp3etxFs-JJ6&WS zR@!Eiqeg43k9^+E?>wG-4wFl5fY#8Jp{j$rV1-9sQ}y4oFvO3CL#C`KG9Fs|0v-YidJRufrpHirm0&$Q-of&2rww|0gZ<-i|w_8%h0M z%KJn`a&(b3d4MA#%8Mo=ee@OV1JPy6;H;|-?yJX|Y8{UilA(H)CmjrSH}%l{h#Tsj ztWi_ei3PxS6n*{lI@?ZRT11yks>xqa$Uc$f&>@<t>F&G6upZR$)b%=rB(1ri&_?K*}6iPG{g3Zq7dIUv?Z$O zLJg~R>7;bO^n~dUOKwQ1PHsCw5W{JKkU@BdJ=eCy1at*u1Q%&}bdd5|%0 z=UwGSX8AbqqJ)fl_4$H@H?kQ>n+D%&v8vwS%w&7MhtRw~d8rHCJp z8z2K-e;uTNP^+5fy^Q3NU|td1(F)Uub>17z3b|oe0F9wjVi~+Po49GyHrON28TJ(t zS5M349O5&NP0iWh8HTuti+vujM4SGkEF1O^nWY3HSoyK}ONNEed_)7!*3=k?sb1!_ z%rU0X%ulR*`U|im^glr&nU`2*OcK%n zSA-_f|FJQ!o_XMb=N@?A-Z9#b!*(8TeC~m-P2v(RxX`7iCuAJoIdNRRWQsW zj4C`cqRWU$)f?;Ul1~?2$Puj$N)m{!j}fJww$~}Au)UT?5#{@D05lt{zZItkuOFi~ zNpE=@OQ2-v!GYS@{ih% zzwCrPU>A?HmRsG<8F>_#e6oCr5b`P91Ng=pc>Gjl6uMs@BasgG{V|aV{QqN105s&l ze^f;xspp0H`ik@&u&mj9%>`m?7;+_K+UubXno}wYRXtONXrWcjEOKxh`rvSR)eh6! zezomaZ(RrH3>6q&YO||VuLGQE8`rTcX{MjVd=7{AK$XI80Kc1+`T5Fgc=(A6mo8m6 zcaE$_@8R%`;6`wyBFc0dz7MOj2;VTvy8k5q-iMP1eb;whL(K|@x3dSloIY_g`oMQm z9f!|F4{wLdIR|72-~-iZU7iW|9F|V>LRa~6?Nmpf0@YV*BhM%{QtTF zwyImK1amucK?MuvQ95$ri)@Wx6%RMc_&1HRrWc%2!8dK&^a~}YVB6XEgXn%Zr1=c4 z6tIZY0C(ODy84DZ=&~ZuaV@>=?g;GN-3=M1sCUPz5LD+H<+3|M ziPr%7CrhDYBqQYNt{oHut>l^Y^jqw%pML+_RE^ybu$wdV`E8^|qIZA~SEPOEJjUSL zVpTnw9oUF9+X80>Dy-k8O* zNE6$QNfVvk$tTHXIs;G!GFz}qx?mNpMOG-5mqDgoh?nzvnI%08*VESb^fEoc$~y#~ zm3_>g^H)^)vsJdvc7oFHU9VlQktK>ZDVAFOtgNp1m?-DVpAFao-w9gQZ^B)P9Qa>B z4s5gegk|$qaPJ-_1jn`2aSKbdUkwYxMAD4y@?A+<+zr9wVAc4~8OyCX*+xlZE3Nef zP&o_hErnl@=UU5#-TWj^jlaoXY~QE#5=gu1yt-6HyP&$H&Vvi7mFm>@?M_tZ9(x!? z@w^t>2TE3WIj4~MahS8WNCK{wXe&4^M?TE*@zrj(IcF8@a=|%FTdT*HzqEE?4gR;! z9@gKpzT8+Oa=TzR*59KaJ}bpN6W5tOsl)heNvEZIrAMTw_M={gOTe?z22TT z<>s8>5JKN8%cMkuj^nhdcENS^`I7D(s)8>`=i3e?#4+ZYZCNhSD%`VLwdy8~Z<^<} z#g$x7Ojv*Nq>d!@177|-Sw`4pS-+7V#4<_I=!~pKunym%X(uf(P}FmpbyBl#-AEcD zt}4ormaZwAiUq%#-Z}z@OS&Z1x(&c;?BlK)R^yr(17}b(b8m07oK_~oaku|#?1@(N z{C}G+K#Ml)AEZy#Qh4r2mZEPYT`JQ$a_ASYjP6_tbI2f8TPcfVuu=;DK^_sb%s#35 zbPv3nKL!&r=d?@|TS}Sk|DmPZ{m-mi9 ztws*1o>30x=bF88v8cdkC^9wVa$s0q@zC0WEW0&Lb!uf*SO2e_ezn?Nb#3{-=p3SE zXfE&VZXBhCS2{Ldt9fKa)dcy9J*#78XeDw^p7nRKn%(s-pDIpl&$RSCp&aaz&{W z^oIPv%A;vbKlBq0!Sh<#hLAMbClD{6;9?4Ju^=FxQnf0EE82i<8#`)OHPIcuq^WlY zs6#ul+(9K7+^uRtt!AwLuoqR*&wJ8X>(`M`!;SIB-z{`=O$5Vhd2n1x;VftR(Ta5G zj?)EU?8J+?X@-7ZAj>;Pp)xXL`S=(tnkq?obb$v(1`1!eLaPNh;fF<+-0^vB5?xe* zE=wTq&gSsUXt@nB+@EWR@?HI?-3 z=4&pzS0;9t$UMB41&+VxAqw_>7MU-mz;zOcJ82Kpm-1*nOraDZj}f|+PyG}hjd|g# zT;IU7=}>S~KroDsM6z2eV5{)74_^Db{RO3_*xq|nsz2||d+`6BeYg-hA8%^a!e*hV z{m&^F->3w^p&;0@?SWhHF2wl*yyvwmRbpO9c0hJ_dYBKj(j5d9v>ma!HLe!SBImmc z2#F{Ama^d6%EDt+Cj_hao;)fJ5TrxFTC-5C7phv*vM+cAcVNFhfq7G1ZAxX9;Td&= z#?os+8mX*Qd&_JEVF(Yr6$H0fbe@GI$s9WZ7hZqStKMqkvdjH?RB27L1(tB%E85G; zteeU5N+(*(NhSxD?+sf?Ot2LNe){o4u#zp#j50&ET#Zgjj0~4~#`wQLIB+@eMFtJ) zkBl(+8Tqx8FTY|L%Y?2l2iyCyp){Dp*iy1W>r;CQd;%J-x(#lQl#y3OX&F0N4zdCq zzI@h@e?yitPyBe^SpN=dk&-<8$|U)ujLi9Q=@b>@3XU{2>4E#uf_T+BNuP>og0(qe`JO&?jngt7%t zhCHnvPBw;k38kP&)Qb&0y$3`0+Ou&c=uzMV^AL}+MUQvyZkDW3xJVrl>-A4`@*XiIlSL?{8vZh_CaWs zYm}WLIkY-)08(8UBb0h~cI-m%dk4|l?kO_%_yZ9u3&;dwF)QQlAe!M!3jVySg!S!y|iv=WO=BhyW`gs#7Rg?HSG4Yw%CNp0ihHqR9uwcSoJ+bx?L z5zGR&H-r8+XIPtG$sY{X^?>2<(LC^Tc{sI~&~{spT5Mm}6zfgk>Sm8jx`veJl2_1T|c_%_ZXt`q-FEgX=^7%3Yfm?Zho&xf%#~$;Yc5LFY zI3F|gh6ylP`8ejS3iF*NB>L8Ho^kR<|Hqc z>y5!I=J*EgJKbU`1B^TQgZW(XODOTSt6+F33$lEC8ZV@D7_(S}IW@xy%%M#GAl6_) zrn^wDH5XBl zoCKFc`NmX}Y@GJp)MktgvunIfq%>kX4i08J#<0!e<>|KL1a0zKuJwqM`*1#+XZ#7Q zHhhugBg9&erkMjds3sDYTL#<) zAd%2SOMvVB--tva>i&^2*_tvYy|A?*A7Ra~!5qNw8+KWzd3N)oFA!7KY**9l9b3~} zTa(QkQP#0d|T4i1y>d?8v2%mn(f=Dleb%sn=DZ>nT*h1BSSx2l& z5)+0|fvsOksPfoN!#*ridF_y5Dlk69S2$$XV|tvk>CMA3k!yP@QM#9bJQ;t60uQZ$ zrF0?6B3mGFzEl{|;0&2$zXc<^i`hy5CY^Ok*b)|{3N~gvmE)!vR?*(GiY$q(>uVB;`R)}VO>_dGCG zONtxK^2kIm_d9@@h}hrBmkqCsLF<*v@JWv$cNEafmlCQlCUvmF`ss*F(w|dC;K+f9 ze&Yb7Rx@-y0>1AID&Ia;U%Wj^{&X(=vTF_4_xJJX>sWEe7onaNvt+U9+2Z)JVJPg3 z$dRCXmS(E9t(uypQ=PwI-7WBK2RAGv$^HCnT)Z|Noz)A}v5L6v;Eixavq6uuvU@rf zTYMr~ckJ*2A|l>x&<3ZZq4bQfUKVc^JQIg&vHLsMi=OO~Bt20~Rh%_|FTryy_-EVf z#XxK^WdaVJByll4oX;QKuj6M^Ft*{Nd$P#3XWJ;PY5H*L0G=CP_)SLU@yNSPpN0J( z))PxNsy97Dzg-rr?>x13og3Ou=IgR7o=2wm)d7ua()3t8T}djz1ypG=JMgS@ndMkwo<$4O6?D2gVAbp~gD_y`cUQ;u z>u0dV`UF#qHdzA40PGgl+Y!s$U{h;M-er}YSq6yyZbeg7LnX34P~lY5TB@pR24-<9 z$B06(Hy3$$%&hynishEAQrRrw9$TX5b;mZ~uQZ#Qimd6T?bbDVhYZ|e%0w|&379&D zQBkqOF?=<7hQh3~2qF4Uj2ejlNLTf05$2Cebjt<-L_ELZQp-{l)i!H|AW%KSk_6hJ z&wr2fsPv@tW77L@N9OeL!}=0Ddu4<0)&UhvgbP`LPM5T>p(G>DfVGqidOVA>(`8MQ zc^(+tv&#}3;RZtUS>S06ENiXqg6pHpib-v3xnS5%9lRQlHAdMem&}TxRW!xaWdg&{ zGA#|8?5etgBT!gZ2o8iScXF8LFJ+*h;i*C3)J1`9#rMFXRBcNqo+ayUU6ng9 zASMvq)SC)146CFmU`fHK$md}YG#Q6xeEngG?H!mjL(?_X#Lg6QT=OO?Z=1eNw$1Q(LaBH*imnqeKI+gnHOstk7JJ0;`mq$Q-G%-9mWd6 zQ&*p6>9?E(rw`@nxmU;6m^!okH_jtdC?>YC3rAx5ITX9JiBI25n!~-AYmpVX-rwW< zv*DnRu9a>g)n=}h=0}D2yZlAcSH#YBF|4_3qb$#df%mnfaNnpeftfk2KBLe?g$IT^ zOop__@t4D}P%b|`rn>+_f;(5i`Dg}L&z0xPUmI0HW!t#M5{jBfngT4oRFgV9&NT9@ zAOda{hg}z+&ER``9`U{|JpUp>csZZFgcuW-*=RrCJ7rcTyJo^cW|3f*j&R=;J9E=; z4EXQYTe7l>fk)l*Dp3p)dxaz5d%0HVx{iNnw2Cd6lvoj5({WDev4spTS_Y>=R44O3 z(Cr81QK8Rb(ne(z*<`^YpLM??Afd*HEsE$W9FbghzQNbV*P@h#`w-dk5=Ykd4BIqq zXh5U028<0{@kq6@!acRE?OLx?k{dr-xVAS2dGp zA38=zjVLujerJ3kUBwK-4$&x#AJssu!h4}cC5`sZ^|6!Q0IM}bJ=81J({iVaP1gHe z++QJ}HA^vHilOv^rGWSml;CScm`zw-xS0o#sl+YFXc=8WEyV*SipmOd)N0S z@@JcKDEwsC=D6NI#<~+sqEOm-wv|ba3WX2yRCuBvUrLpwndGqMOlK}C84>qLAmj9Bu<8aQ+}XRFtb<$@7e(TP+lzUu`3i>&trIZh^cAkx z|0Kfa)pPC1Hs!P^bI2MLvGrsO)wrzoBIPfg+%xlA-&Bk)4Ok!-|o@TDOeIpLbU z2QOgXt_u&Us!Y`@cz)Mic)X%hMSyitI?ANi24OvJu&+(XUv@XJ6c2a4r`Jv%)g%wT&;_HaiH zNY4cl((c4SLl>oH5X;eCEJgd=%nz$NPe;UnBM7?7WusU!?#^T8g%bYoHnN6IWlbw; zHvDQbwLexWX$y|C@L!Ml0Oe8%?k}XmOQSJx>~gd&JtD-wMfl`a zfCa!dNuHrQh9CTj7TP7-02yl#RV%3uK&=v^T_Q%QNXd($9oA-Th4IjdEV7sJwJ5?} zENV^LZff_5CKyAL9Rw3uh+U#RIn$2Jw+VAiz0v&W`!ksXLO!gJq5@&%uIn-c~l$@FAE!oSRj2)p|YYZmGQ&!k|rD49J|ibR!4FKhC+@&OrmKy0%Mg5 zW@QK8MvlN$9@~ zfc{TxZYrR*mF;az1XGfCEPqK{$5?0U7`v&S8-4i9JzRfF8BGI--zcP{x4@D`SOOLy8tI{_OVq9!_<~)gP!DX zSYJAPyEhWF&P3>O1CXPG%u+OrRP#W*%CG34E#uhylgwQ+w07)Sj>hI6ICyMcbUwv0 zLI*Gja`41Ad*c|YFXx#B-%7E|!u}IWa^Le@|cc4C*y9Mi|XoXXZ z!8gWY@UwVXh`~4Vn3yd;YTAVPE#fm4u|i%QkGulTnwoTF?IB3?v*Y|KO$Y0u0|Elri@cKBc=|F z9aZI;8dPtkQT1WoV3!XPQn##WF?GEY2h~Le7C7Z!DnKK{)hboHZaS(gTej|2iXMSs zvn<`W6wNC*irj`FFfgvJEy^;Gyaccj1qb200W%Qe>Sori^1!ajvv`xJOqAfki3*eu z=3a|OuJ=~zfy-#&26YjE>$Rn&&E@4EwG0mn?inG=kw~A7HDxxi!zwe|vT^ZVe{^)? z0LiUvuwJ!|bX0~sN{(e^eqYmJSm1}k$?s=MBz_H{+FUw-EES^UqAbmcj>Ff!fN^of zf?r*evT<=LxtJomy|(r5j%39?1RZ7j2C`p(|zyLm;NuVg;Kdj-7b zna4i0n%_ZGZ|3Wjg^%W`*PCNdzI*n*T#t{-Gz~f$^%f}e_tN~s@n|=YW-ksRs;K|) zAlhb5;#G^9Hn`2jilLDEm_X6aBhYvGdiQb!il%;RHhn1DUn)kqv&v>dbUW1>_lTk8 zmoRAjaw`9aVnACO-9vv2W7_2z=+jO@J6@b6F00nbBf&=qh#(f^#;zv_Y9Zw1HAl%X zG;9Ehg%kDx=307C#^Jo9Tnk7R=T%$ z`?QZMIlXSQ9*m>#ooe+4{#@~^uj~bWdk=n))b|ZRjde<$@?O>N?3MiL5Z;KfLXX7? zm(y6`7|+H)w5CHLux!V$Z?ecW{9G~Y8y$FqQNS#-4u{mff}o|bYy@pY?+kb}J5ggf zvM!2Z^QwiYc}Jtzg7f_IN%Yzy)ukYgUVr%*kx7mJ{=Bg0rGZaCqcn;R1usDxjad&^ z%o@W|OgY5mCtGpQx*#*-(cGprZb?QrG@lo;B^Psh0w zfn$-Ny>iT_`v~t8UTw$R+Ue|dGO`ud75 zdN#S*tVMz-u1}&1bF9XyG@ZpR;JMLl9(5N!5OxU6X6P8mYXay8m8rL;;c#P;{uk}W zyy`kLBHjYwKY!3jH_-d32k*o{@tqH{HV#+QF!ELGA)m^$Wv0K9Sj1#NW?9%zscA$z z4?dz6@+|Lf5>=T9s;WOedyON{+nN~N7N~h;R#Y3F`2luC&BU1Tud;SsY?t%uO?eNV zxd!|JCHm&ksCKTq@;i!>2bf~~_ypfYTyL#`k9Zequ{h2ukr#mxH~o4hBk;r zS}zU!!Z-9@E)iNR(#KLG^-L7~RZAHCW%1y0677ZKNDv!M*Oy1*)%M%tV0O7wl15|K z8#80q@(eiu>Uk`XeN7BqbKu(?IU=}7?>-+7g0YuiH92C<0q2Z2=uEpi zNtx%fTDSQ8pp#(OPih~+aHJ0(h2!<>ewCqpJpzSQ?1yLkbN+${goaf8uW^8Gdezro z@v8{SO~YoJ2)`D=ggptrAH@gHfTc8)9+lq8^95QAp3!QsT``Gy)*XZIjqjF+!?N9M z9vuz^UjlbB?6By72smL&SUY(!FdC z)3j0O^n19hinPEkU~<$n1NjYZ!&KR(9PuL-^-g%ym9s1w2AoBa7{j4Rju&K?s4`eC zV9waOsZyutP$Y(K5M8yYsTl=RcW7T$4d6EqOo51LsihjkQ+3lACku9ckYyrkRF!2J zXk_WSrOEKmz}0KbaB&yq##AO|Je$z!F6q6}FV3J=CFCpgfGX;N9jx;Z^pZN#n7zj< z?{7wxrh#{GH6LpY#KZ%I$nWWg`NR(+;#aBy@sX~WsFl+7{S=8;pqi=MnoccUb!ou| zUNJRbDiusdot%kCYN)o(Xj(2%PEqv=8y1}=!&2}II)0|$HAjbGabN^;NdH|+R}}a< z0|x-e4Mf*Xpnd@_0AV#5bX!0z4Y*#msiK;U?!dBChLO-MJvh+dN#o=5{@WX$Xb9f) z__VscaBI*Tr~MU1dzS*0Dat^&S?;z52bBjR0|kI#FYMShEM~Mj@W^`AL)!1(<`TCBy5=Q-p&Z`!FNZz zH|SAdKhQe^;K5#|9N9WBhGnR%laWWgGT;b=q@SL5T)@_rEejb(H9w*lC=?R*D;2m2 zpuDYEs}+6X`(aq}$hWRtOZo4wEFI^f>nh0sO~tM_!{PjVyE8Y}t~*1g!h2qQKan>VVB8;_4lCW+kmKQ#S%(%(UG1ejunVIv zW4)4Kkid?h@9l}8e@F#tS{_vm$JcCCZu%++UKK`4Q)P0Eft}-pS+VgV~|oXafhDM&hW1a5clK z@?=BwgWjU&Ego6f+FDs!I^l|3INkL0hs(==*XhF0Dcj3n{7LaTKcBOUY<2R~1pGwE zxlb01n|T4-pCsV%qYT)6FW9e;k{O$CKen{#iEw{=xU@7}Tr8YET_~K6%`?Xt#%tXr z244sK%5CYmbRNCqT$uu9K_#rBG+?_@Uq!*^o5>N&$Hc@mz z%rW+oS2pB`yFgUJ9O8eEF`+Ix)3`5(>mAH+X5U{8#;3j_6Hie!;53klpfeU!YI_9( z7|o(K{VfGFsN;H?t;i2HJ&&2(phm&SaVQ;|R{vfFr3*H;g_00%(rgbkwg#3KY892P zqbXZ(dOcm&WTiix({0z$>k3uoDUP!u$dG%br+*;(J7WTNIbX22UBnmT*7lDJ*0zIb z43V`B&VddJ($qj&0Fh3LT=HhEYYk{FYr5X+IR%BWIJY}0jL*+W7r_Jjp!CVfTz)&4 zSF@OpD%w$tg~{7+3nf!GGe6#$bw_du1Y83IA|#>EE2^k*LD_=Fb&Z-^SazM|%p`g< zlv_!y7cDYgOfNEC8r#Ed_&;U~KOw#Ahv%z|%{*p&Y$e9W=!E+SxUjr@WJ3>Yc^~uzK%b1h%BYwsZpF)3*2e>ev zNtH95_S_s}er?3hyB9MA-n5rTN6_uH()l1FbySds%=Mt?!~LXy>hGd|OL83C>7H73 z`_Q57;jv@G;ql`c+;I00%N?A8TZ`KY9m?uD?wppldE#IInxn$qQ_!DH8Qb}FJEOQ} zjEzccY>Z-V7>1%NAdobbfZ#Sk@#CtM2BQfs5z`}72P5@Y1X_Hs>3XIO+E@V-0hn;y zf){{~RmgHeATT?ef&=pp&5jZI(wELi58S4F z$+fk@-9ay@7_b{|;oZ|X{K}|#r7uugHBEO_ry;SYGI*U!6;)T}s9tckP~139r<}1j zG5&Q2);64~`KEJu$i@ALN0ycMpUUccmwVWqU_aQ;^~Gke^%=)G6M15yE#usIdkZD-`0uB#wqAe>pIxr?<66vm7^uC=LopK_KOwFQ7DMD-%uTw1N z_f6mxMrjPVDSwKRn}OR!=CU=KZ0hk9cD+zg#e2!nP$eN0CfjE%zO$!8GH(bpi==C4BgSeXF{jq$mpoQ zH8uuqn=g94N$+A8SR>~5IemX<`nAYx1QkEJhPj>AxthT96WD=!7*Ryw(xpt$u!(qy ze6a7;(PtXx>C6b*k%u8=Y}*as;^WeNQzOo7u)^x(*#RAMUGXLs20FS)6bY?^M2PY`!*>Q3dHs+ZXsu4HX7yf@V*5FkkMCbFvLN# zY3vLK@H5%(wAU$vY?cb!c(pnSm7n?sfdjYa_t__#!j*r6zTCyBqJB@18u?v<49I9)sZ5qnBN%w6X@KTzM#u-HI%+NBi_$08O zV`^tBvPSjAs&43VGAGMS{+tEB@P6sT(yvWgGwJr4@>sZ#X`0M}iMU>P;Q8B~5s%CS zgEKJIKr5JjFl(eAn!NJAIep-DEJl%xyiTctBX4LtKn>T%BGk9P{x&@?pfj#9egKBZ z=3~r|U=vnFbEn`yh-Himuz!4@i38;O7&DX)wgznKqX^!C#xe^GAm9I|NdMdk7V-Y6e*M(S{J!+VpaMZ<+jfc$0pmTCEhY#aisThs6W z%;peK6@{U=zKis`U;6PM67?`%v;`EZ2CWTcmP_)cXm=0GW+;9VI8Ih|*)SCo{6cR* zF#t0|r5?=voK=qlQ7;&tI8m78tq8Uc&pku0dgdx5qK|VZOxA#>InQ4J|Dx=zHJi)F zF627Ne~$h{VK^K%!5tnZ?*7QS{ev?jLI)P&G~-=FtMyyskbn4K@)lP&et|F4v*UpV zEGIby7dwXO@_Z(L8AoP1_Wfv)du)NG-Oh~05ij^a@PXWcc;lO=Sp+s3f^1&m7FKJS z0Rew{Cig(}Oh+IAvRy8ELejxWFF2kD6uM$@!a?MFX4j*)q&|;ZPn`A47-xVn;Cf;{ zsF18A!uPW-$r$603Q3=L7AK@3eRC(W#KA@%o@_QxVp36JtF9!uF}M~t!BbYo0&>}a zU2DX>$e)FR?NJ(Cb!IWR_ZQqsf?U~kKaUgiZpIhcycSURp!4(dT6W=Q*zad2uA0%? zZ^ddAvov?*U?x>Jo7TeCy2hvNzU-;Y($cl5meziT`G!mG#+!}j-htc+^R|9^nAovA zX943Rk4SHyFw(cNLXcSqVe0yXEL_^kjQHY#JcNsxAj%FX>M!y@qsPUV$OZ>n3y6eQ ztB{B>RhXwqcFAPVIy1ZzvP-hF^h#zB4`-50HpY{mza7bub|%Y2%D{>9bANgaAd+$M zLck0dKhHy+_2WVYGfROP7at27OG}%LEN}$|+fi~<@_?g4m{p6y-aEeAO)B!f>_L%t zX787y{cB3}N`=?K$a{RX!M4R5{5QU5*uxt)ZoJlxe{LmbZBmbK!P~D~xp9T)?e<=~ zjQiTkcq<&(KDYh0*vHgi^-#AZDPnfc-f^*YWc)C*c}#qBW9`DBLl+*w!;!Dz_Afjv zrR8VZQIA_VM7P1=HH-=Yo1Wu!p!-Qpb4`G$E_Hx@XK@$XMkHHtsY3)YTNP%)n+A+flSzMSMf3o;;8} zD?YpyJ$1qZQ-0z5B6p+xHtDXQR$QQIoMk#9_MK?kQq})vjHI@d)(hzH!d)CnVROzU z6zbz_qh|QVV^wF5<1XHjYW%&yD6|=%^4SM*AvE5WLrDVpmjoc&Lal>z+_30JyqQQS z_VKL<>V1KM5G`Rm3(_3!7aw$X(>lo$;KMgpXMz%sD7#JMAurN}EvY1}v&hyn;NN~i z`l9r!(m#>@C+S~He=hw;;zZTObllX4^%aqRxa}2JAF<2+YjM-dM``^ z%J)Nda7SDhcSlBlwn21Ou@U}&X8r)bp^{vH=>mTR*IX>9#r^`@sBkBl4Q{8~*`eE2 zo&QmX{mp>=i3kWhoVkR>NX;ZLzHk!(&Vl=D#^KFHxTm_ZpyLe`m_*h>c5eti#|Ks20o#x& zq+)BI_IDd9Zs-gT7i2@1KdDf~FX}AV_euCtt%_xlt12P-KU6f?av40}))V~;jq`iU zFu?Q2_Cggbqk>GZs*#}=UBzgrU~I^i0ZuLbGXy{}2!lXI6XI2HgjbdxP!*Xf4=yZv z;Edv?G2|m;W!C>vatbX zU8Qm_IN{oTehEl~1%DUjx+*3gbZc{}_KU^kebz!?{#e76WlFKt#Zc9Sy@U%W+fWx`LPfWV1?+dhx~)=7yFgX}&4bK>WwEdn z)@fYFL}L+{=*Hqs({kzr%vg;U56`Q_w5r9*!p>rCNu>_aHK0btRb{LKiHAqPtOF+NhW3YX!GhzzDXp5XvRXcW79sG2fFUdjogi6~!FwhE#8@ z0K8i;8Cok|#L-1woN$1}#H!&|HLUh9p?ix2DvbC1QW>P0W9z0-T&VDx1Kv{E;@8aL zf>R)eW$h(hF-_A_WXz;B=?BwR;kt%bHKLeUP9~xuhwJe-2^p4LVz;;A+xabvgxzw6 z^bZWXX3)io?O@ql%{2Ulz+0?X?5&P(D+kA|s>mk0MKOm_3ajtc?}CNuJB_0KqFp48F>m;eS#-YY z6ivt9yUEOwS8g!zz6bW6@A#Kl4Pdy@`B(89_%7nsxlXQ-xC0W4M4l7YTvX+uy0XFHY|BA!>Isl?*DzGeoPApZE z=M|MOtQr71L*Pc4<3s*`?%p&?lIuDTj2G|49vKmtkr7c@dsbFucCFb}Syfq$-p~yY z4Y07YA%RO5Nsv@SA}Mv#BuIiHMX~A83N55mvPesyC6C3nM>7(2G$WfB=}2SxheijS zk>+@0ACEmv>&QOz8GDY|<6}_-*)eN_kGtmv6s?M zA5PvB+C@CSsEL0f_=K8XJSLfW_1hQeB-ck)iKiL4k3EvewD~9xgtrW&nfz|?Of z(r)F++Y;Va1ZoR{;ykmJTMF)+8?dT-PRru7>`)u^$d4QC6^UN`0p(N53(7Ak|BdpJ z@<+-)SN^T?Drg}}h+qZ@4%QgCUN>j~617?E5ZfJuHR#YtjALjYHNHM>OiQ3QjFUM% z0+HZu{+lNIMhr){M zHgiH4(rwqZbvm`{v30A5%ccWXHjJhwl#KH+qZ&t?M{(7_aHb6G{PaoSykCc6QaLDu zCKRJ(j~l*#{)?&Az!gILmM#q6$lo!J4L)8(b=0g@$2lLbR*i26%`iZ@*p zD?g$9vhr($35pF9M(b?}I9x}3OAiNWLiNOkj0zHTg``Nu6s;XK^^P7HgozC;lQ8^^ zGmM%oh>c(<66{i-d7mVZP=g{VZc&ebT0lR>Zef`qG!cB&Xv>tK7gptjTqhImKlbzr zjPssu>WFL%8n8DNm=)cFJC0qeTcC_bv*@s3)oV7WwLc8NXW}fL*p4qBaovwpP!e!S*>`NLhn9UxmeM{b-P04M z$w4d4p6{_<04$Dok z5S|a_fC`mG@G*)EY1z=4Dz^2UQ9R*7d;kmr;UF+5qD0Qn}YcLVAH(M&>i#JobP}_KFKk{$OboWR-MWl z&M$Hk-iOyQEXf9uF7?kPpnnXpd;8ED{d58bNa{(EhtFm&<5x16WX4Zc);M$B%7~6K z&M4MUThf0LlmXR{x)=2;gs$65;oKO{2~9bX^&$BtlKdv1{jrn6gb~YgJWC7Qn(dk5 zq_~M>`jUF6AwdJl1*+e(pbE|7!g6YhNmb`yNUICnD(140?uN3VoTrHPhmzG9}UqwU1Akk-^SwltYO>6@1|u{ zDi^G0yTD!E?2uxgwfdWBDIsG~OSVmFjZ+N0j8P9eB(Ra4HBTR#E!41_`VW5?Ib)xq zCJSx%af(nB07F2$zj57E2O<~!OWB4S!B#(|y@pMD5nHsX{#OS=BFS@Qu)ZB5tnMMc zihd^J4GRrX)l#Dm-X5esFA&x)iU1nVXEakXkrSJCKvpVjXeF~c(woz@3}f_Ej^LW~ zwh1vBTdbVTN=d`GG|~u_L`B9BtzqD9y0PU|z>+X6s45fHuT&?1Qqu}==;C4=dj2N* z3Tmzz*k7>&)z!3bf}O%Dwja2z2&{M2lBD)7D-dKjgRXJT5bv^m-+q@clmget0IO|2 zjh|4acNh(jXhlfCbS}G0Vc@=u0c^C4vcG+UCOr#!uHidh(Zw2(vU?f3n{56>`Pa%# zL|K+GPS9Yd&1hTbHqxV|zCZsGvs60_O&Hc6hB4d>LtC|Ou7UpWIaF^g3sv3Efj*JX z$ymz&inFR&yx}RiZ$ADXc6EJMcYo-I+=u$Y!(q+{9|~z-tsJvz%AYDRuEEGzYMnf5 zQ5rIIF|NACwBSf!UAWwwhe7%Z18ecQ=Y+=D!;G+boS@)?76Qo6)eVW zU4$^^_ZeqwQwM#X_klB8-Qnc5BOb!ow`y+RQuO3%h9@(EuPAsJ(Hp@5gPL z9uHy!jdaX?G*;SiAn_L$=t=CujrIaTVHwV)ATG_JILcEpLV3T~`;kLhNrB{ReiQ?W zkS0j0M$I!N5sQ-MggOU1Tcd2{Sv_2VFhamJzwrCl3+{+L}lZI zg%DAIw;V?mG>qFg4<5vRxNnVzgKtUE>^d^$6$tW_ ziw|8~d;@s~B-x7;K{kjO)WU_EH=*VgIw8sqt-1nr^zJLuko?0tt~lLXkg|E)Sw*>7 zh^+8Ol6B;*%6ksRS$hMUQ8ta)+bOF4!X2}J-GQRF_g~2o!=F7$2wXoP1nggK7J3!h z@O5QTIfEF7VZlA|zAd3k;d}njK`gS%~ILHU+s2Efew$TpB%|O3BrcD2;tZ=xNYZyvwGAe2>vnoi(&V4pafk zPsLZ#lRWVvWxZI>2tc<=%DBKj1`YOUzO>Wcn$*P&uJb1tn2DP4Bxls4v^jtK+qlL; zrfDC1JLhS8mua;QPpuzeE$?q_o@ED84xd!p>XW0>pK8G2y_N5V+YLp1?UmPFVO`c$ zE+F1+xF**~VdTfqoH1R{unpNxQq!|F=E=2JbTmUv zM@mIa&v3#CUqYGT#BE!OQBBV%*i6!*iQPVYZzLT|tR5$QBl+v9@2e^^ESp1PvpG{a z!BSLIT?kbLh1N3ghM}rL=xPO@8C+%DuIhr@mci7!PT|VaTlM41ld3woe7wGO3OEb` zzqhKg>F<2rN2c(T7bJTG#B2ZQwg1G9v*U^j*48EEx6!`vQqNV~7bm-!xpx1J z>AAXWsO67r?;~6J$hJ)_dA~YQtxnA0;bdd30e=r`Q&Sq_o}u|ut_gB5buc{x_z~Q6 zr+m%uIJ=E^dZ4#*kgXpWaH(-FnC_aop~Ii)>P&F1K>|kLgPiZ+-9Jgmg~RD865RNy z*G1pKci3IiHu_y?Rk&e+)s-QuQfn_|cG{Hhw!gQ7+pV{p%bc|NNHKX>sU@#}0 zq~E%SYhTv*j;j77x78P*etL6$J^Yza?{+`t&%JB$(!2U>Mu=V2;9nKuB~|BQb#-Sa z{JEbCS69PN!++_xjqABvh;0Yxs z9S%heYRsF->U#Ceh00pn9*2LdK~7nun{1v77G@)kAsD7m1HjMPytTd>*|jrIgz$dH z8ef(4D*plKbtzK#V7oe_POG;fcfVMk`Ow(X#_|M@jx}V!c+8GY#yT-;)aMrQrNz1W zZezKjCX4GUQ))Yn951>+c3T}^D*0ZFD>E1|@1Xo}e+9@%ML7Yna>L~sD0XR}KvRDt zF#Uz@TB~9=*N%se{Ae^6G01-|isqO>4rHXJUw9-uzSguWt+nogZw8O!t6Wn45EPiqZ9*so5##%;v3YTsU1dt1iwZx=kpv%cklzrYFpb-C1QV`l{*T ze532Tm5O`jsM;9KE(A6FKy~Nlh?>guM3q%4;o7)ej+uaX?@Ag-Zadw&5Y^GdOZxd5 zq-90bhF6>Eo$1Zgyhb&u$+%^f6(`Nf`N`?cY50SaW)fd*Vz9Di*(WLcXyeuy=P}g&tTGnHaX3~9Xz`HY*bkPE<_0<|RVEQJ<@; zwb{;mlGbUy{MQ9WGgL7F=(J7f@+tPA&KUyhgW~PL@L+*?Y&xKzi_Gsh<;zqi$qLDW z)*NVUuZzWfDf4IUf>YK=BlEox9A|T3tK{?3Q|_U4N^(Y}!+Je~{cklTSm{aDCSR*L zJ*v;J-j-ajj$|0Yt<*heXRofYVUen=SmD{e-%-Vn%3}4p+e0JOc0Z2+p0MeL_RbF+{olqYMolehPtaU)sKT|8^(?4 zwee$bVk^hqwAehcWHUi=0WHnb4E)AtOsg2&t96p9Zi14AK0l@ab!a9qH%fKeCOfcQh)J4myUlFFbQuqD= z`#wb7xp+|sF5W-3?qB5mqQ73AGj(xi_uv>Fle;ElfdO2l=VpSJQN4GDW5D`EDl5P_M^L9jxx>mXFL&vwhvv0$)$FSTft1<13Aww&UmJc`=P*Ss@smG!tiQX zE>2MCx~hrj!N*R9llMMeo^N*urDI$96t3xk3TCa_2K=a; zoA6KVSek(=a$MsEp|7o~gHCDd+}3T=gm+Zt^4daq9vfp)J~3ST>amm$ zqMfu`+bCV=BW0`|>2wlf4CQ!6ny=}~Is9$NAiADf-m~-`jUgtTC2TkmwW+``!NyYc z5R5He*K8A7FN1Hu@YXGaPW8FPadS5FPCs&Ax!%nRbPHyx1x7d<`?64N9TSBT2vuEU z0oQcR5+YXlqGlM{B3EM}0@t5k)fWcZ+k1vMrus&7;lFdyH>{2KcIG0QSR+7N;P&SUs$>9hH3x$nvu`qr|Zd@@<4G~^!=+!_9GrnWu zPE}O^cTf$48Ua_#u*SP5?^&BbzwbgGT~~K>4mFeO0==OaGhJxMOs&LjwWeWkVGyKI zspz)Dsu+5QqwZk2pwsFCL=JT>H2C!Pg6A#tPi=u!n$3Z`N=<3N=syoFbB%Tb-m5%7 z$bfHE-l=?#@&QHJ%BP43Wd!>0UTd4eSVQ05(v7|@2hYupQBUX$22hmH7U{38xQ~Y! zMlb7~hWS4>YlQFYuwy$74)ewABaoo!XB6gZf5oL;tAI zg8HHky?QH#Hq}+_>+^97-tOXeWAJvD9arr|jU|TGis!M}1ocv3{XKmODxYVW-t74X z1sfmhcE^%)V@bCgH_kiOl-^%6Ezh6rC1Z{FoHq+ExBL2(<%Dr#Yze=4XC;{R%(iXA zyC~AKTtgU3nxLbsrc%A2JPQ5)JD^TtjEawsl531G7H}3D6scNDc8)|#!L3oaIG{@D z>ITMJF=CQ&vYp^JP@N-+bKQ@VRKk>OOixo8Zx0Ar@Op9@YU)^MGiLZ+!XGkr##eTX ztnwt&NZC_fC%KYis)0}_D-Fup7@07h34`HKlq6gKW2vB59;;0KE2boH?P_iRa^bT_kHT><`bG) z$@QTQ=nJ@45O;1F>vG?Ainn9Pm<`D~dTy>mp|-YIizjidH%-!5oZPH0xzoYaT4-Bq zCnGmdpZHDRpF2^n%Kee`aM^KNJ5v)a-%PxFa=jOQ&P?EF6~@uCGWtM2pLm2E$yiBO zCzB}mGboJmB(rFeIy#Yp@@w=`9eE4umpt8-?z}JH3Sm;M{!4O_XRn~4@e0_}w$Ltz zlc*i9O>`z0oLoJxi#4I|?vj7}zVw4WCR3q_jxKFfpox}$qg|M6Pr_d}#N*^;a=;Jq zSel1e0nK3%npCgajGFyoZ5Y?;NIUM}1eMeV5)9`Rvc{|b+e=zHad00u`TG4Flr?o% zwfOqEKJI{g^mKa9trSrv-fm+qBA|4;N2xlJCwnN6UG^|x@!9CSG1QM(0?G(kO- z=^1u3kN+O-UmnQjot)*m$13e3?dCH|xNnMfY(94J#c-N4Lvt*{r=W)dZA;GX$$7*9s|Rc ztXq)mCHNslz5?>Ai5y9+y`=-!i3DoaeBhwaa{+b=C#gP*Vv z5LF7gxUsNsEl=rt^0V(6ac^~DVc~>?BG}9GZWlBZ^B@M)nV4b%FHlTi&@0FXaM=4V zl3suPsCQazMTy)=)sbF-=^m|{m_tN?FoLm5_?!Hs4I$zSox!pZ_vWo#f z=-qSZd0^#p=H)v41GEGBV0_}+ugRU(;QO7HKJ>o+S6K7!uyM%!?(Mt=44v&{iQ22LJN5HrVb?vte($q0+p~c6gvg9xBDOZSGUkOj~GP5+_DARc5r?H}X8*SEThl zdFlPufybC_@q7*AW$)pky(3%l%S8paQV_RLZq-T}e_Y}(#9%{AL%Uv7jw_ov`pGEY zUTEDXRfJ~A8adiwX$wclBrG7D)f{T+MH}9&$wrMAwO!l}o4)!A+}ORen>G4@mkWQY za=Sk`ZXGpF4Y$s~-NCHkuz%F)E9r0fus7nK+zC7tba+5=0n=8O(+ zskoZ~s0_Yax?9xKapmh|kBmdlvqG!Q=)Lt;Lb*Uac5^#FNpAlR7);qoLJ?QX?_dM- zp}okTdrjL8;7b17D>sFi@<(1V+f0AY4Sc!p1o+Jkp8N1a`?hZH%4Wr7E(_(Q)HXXH zi%=2{7Fl*e@E++Md18!u=g2$PBn>AdfhS()6~pbMKJJ7~MGCT#Qe=k+)s`}~?Ry8l zEZY{VgoUIm$oUO9*U>3Z`+MaHuD!;Y2K<#~3g*t7**||?QHs4*tAx$705vP0&I5Z_ z8%Vx{c3MIlVvXUPMxz+bL5}-p&J5T`h|hD-JG_)n0l>3ENtaP}cC!SFd01(KC}mvM zVJ&oFaPZxFnbQ4jN|Dkoqv70;S+w)m-rp$4y_WM7Z8k}A+a?DiLpKl!B40c@%@T4- z+U&Az7%{$zYlgMudLyoLJ_c4D7_ejfm%zlEQq{jVKFhUNxX!q%8FoW$s3yDs&xQMI zU?5JyyT1}}%J;R`*fQ{o*gGkvjX{R<;6yTT3Kq4|T2qY|!-+7lD@<4Q3E>(aGdw$uYmae5@KvGdKdYPPsC1s6GE^_J z9$f|L43$n>QOYtpr+lySeXm1CjCNR_&7N&;C%0F_juh0#G(N$ZAw;N|I?3s%3VEAy z5>Qp|f$>*V@%fKtqPj&zZc`h2g;iMxXDs^CI$3<&@35NXZW13x@szOjr>gD-2!#n3C_Erjb3vYGKn*0>)bW!6PE43yQ}A23tuzbK+_Fv zA~s!)i*}k|t`EPeWsd=?Ojx>(3x+zb%NPd3lfat+0ho~nrMl~Y%`7lfCKpcC(u4_O z6T+yPg8NnUFjd*ovSF#L##MYvQ*p-5VCI-zH^Vti#|`DHE1Jm=lauKhs4cn*iKtL( zeI4=?cG}O@*%HlaNiR=anlt*_B&tHLwERvzAMWpOr=@`yT_nB(m4xf|(UpWbo~$L+ zD%27ceQc|~;AYj(xaHbLUQ0AC7$c!@EuvbIjj>hMmGvZS%bJ^3U&#mI6rE%eJ_?IG zt@P;NimSZaSh2#^XrB7C?H7cg%leXR(As(;H~uBK_L*#ebZ)nvKnWeFC$@RV^@J_+ zpfZaUr4CibdDsa+$Z&h8qCiXIAlHg&aJIYz73I}`n^hDzJPer`4J)lFP}8WUU{wKP zY)dz&roc~tHHAA$>azuMMIWxK4+n;tS za_2c6)3IQh{H^Ad`_r)ismi+a14M!Hl@1Bec|aj%(?|VYdLO9VjUEItN71+r)XhLo z#e&LjR0607d#ML%RgGs4YrRgtNAD!?s(ZVt&r7h^vTn7or-R!jq;y z7lgRiFioSR*Bj|tR-t7_Agy$pB^u!y+nt`=Zn=hV^qCHxIX?EX6Vk+=bpz=R7q~UI z%IN$u3tZX`_rFVun-a2-;FSG%r|ROSINS27=o7=rDn$wIj;IGlMYbiSFn1o~7NdRPQOSk1+>)w= z2TN;l;OfWr)6#2GX|bp{A1JwN`57Gd+NgkN>OlG8Jl`>( z|D5uK@;3AZT97cO2T^P@o(@d3^s~Z~g?SM7_P`e-5pKUM$!p8P{`!$`TuloH54DmI zx>7De{`}37&umyoq?@ARreHN`-vxa>*7uIm!*RBsckYsIba~3;f`$gxT2P*%jv+gL z?2wG1{wW%)!Z&G9(AUxtU`_v59U*RT(NXo!>6=B@w3iMARtooA!5(SSwV%Rq;VIjF z<^p3Ev@4Q*L(XHQ^D)ZTM8G|l{D%nAVnzL^6gzwDT& zb$>2D$r znx~on$ix;&>%bHPtMZR3kl}Ti=>o0tFi+DwP&-c;PVEF@WGVSvh5>bXN$xfqf{s9^ zbT-(#kY8{(Wt946J zOoqp}rPc6OO|$qhr<#d|H5$uOHn=V?w?AABCozr&Gbd- z9+eJlfh-ayN0Kbl{k541&t=TC7gvJH<{V_Df?aX!SipI3>{v5oDiAUEAHP03J2^R) zgh9Qo1>c%$&CE_>&X(l~;aL{aG&wudl5~655?cHlq# z{$~;L_>m>FVO0Bzgmymvr|pAE<{~zPR+LC zdez5b`1$$y`Bryr?bi!FF?`t4BY6Gn{Wu;B){BNjcOtIkCV}L(>Ig9f7Om?|%&gsJ zg(2F5Fd3VioSnVx$|Gq7(-QQBX=oirVq_%Jj#{{sQwu=jugy;`Os>yOS0QI_a-p-< znw*^L&P@3g9?UFsSaWrEXK%JSJw4eN>r8lRWodWkyPD1Esfpw5hN~$eZHMd7UM9ir zIZN1&vgj$Neut*Awo^HfY-l?=mm1XZ3PmVVLIj4F#6y$A z?JL=ZAsZiEVRL+kH6E(2H$7c(S$+J+jM&z#v4&~b@p*r#$<%tXv60kO)?8vOt2$M! z!+-FzY>K)Uz<*v{e88WI$ETX`-_&?KMWm#dylYAwX`u<>IG;JjnV`=JaaFKM#vkS4 zQv!}~F4(fF?x^CE8h@`4@8#Mjg^G2fNUL#3YDur(Wh0aP$UP5@fA5HN|IbSw=?$hm zaah{M;i>B>bpZDPYC3Wafod2GUWDfuRSKPwUK}Ww_vZrlN`lXC{^^KP^NNcdasf^&fONY> z=dpJCMD0o_UBPyD7j|CWd3j_Jsf>>(fwWw9i)==g;lCrRBC8Zxb-1~+bK?e)^K$L# zHT*B%Q$DWjD39jek*TA8wtP3ua){U*8n&PIe<^4oP8rgB3HFWI^LA=}hU2k-|Kjm5 z4@p$IrL9F((^0v}RmZGGgwSN_wZhmlms&Ze8KXJk6vVU|WRe%*M^*hLnF z&`jI)YMyJG8Yt|*emH`=5iFw|ZiarP;)frT>3lhk1x%Nv)ft&g2 z6pA68(3V<#R*0z>Fq}aqE-KgT`Rgjz$q~hR2#|!B_hEF8fmm++Lx3)50iaEuH6^Uw+|#y`5TH9vPJFXA zU8_yEW~$Yhi4d_ZLZDV|f&rSJ0R7;T2uJbBPa-JB3JqdAPme8*sg-BkYWiVoy0%BP zmuBkI@Bdp(qi;S*->;m(XJgjWELrN-1NX6f%_Ro?qOV*`bwWvSR8&@^u|Lc}GT>=d zg2K#QG_s2Rs~H28AP3^xEAg^dumDzP&UY#a7NktL?@58}p4%(4^Q(pM>hi;~2+HL* zPEqgfAK>y<#gYsZv*G2tV9_vTzk2Ip`C38NdP7t+9}$x6STzha=jf1P`BWi~i;KFd zc{pd|zz8GC>twRb9!xdXT;WR4E3(Vd$=Mv0kPuh;x8~@_fTLw%V} zOHzpREnFlaSx9%uJMZ7eCb@2K7fQj!+1yFh+`V;0y+#E}Uw{7;b%UGap}k2(IHkUF zL>E8QUp#h){l#qv;SRcugWMn0aRf)OU&N=(`i^^*hi<#~&<>1YsS9B{U*A2VA7RG8 z;3Ze%Xc_FN&g9gHhCE%5Ot?Ub%LdEM={4(^^(S@TR(~DR?vK zyfH|QhMul}50?OO@DHsTv=Pm697|K*=T@)2)v3-i)wUTNG_Ki#Gepn;iv>*$yrA1E zV>TWf`3{)KI>J`sK~?2Dj^|Wy`}TqIBcW9_Zs;{j^+S)_Hi+%Y)6A*Au6)=5dLO2J z<4GX>ePvlJDIZdP@Xq?96sbSMzKt{dOP0ai>KXVY%iv?$8S*8|KyA1CiEIHI+nu8t z!JoVyW=9mxBC%g(M>U;JR1*1L7h?_`VmT{bXlKeDF&<<%=Pj@}h( zyso<5%#7!%_3_cQE4m^Z<6ddvzC>F^S*Q3K1G)AOSR|!dhdFPl)aLXk(EW-i`@GhR*2{Jlp-D_%JLZK2@f98cTp!YC86N^*(7OcqZhha zq6v&1j-$J`w~kGzmVMc+em#iEw__KL+}Ot;>xYdn>U^Tr>;-7STI`3#Zo<%yYv>&k zns(vWKUUQ6FkKS9EOT;_f)?CA~8*|NZ z(>!Xtk1Rgc^m_N&BAJ`3SXN^WzJ+5`)~l2UO>v|Zu`q(PJ1`)aIE>Er5ry-;htc`# zM_Cgi_2|L5l9c8shqOQ#(CxnpJ-X0kzMrC+fgY)$8i_XSr23_!wCKClqi;h9-%&mK z^S9=Igbn`K>zpUa(P2vi3ocSacX9hRx#mhdSBcvy!C>+H4lMMyyAs2-NJy<R}N+1qZc)?k4Ue&?h2d3ch6yX6RZUsh5hv5ti0o*ECHqLUmud!r_!g@ z+Ez|DX(PqdOO687q3}gb@^`$kZ#uOo*hlB`|EcDf`{Zc~m$ZLF#`eDHnB6Wqadx|= z^E?Jm#p@^vE=tExrNF?%d8bX(`leNyHO{e&r`5i`rlz>8({jVlnp$jg9@}0Uhj!51 zIlt4aH5a3y>-l&VF^&JyRVTX>NKx|p)@)6BAE-+M96vQji z6;rX5M0p=jxZYonwx-y6tG6`(nYb-O)5AE;ItV6dAb=nO1%jnZ+uYW{FidnfBiKOn z2*mA5=)tp&PEgzZXq&dNt%Gs+^Ng`#G5(p>g5yR(trf8uUqoJgCD4~nG3iOKD$sO2{-N40B#8MJ3u`qJuZ30KjiNN>4|Ji%h2Ar{GMbDCY7K-}Dk z$5dT?V1w)YehGc_ii8Y%7voQFs!V;76uXN>|GY}r40G6P4ev@Rf{js5a4`B=-GO=} z_eS_PvON$NvYc1VieE9oGP;S+Um}e%M0eNo^FYA^O*lMiR7|sCKpQI4f%~-4lTc2p z$ibgl=n;W+== zbk>2$jR%0-Imf())@uNq;7icp)1R+{F%n#(j-U<470%`!0Bd#OGJ%(*eZF#&`W&SX zH3Mi$oBB4!iEYttB6KY`vOtQP{Y!$MxXATjEYSJI6I}eLRryfGdXs9Xf&J%p0KYfH z1?)HjS7;Y7T<>>taSwFs&OL%lKg%ND7L4#Cb52?mXuXxB`|59pl7}wx@wst+QP=sO zbNzq5HC=ny=^f{q#`lLPOo(obf*O}n&Y~B zU6&sZ@_(rsMb-7R)NU;a_c$&?AIG+x%|nl~M2VqHx0H8dq{YyP^3ftiTbRSn3fgMC zK?o*z18(=^N_gh+)NkpT3;T8=w_jj0&x4-hW>*ZCM{<3`fCpPQb#D1r9CRK+}aTS@^zy{`y6FGtiiEnhDo; zO%o2{jA^Qxrkand=L6_!-A)$XoPEPL& zZIL_Zk%u9yK|Na39wV$tI$+y-1^s)KKZCw>j@G>rLk?XD0!Di(Mc9EM`HYHjuGWpd zgwyQ2e`Y3Fnx0-dIbB(ppRlZn`Gv}K>AWT%2fsJJ;7>14FSI~kpiwO&Gnjbu* zAY?gQSN@F>pwIK+wc&s)()s6I(*@dqTID6PU7?~?cR{l zH2d5AY!B@gVRp9**Uu<-JTR$lyQl;OZ{9_%&VP89#BOli(KH96LaE|$;Pi2@>fmbVrT~L(%Q4?fb`vBM!q1yY zO@)+8`X=fHn-r<{wip`d9bY<($g6TU<;#cVzYE42S#a1-7O_Capl+U59z*ZFaLyC; zX|ZueY_18Tw~mGnRn<+V7cUm4{mN1p zL_P*7V5T1h^(X74%ehY=PM2*z9nDA4{1WaRiz;Ik_=~2d*vfEX@^nI`6kZ%m_$_p) zHf(H-c2u8Vny*K#rB*ai85s`*mT}eD;!kl|PvuZ-ydIH6Ev|0Jc+HsXHR;3ma@w(m zwX_p+j4<@$Jv;jtca!c=oLfu!!Qchx99F)mQ_E$Cb5W0j_WChGs3Q}p2*#Gq>wKrh z1{zBY4Tvv*#wGV}yhabuW^~LX)oCZ58=()br za{41xJ)xSM7N6pEZvO0Dit6u^iNMkYu2fXM7AvuE&U4QWIE1{9g7B$mz%KMa$ zD=#R2D<3zrRj|^+CJB3u$qC17pH?05CfiZ5ZD8&@-o9a=aDYo2{)7XJ$_sQp=8m?R zsw@MC_T6hOh^yyt=mZ=D3d5W7j;^Vuq0+6(q>n?blrtCq>H6J6v0lQc={?FLfU$79E*s3;KoCnmFJ%6g)y4&gD zZkza@>!#_NW~E3OHS-ff=O2AWRe!+ue?V2A z`6y>bCF1X7CXNgydndeGQ)B<9XLU8wpWDW*M^ImAD^iX+HsUPZW^pR}p)M``Q3mL#DC6l2al4#r=k^G?%JhsP{mr*U z5`}s=f~LEb(XGh1QyI0=b(QV_l4v$3dfNyS@;P}ky^Mz|5-1GU$mI_nuID$)VE+p# za@bB9Murdo_NhOjo~h7F%d|e0;hz_)KwC$kEeyvC7>-`@3PBBIjg{EARuI2iobDH= zhpZ8045f!_`GJ^1e-B(+Z7Kgu2{Dcwt|=m%RS%;q;{Pp=b+SdY^Nj^#yu0H3_~c|5 zhP5zkn6quUdUkR4_>xzT=>hy#jkrQLiu;fYs|luZ#1mAy63vsKC{JK_9@n+pZeWk`}d(MOBtT7Husar5yJH&q-TWvsE) z+o`8)Mo|`ySl>3JJu?Vkc?UgRGWh*gXE5qp_fFFretsL*<)P!i^Wlh=sr{C@TW^hA z#;+Zyi*UAAlx;h$Sa1l7yO&t0q)Ihmp{RZ@7s<7UUbxlWojku1+wNzmb942q~#qI&A9CoI%12@l=U(E88nIW`qErbhUyVg#9 zUS4~Rnb4vda=)+imZPW_=@b=tk@b^0!6N!8{>=u#;jDKgFyS`diZIRtI-7Ms&%(#? zJ5_y8=Q}D8vb+Ks`N}fTqh1uE?g$S3pk|MqAG0;+61i~d7%)8XYPMOKcyOX(+BGi$ zE2pjN*M!NK!K4`vC(IP@fhSy7F%c%XX>x%f@X9 zIwSXB9K!8cFarAML-^G_8qrE)z{>sVxqq^@`AOI(i_%o4WYPpA>pn zN>-K!`g?Sg(-cQqt}Uh88!}ImX6}%ZuBsTFqNhf;P4wCESgVJ@+N6hy^j{?7_m|{~ zPl!qt;jqaNxK~ii3OWA+@&G4m`l9^VD_>m1$DCaLRCwF{T(P(DbD%?opp899(G(Fy zS(=*&pe;iw7V(Eu{=#-C>{W)|E*;j%geI(|?afX}-@%v%i0ZzE{OPDOMJ=zqq4N#k z55X31%^+MA3@)&o!=hf*z&@N#F(fmS8QmO_SsB_3o5|;dctO)%pku3*pS@f6bmpt- zE_e8@{5er8&TBm(V@9Vod`(FRud*$LS1|R`rlEmlFdUDr6J-e7YL;_8i3a&mz-!|r83wi3cJcKa#r)iWtSOI!HcjUKrsmj% zxthOs9n*eEO7@T(l)KF1#b+^(=PzS=mk-Uu$bC8;@@77++^f79akcv8>AUiIhWds` zt?w1A+mx~KKzxiTO7!< zzg?j9m-k2w^H}mUD|?+8%!=xUjN(gi*1tT0NBsbc{>?!a zOFYULlUrcfJb)Tmzd-5R*p3b@yrEVa6=O2lu30SJn+JFs;OY6i2%w?rj&T#JcL+t7 zI=XKT7TArVltY}dHk_TWn$FA6*uPq;mk0PMl}&VLK@HC!Ab(B5@g&m)LsufJJGbWN z<9QDR-3~|`7&6)+lv9}@eTW|{)&u;MeWx4B6z(k=83!3@u7=fCwU{p$2zacC^LrH6 z98Ly99N)xPb{L)E)o-W%um%1t#??+B&t;0h{20a1&SF?&_-mZOZY87QS`XiY_xgCR z93L3o+uO~s5twaW-%E`tXt8bVs%2#BuabHpb&SUTen|Z_hPj5Hg}uF+V`SgmSXd~7 zK(yN-1;&;sWj-^qZiLFX(xezEL%R_?W^}gu#v1GN82 z=VQsdz2%Jm4fq!&^FKB2Y{C7_q}g0+Hj5nq&&aplmVOh_YX*H{|0ce=)>Lxc#$i1r zqUaZGTqGcS01F)By{)mWB&))$d<)TByUn`0544?0UG>o%P<^gdYbVl`NWm>_Q?s}b z+Dq-z;q-kEkL!99{tPWxO1>nrH49MTnnBk+UUV5F`uErKPD)dCVG zQ9DSnyusD#!>%x^p71KQ#c`gKqWd>X6hw zv!&^3-^nYPu6u*s(`c&Eu9NV)0;mu#j^uk9FqLmrLzbJ`1CnV06sv$zhljVd42vTP3^&}a4*M_ zTY-MCtDI7vQl7{89|}t9%hDy}>jEsW|%9eT13UH=C5-g4jpTHyk%#3=?9 zFT0b-`!Iyc4Fblx{CFe1Pv&KQf<5Z2KOT?8A&l5vHK=bfenr1})1JRTt9rG~JkUW@5+Z@}6&ddVY)E{mn*otr^VO;}fy& z2=0M?&~oA#$9KCH-t)Lu58(^A<++t{d^ztg#+9$7v}SAOXVlIzi)B1iny%P}jzLX& z?agBErEUQy@i z7R-SQc$n|+UIl#ySI)LcpTW5noN+|x^sPQ9S$&*&Acb>l6MCy&Ix*R%y;AF2t=Nbv z7E`QB#d-~nmsVrfW0l17E~~0*xz6fT5;&&53Wb=Mm5TZ5t9YFJkstX&rS5t4$`>9s zKwk^|2OpiDF*Q3h?>$@i)EepfE@IBU?Y7r=JGqlGdV%)0H>-C( zF3;Iqg@Q*v+C#1p{{pYmuw;)7{7mD@oT}P5zVetqI{K1OLt?H31NyT>nS2DKa9R1V z^25qcDPL5+to*j}2g=uTJydc(ASC0j@=4|ucGsyD?p(W?cnMEmqSMmd>x8O4eD~{k z`t{+v`}pqu?cE)nTN>fxkla{HltbdBet0QvW%Ev+k#pH?e27)!|6lb(c7wNFKeFP# zSro|4qDTktW<@%9H`|10SCL;hEEL?d zi@PKHwxZ8wX?_nW?}WN|yM4AHgZ`oe+8OD@8zDY}F1^-h_Pf(smqwq@)_YNFi-vK% z-`ZL?w)(vzI`A{lsR~UX@QjT@a;ml?42=n{J8(+~C!DWg5QV^n|3tZL@~OvCuJb4s&=6dr0|!^3%6JhHa;jB{3KiE>OW(g*dLD z#UQ{dJm@EH$SX(4ZIhXdGhqvrTky+t7^UD(XBcxGlv!KA*&Ff7NRdy0dMONq)NlkS zkDQ~xLD_^`;@s_ncOG@jsoN(Mtf6~Wr2)pICmAq~O z|FUj&f&X*2-&Qkss^q}Q5w&T@ppE$Ez|Y8%_atV)?!b@i(}3!KGqO)RoZ@cLk&Qa+ z(yS(AUH-}Ef0UaP8-993Wcb0t&7;1P*B%@&raNwlzp{%e`EKf%0Ec{?B~N?p$kc}& z2oL1;>3nwX(0s$xO#%*zk*;%%L+wAVoK|*~?}FO@eYw?}?m2G_>?)61=^}X=SekFO zj4})Wl5R+hx2U((>E%nrG?+)UaeXWEN`|_>BXr9R!gLa~48KP~ z)UCZ8LjU8J0@s2su3I=~N>NwDdAyanx`vu=!eGdK>zW&!*ehm)Lkj`BU2A_olndis zH`ou{N%*(tk}72m$m0}AIMUtTd%5IWm zya@SU(ZuB|SBR7=xqZ6`ayw6`g@i|lo+}Aq%*kMjdY5WU$Jm-nVap>N$Mrn6BzjKJ zo<0B~0 z@r=-Zjl&B~HBz#e704sj23fcUwo;m(G154gS!6((Sx4?9bKAt=2GktGBOGzbA367= z;Yec&i?W8?xARDY6rhyw{4mxr;-9{VU?w930=>Oy%tbW@MXrH@V%ec|M%HbRN?Pz&tV{)6d6-SAcrn0J>pvXt)+lNuCWShViB11x8 zz~h#zDHIf<9L=gY?-}wHk0nMajeY?ffV1O$W9a%TGH$?AXwQ$~B=`H!N*}{b!xa<{ zYTM%X@i0d|Rl-qu17GRN4_lm9K*1T4KeHGe&g9R@t8eECP;lij{0y^bU}hKO_ww(Y zP#r9sQl_6-ZerlM=j2rh--#;*BIhhXXVSrcS+wdFjV(#kVvXJ1ukP;d z(Q?R@cs6ENcXxJnuF-ay$I}HVh!NYa==xYI&AtHnTl^)c?zzKI7Zsl4tskiDfZXcW^%`43p-Wu?9f9NFn z-(no~`$A_bxOz2dhVa%^T-v${Ct)+edx|m;^L|{JS2n;tm%1fI9qSz+ET+wbkpSsas-`>b1ymwHnGejR!T9WPMkrI8Bh(nCo91EZJqRc3ZGV*y+^33kH z=4Aibmp)Z%%-Bq~AGSKj%e5o|v0mSVyeZ_@-i{P0x=z(w@2t4*O`6y4&EzP=3jrr_ zJw=q^S}2mX8%#MM;_pudh*8cnoW&JdLzux;Vj#?CojF_*imG)OC6bLE3Gz>$g@mK#MKQ+Ils^4Oa1$bcJ zQZc@B>QgtCdXy@RrgVKa*XkHLxsaY^8@;5zZFHif*WdElmJzW<=!Pz->O0;6*{3Jp zySrQ4-MzBQmbiHJFStf|>Vg^R>4N_)AO8OATmH97{((Ml-5=rWB11aK^+8h1Fh zRRnnH%E_9aEx5SpWV_^2RAWX^#~zhyg}=M60(>OjAd{E zQ2RbIzp^ra?2&Hwkw;sP-``P}F3_>XqT2mW-e0pP;W(*<*?lB9&?@LG@v4bB;!;xztL@px~lEo?I3JJsT>z zHhmwve;O1lOE(yEtBdnZ-?L4f8J1nCR4uQjR^#RSXO?G|XByEMB36z?jSFHbh-Rzq zWE|MKT4Ah$zPNrZ-n?gK$+1<2+Zr0G%HV(Q2bSP!@8Pk@rKQQShaYWB)+&|SWFzx~ z1ADg$HeyF&0k`JlN+66N>Oerm9IEfmX_{WS}KqGh(lb1p5z!=+gS_P>VVM#lI?7zuByF+{HW!k_sw7| zfWL5Ow|@5cJ|d9$_nM{#6~opowebqt6))rA_s8`Qt9ml~Ar|}i8k@C1;$5W}KPg_@ z2K4j~P=vICg43+sNwN$xPvI;=Yf06kMO5fjN~8j%>%C4&WPjI8>1qiibSzmtw$#kR zlg=JnShOEMb)8&UYR0r}7Q~BLqle_4C)zOSBA-Nke(2^6t(UkasDlMHFAUywh@hB3fPm#mk^p-d0=5<4uC_3PqpQe@kv&%Z84 zyTx+FwL9i{mGA(U$;a*db#Y8|Lq-Fo58?1QY82 z{rUv4AZLuNJC=tvQ0L_=`jg5#lDXwh#{=OxAUhejc; ze}A_PWm3*ntA-TZyY8?aWpYEG&NnHKk=%}!+8ZXQ{j@ESplIoI#w;4u&)uzX=I&4` zMPCvTKJ+Ge5xzZ*gK}WxGot2cmDt3MC6ZgM8D*~Phw?pe@zbE5&pnvCJYRSlx;#H< z=#!JWaRD8mQy=YbNn|K_DBuBd0W5Mp7YEmo$?HM9x3hyhYLk<=NoJ3@{?Y)q8Pi6( z|7m=f=RR6U`804=1v*>JDU~S4cn?w*3(XwBzC81_b?C()&;Em>cs9OqB+t-kbof-@N?t1Yvxl`p=yc)r~}|CaM@ov9UW7~`6#_fI{*p&OW2 z)p1>zrSnn@hiUR+RZyM8nHofaUc*Q{o{D%~*iunP_+*s0L`4aiuYp980XK6|5S%8#%#*4{gge4gZ67-J7WdIHl@0yg#hl?)=I7 z+U~^oVrOE?SvYrkLDTGeT`R0j9iOV!OxJ2Wu2#ctR5xqY#_CkDUWNN4c82tIIwN3Y zY(RA7u^jC>1tD8g@!_8IfQA-YZyjsZq1@um*oo9N;{PS?ZJ;E%sx!fO@#4jQMr34U zL}XTF)?Zd;c6C)(byrqZR{vG2Tfe9zB!OB+5-LD2(|`bX+hCyi5q4u^Y}z)$6f?(X z5gxC-Y7fKC;SBy$v)EqC?0Ck~9PfCL_ju>HSs!~xjOVNu?d+IEV()$L#ZP8sRaeW> zjMNnw5gGa7zWd(0@4ox){Vvmv*1EC&BHHY>@X%ly8f?(E#P=9$b7N{p%qSgoY_7&L zqNn=2N0xxLMbH#ZaC=zQ=&lKRB4fFq=%WdewD%+QbcS^;&(G6M`rQ|qPvAXUNyUrm zLll}o{ax?XXAg`w?)S$ge(GB3+IHFV4U?0(Rr35{GDStMy!m}$Y)t*i{VjjY{~G*i znD!IOo!r0qMrlVosh(Cr$8T?-B9(X|Df7yBR;6rJZmdS(>tKNr`DI=)kE%9wzc8;~ zz88se_^mRwbDzBhmYs|8sc0bU@0q>&&&Nf&q>k{+|LXPoP=lLB_(ZZUd)^irT6MW^ zcZlc9!7LcJ@+cEDcz8TAG%~m(wPz2!g|Q(7>ytn+y#4V;jB_|Pwh?o{J0 zcLGI!XR)^Kpr?A5?_gnS5KO>_!1vrJ-I~GGb&DsL+7v({i1;!EP4#Pq%P4w|Vx}&g zG(Zje3z#t*B(D8Q?bqOSRl^AlD>6HlZu;=oFm>B-HI+6DSeaHsvGpHfvaHE?@aq54 z449tazirLEbZOnPZOgWZYZxx7D+bf3p=-9C_K`!}7N7Ium2=}2RCWLLNM)t+98lcM zy))zrqo*4({C9((wJSqNNhwcHGILON=aLinj$1)_@^DQi4y?R^E$0+=mvbC~mV5n*!r zqcq)={%H4;bFh9HS*d(EY>Vpb{3q1b9d-LwuIu2GL(`=uDUk;HyVCb&q7#EUMoejJIIxz1OEtYz zPZLTQbv#w|9LkCpyVvWe_^C-4G4qnr%X@YfB`<_MHsi-3nBm@a9gc`z1v6h?7dKxM z7KPJYsAi)VTK4=M2S56%Gb{;CZ*H`sstWI$Vy~2YYN4+lx>3IEv+nz>Lza^ik!=s< z=mNL}m~IYp-`1{y8T~Nbd@K^l;|hr54Ct3BeV^&9^WBL*(+pw}O3(6taB66G0NcqK z>LP5;{QDfE(=nVMW2#F}6OB$`tP&zd>Dm-bRO7f`n9$Z zo#cJ?10VRn*GG`}I_(UlXSCPtMrwbl-#vSKg{TrTiA| z39k-2W1b|LyVmNCGYpC6lg|WMTkRKox3Dja^z+74b{~QNQ@MD2xSvWpFFy}raR^kJPb0YRn932yPFyLX++2!^nU2Ee# zI9yrp$k)bxhwpWVJTYvAe``zsx*WriyOfDdl8zv2`+9F1xc&Len{~jBC}PErC?8fn zrd(EjNBN@+n@~2@z!vOo&4X^_uSN^?qE<4DJa z98D;79Fl9ZY#45k)%E(q@-&I#S^*|GV0eSYk``1p+E0VqSowX7?oz1+1IYgD;m zdQxtg!h)6ii=->vMIsU4@8K&~e%P$bch?tQOkV@X?P#W2or%tikFA^<{7Cf|Zi~^C z5|2;yROnItDD{_;IfgISI?36}*`#ywYJGlXzD^eC_2os@RB+p7gwOVp!z<2MyOF_4#@S z_;ZD*x{8KIO0N2D9E7k62)wux5~?SqBZ8V&i?VRGTvp@RiMZmL^nKaBG}46Y zxCM~=sC66Yk%<FG=OTk?!f+l-k7iwS>yO!mw;H?bv%-i z3gk^`Wv600XHR2xNq+@fy#wuS88FN1#4({Rge(MJGHn$FP<+ot>Uy2vmcm-&Z(<;wQetEypx7U7sdDED3ukp$l7DwwGqy}s4OcOX4c(}adAPM~P)vKT{sSa_h>G0yn;G%R)r?l=u zrEx{D0$#svd0V5(&-)MN7N`l_iGH@&N0C#2)*9Y$&v7TjivQ-+T_-MI%DnGy5++4rUox<7_(tlD|FP_UGZE^r#Me#C!dX&OP zlvU6yPb#NjrCjuQD0qn(y@Ih()FD~!4{U+-ct}m*uP^_MT|W8xUh_1BMc})F*I?kv zoecZwr#Jb3k90am+wG$}j@;AZ83)!Ea?=a1Et4A02>XEkT&Hrh5{BU?1!gb;3iJO8 zxr(dGtg@!uqr6R6>8hon-v3FdXjE#wtH#=G~r4u#z*e|Lt|3~;L_O&mvQkAJ{8aHrA`G1rN z%!u2rdMebWRTyk&y6tVK6RJ`4>?RAf1IzObwNrLOY!Enf)W-bsfm&Nn6FunL^@DX9 zckB2-g-3qWyD^2Ed2ElgufqFX<)Cs*xgG6+#oUqj=Fvp$z$Pk+z-PG~dk(dN9}#rz zpm!+?%{rH78oZWk9A^Zv%fofBb1f^(Dw6W?KLa0+p)A83!q9127>U!#(Y$&SYCp?u zI-GiDIer$VJT;j+vd|pl?AXC+u|&Xy2RAe!v{mik^87fB4%C4z5&(Jdc&!^>#*mcs zDSk4{=i8MZ+CQK7%$73@3B3=#gPuEFm#<_^u@C+)<@HKW+If>eH5-|KNNQ(Z0J*mT zwZ0dm-J{B5$_JE>E1yz+LHWnZKT-av@-LLHD}Sgwr#!D*Q(jR1U$Vt#wnZ)kGxH}u zLG%0Iox;gP4kvDSM4V*S-)wRlJi(<%&)BOw}f25 z{UP7OASsvxZ5!4j7DnLch|q&v0oEBBuoO{tk*ONSH&KR`EUMvqfRDObIhM)bgP`jq z95EDquF-&&f?Z*B(IRQVjE`d*ZI1c_%u-JyCbY#qk)O_#CdU18sd^}JF?{WUW~bN_ z{Ny(be{5pRbld}nq+G>!GNq}^@th`!(dzbBcYC`SZCtA`FiC=NyO`q4d*kNbcB9+P3WDrcYK;B$9fBr&cCxLI)V^OU z?!y9U__0-f*~gMwlPWb#w-kh(xoQdezvcQtH5re5hpG2914}b4$1l4sj2+D|ON7;u zO5i$h*A0Sd#nhQTGnGtIH&FfN_=(uPO1{p5paj|w(+zmaE8+el47oAgv`XHuQ7T-= zeL7w$S&r>v$eUWGp;vW`1&@uDTpitTePU|Nv<>^y9by@-SI-SlI)A+neVUTI3HI96? zq;b$P_+(4M135pS@iF%qhB_|s`aR5}bc?Gco(eptJCD;99#E-i4!)JD1y?jz`OsY5 z=~LI+QFFZ47^vk-JGju%HOuxq+X|`v0?&q$Ga?MzIV-~T=Z9*Jd;xx_8pVJv9aF@I z9_SuT>Q{W)Y-BuH!YJvCH%r2&nq;h3K4 zk-MRoyGIm%2Jgcggs<86$sCze9AQmCXu*|E*N7uSgiZ986Ig{|c!+xs;q z>G-&=kozeH*8wrsNa?3}rV^n6ErasPW9YHNAs9zmbsi%V#d>Q%HQE*ig@Ym?%|(p` zQ4|o`QMFHMYKNBbO4rU+rS@8FT_xPSFnv_4^54m{quSW?80~5z|Et!ea0xfr)763koTvI(odC)5~8z}^3!Qebx5 z^hL`mhs_hsu$-QNX5^K}R>sP>!zxZFY3sDfw;6bPQF(Sh;^!7I#YLQ2j7S;-acW(l zR^Z$jLPST!u(W4tlkr$R)=HjNY7_#{X0}(y=g05z#=U+aM%d+c(|H{0>F|M}#0FlM zt|(i5`MR)m;*Jw7ejxS2o7dy|SUg!<5wD(=kF-wA7N`IkR`29Q6zaJEvv0zCk9@<9 zd_oxwzr+iFFpC&`Qoi)_SmqaUOfx?u+&d_Sm5flqaB1GIMCJ`mc5qrVHSShnvF z68f5RAhb+JKj@Y`8+3H1>{IC7o?q4AY2#tg<;!hLBR>q9zaCUv%eG+!@n1rhS(a8!#C$H+SFXN-PasnNNc zuDi24{~@-^mMy#DT;LN`1+BMahHrE+w5@!H69h>R{3AFJ5O9{b`@=ehs*R_e*!Rt9 zWR*>W5dAG65eYoKE@I;v;s-y4g(QKJ?HQzgg|o`d$~y}7^9%>5n=b$H4)g~!-GW#X z!I>z}5WF-JZWl6G6*>ma9XyH3a*_gI)1*?6A4Yq&pdY5qa0aId;8rK9x~Otxgl{n*5IM{iu#OgZj$nM zGQCiFp0v2cD8^CB^DJaCJ5T+7ac}W{m`s690#z7FhB+Fo88~CV2s3ubjpMm*z!i)J zxq@GadwgQ9(&YGf!SScWwt%u8Pb^*?mh#GEgEN}Z}2(3*^E2N-}w%=o^r(n z$aq0xg}us%qlaLIPnfA&`IZhSC%NQZlt#wXo%t$yaxQT*-&4Yu6DR3Wz7&Sf-!ikly;_&Xa1}BVp;*oR0ww)gM z3cxDIi-Ovx+%iEEWmK*-^-28hDIU_JH=iA(ajQswISQ+R43mOGP)+^J4A7ZP?tR+h z^iOb#yB)dH2IEx_jo8FO4@B69LYN7UWS@%TPY}=EE>#gHJ}z$uj!o9Zrc+**tHKq$ zXP4D+H7Hpuu%9l+CA0K?q4++Qs!dXk3fcmoZkfx`OcNDCaghx0SZtn1PGaOY!Z8eE zX^9t|K!T?tJLB#pRf+$qy(=cwruk{2ohw?VhE5u$i7CbR_(k#dKUhbcTa&5r zGSy9`u!akiAH^AM7*@9rvpL48H?c+tK@n9ws06oCFY!qBlcc-IH*i;1HlX4HDak;; zSUv=J(jDHhk}M>OgZJR7;`c??qO3Y<#oI3*#BI->uq!n`s@QfV@@tiW%ik7xmD2j2 zhS_|-eB!rDqYBL~3p#OM}&bP?avSxeGo=8biUW$qJX>IU?2u^PLGoFfR7ZYvSrBUpWHyT~Q6FjO_uHZ`o}>Z{sEwh#*j z-tZx2G5E*XaQ;>9C_{4N=2zHL3Ul3!^^YIg#8n+mfj8JME(n9ZQj`;}^1dO|#@Dv} z&%wMc$$#ioZF%V@_Smc5*u}Pf<11|IJ@$ETtnKH-ie7HZfbM0o8|(!45BwO58|V)W z<>S&rZ#R-(+x`K~I9$c0SGAu!GsHf4+xn~CXNq&lO^9I|A`d3X4e>1zT9ijPoDR3z z=@^8ITP)Z(*a6XW_ro{TgC>Olo`7{!wHA7jMhRmEWxnMYxSL|#V1N25pQ4C8Vc5D? zt0W~ycMUs$FJ0eOK`F`Sok``#m7l@hwP%H1+x}&wlin9BvI`4d-TwA~;P;2zUHJ2p zuWsjiQci%%0RC4)nNyTugqnUaHndl~$jwh5uuGU0V%^5n5T(uS6yfW0CHo9~HF(Hl zBn8GcqUk8RzvX&1vB7u$-e{ZHv!e(JGa#~TfnW~UJULeJpv`kvGK;p)-y9&RVEpv= z=11;F5Bx}9i2=OD1Y6xgba*jRe6*p{7wI}qBOz6i3vkJ>^;m3(jknlXi&^y-6FQ88r_;>mZ(|L zt)HWG{NPyA(luWY6Y2$p{f^F0o6vf3@Ejsr;7rX?8_%7XM|Nx%yl4d-?K}cj z7!A(lmW|7tLEN6u;O3iiq>jHv5KPCk2I}>9(o7>E0_y>C0Sn*coCuZ7{&7gTD(kw) zJ^lvUwq=NBdJSB&tO-j{@1*~c}$KPUjW;r!EQbcFrg-sF3U7uzD(rp*P{61PioSAp-a z+jVNQ%t^wg`X!0_kH;KWXH2n_S(p({afGISs3@nPVnPzgk&p&R6)VB_BYo243XRd_ zCbhoUqwGTUmh$kY{#qOvSw(xRY3+Z`G%58w`V%r3TbGsAzDZTzXC>-5v{X_JgL;g@ zvF&J46)RJXG-nBzutarhlUMMUjafsjT$Ih2bK!NA#wTLEqy>iq?e(5ru|3M1hNIoQ zsWTdIpNoJp{lht9in)0)mS!ol(2s8Aye+e{olUqdnru^0D}b~In(B`RS_XXuzK8jh zd5n;wl+k0O&7HoZq#MDwT{R|9_XPDdB1XfTzHR=Yhw4iYJycnGeG{*GQ)lm4rcb>8 z!N=7wdi=p4JR)u=g?=sKk18^wou|eLG(2WlB!zbrclIxLPBh*6LzRc>PUA%P?znr; z-R15F^I4wM>HMvCHXeHX@rN3B-a7w(-1Q!{TzSu3Uirs!Z2@1+ec%s}0~o0k_BTXY zwpbUz#pv~LittF%MUF?BtS!GpHPGq%i#G*RrE zt_zPP=I;@B#LzcY^=m3oHxL7M1Ac7?-;ebDhxbVVD)lN)z`j3PG-}Xq_{Y9M>HesS zRP`Ij{BNix=F8;xs5oy~$`oSZ@Z9i;h_V&4axY6Azz@cXj5aJDT0HY4rX}zHEl@Lg z>m;QMx1yW@X~F-o3Up0dT&qMQq)jb-i>T;11CIkSM{m8zqd7IqD*#fcLR4`Ea>b@9 z+0rfACL|p*9nu1tBh<{HIF)>kjYvyXtL>1Qs@Zv5B|g#U zAxeIj2W+5(mO&akcfm!sOiXIhuwA9}w)Q88x~OVpb)IX55|4_zi{RFj%g0s9Ta2Wd zRaPa6SQ^?c+CJ%bldcgJxZL%jCtzS$%Hh9MxefT~j0e9yUz^wGFACnWlWOx06?4sC zq#E)Q&Cypg4*xtneDC~4COKPI?`Wz7W4?f^nV;4{pixp+KpE-(0`#<>W$Fq%{}m{E zMP;O`suwi5F~*fJkwx^^B$|Ed1lr&J2vZlJtk?ab%6@jRXi|NL zhB4d!Sl2G(Z%E?`IDM^A6tW#JL7G1x-tz<$yZ|)&J74Fk>Rb2=DZPxa8v}1GuIZ{u zllv8bhSS18e4Zl$C!`4d@Vd(=!_Yw;L(uvnAtCNTCAl~IC6zMMu*2jQSg>Nwi_O{; znO>TnKC6X6r7|P$o~~l#+;~Sd&5~brec!G6CDT;TPcQMu&zp9&U1Hg7;aa5RIYW@v z8IFI6_=gYUo_Kq?w?RZ4WPz~O3Qq>XD{-Vd=vlvkJ`$boOj?oSVly00`LEV`-Apx4 zcf3Fp!;;>FmG~`5Xd4LELa1g|@2eUb-4ua;cTDq8vrjs%q4Nrd_h?n48LU&ysCIAS z-%iU=xg8v+=!Rn@q-HsWenEtLwUcSimfF1<;g3~Jd!laYW0M#ZoScnr#1Umam&9<0#`KJ7hJwyA2=bl z$@uqSFh0$+5__87%a&ny75y zuSC>|EayG4O=LvgCCkzc+ky^3Y(q`kQjxgX%75Yh8!H9B4WC0F;3T-ralsLtzQaNH z1djGhmpklm=yvIcFbsoIh)ah7lUqK^Aa z4SJDg))FV$MF*kA#C$TcPB3fm|$B=bj6CO`FT@H`zTgecAI2~Ec%?@|3 zlz2(s#he)Nnv3B$C$$lNDR4gN1co{B=!9wDz8n&BL6H3Tc=cOYoo`jgmvHX;Bc}Pj z#)>$~A@t>wAcM{+=hOASo`XeK^;XeOx+6mgJ0gcu?iS8}Fr9N-%-kGuVWcQd2SY;! zTJox0gevm6oNL3+XnMLxftzGPOCN(Zi~iRrr%fkrJOG{DvKW(N0%IVu-{3m4_@mzw zAKCi~FIyj$V^7HelG)19$29<11e#%c$F4OSJ>R6BOzA}5pkm+IeEC0eG3>^TvyIrr z8RZdt-}H3yuk$@*cv5|8w;86OucJH?Qu5AWdBn2>Nh%RV@RbUoBXtmvKJJ>^F)X~) zjT@Cf_s{7n^KfI_X;W1*er%uer?@8^@%(LByx5>`F~)Dni4tdd>26UB?CIPzZ6(0* zHvq>IYx<_EHO}#qg(#^5w`@*?jz@eaoY=hOfKs$kyUH~85*^5Ew|BEYn{DuN zQ)Hl02KQJ{PrCUPX-QCHuFqyX*q2W96vjO=-;;ISj|%h^s8Y$VOuM{-L-eCuUEjY{ z-HYg5WazFG?;zau@Wslf_ZHgE+SDF*-yd(XTfq2Z^J54?>OSyIGWUKdQWEPpbPeyALSv6GT9@ zO$f+|NyNWh;zlozbOfZFScUP6H38_>*}w!#CjinWWYvn45joe-h2 zLdWE&_*(?l=b>qfzWRfg5ON&OoKzCDJD!^Kjd(*v7-^nFX)hr_G;g{_t=HdFnn|>` zxUHGGW!Gn>$4ql_WQ)GbqP1zScayCpGczU2s?WeL;5hx*=pi*i9t_IX1nm_|>C}LT zCm4SCD$9d>sJ)LnYl1jnC=F0JH|Qg~NCRz17Tmn&m`Vn#CDVe*>dAU_aS|ClRQ@2Z z6?0w82j-%%f}@(AkM8}q=9PPxKc?>Zd1ePRq|IzMdzn;Z*M}EdTVi#&tNBax#Z>;F zzVm+WwRJ<<&TA!;uBROR53iAs+Eb@G`x?lseBEj)4Ole{^;UJj+So^f8l1p2%w1Q6 zk?#sDRGwyqh09B3Tvly&tnNB$5EnaOu`B$n>DRpg{`2a7His^fac%=S0Qx@eU99D= zGxkjv2SVUb1kba;WO^7H%nauCMQuxSbhG4|z_&=(e7oejCEM5T-bW?oHP!Yl%eRMg zd5a?v^?BA=ZW|NpzLCqq0o1b{3E`98j#!Tia)tQF@X|3~RoZEkNfszxJZz`N=;2}d z2Xf~=hY%sSMJ@rlGh8__cITDTXjd39b|c($7uD=7C%Vy{5%>vFZ(s9YIu6TQOh}jc za>>%YW?Xhac3;?aI+Ww+LM5#hLe!ajNa?#yj`=#i3T<}$dJ?a(;R$j9H0^< z_UZ;H2Ac60e~!W^W6m(-FIB5An2v=Y^o|7*QKP17PA4mj8kz>DwpFp)!VLXezm5)4 z4|4tgK|FmD5f~Qntd~ryR5i6}yy#*;jX0H@y=`7Kof4~f?5bgDl!cD(J0YW*WpEibq$_f((%#zQ zK4$If>W|l(eXpxf?rmx*+6!xZ$6_}Ndm_^c6y};{3iXkyWLb)4HYL!iZ$~eKQDsvFB6TSh_=U8$x<*!bj#9n=JOM@=1t}sR| z{d5q=!D-#1jIDrDp=w+BOkrG_0v|5L_1ez>9f$>$)YeA~%}z26pFpIf@AfD68kW;Z z56>3i-Y)jT8(c;FSF#`OZ=rD=>tU{M2tR2V{k0=oa;imeZ;7INVv=8YBr*h>4BUcW z>!#Xq?!0_uR8r0`^B2=A)mC>pQi)^y1d-E6o>%#zCUgnb6VWcc6zHrSOa{0GXtBq| zjFHDZ3+#{?kgGRwPr7WAJJpyBn5qY|unoW`u4W@UO~YJdOd1bvtZs?-K75_(eLfrX z-{o1&9OErS)OcG|mb+VGE$2lQ=Y=+*F=tM;e|(@*2o#JO?5Y zvPw=Bk7OjqW>~+g9-1+VBu=cH4}P*h%yWrXC83w(d81PwzeC)|udYlfN0fD$Un`}l zHc>!6;kRfrwF+rV=O92wz={RPm9kvJdV@#gqLuu#uff&BhA6PtORaol}urf}> z96$^aNPGdbgb!&L?dOMUp>OKvk@&Z3`g8rbQr2`*>+vK?EWXt zY}=9ye!_q$9BxRv(GOl$Ugq=B9Lz^I$tZJ9@tRD_=#xn`);mioa1qzE2+R!&*VRdq z`kL{G6VczlD&*x+O&@nWVgezEQey?QJqe=KB9^P$M4d?(Q5RXDvyWI>G>*b^TIcy| z;MZ%g`ng-90i*XCP{iwJHT{USq8qBEuWR(NvARvwle+2~KW)uMAf*N0fAA921LuSz z!ip>VNrbCzu@=Y0ItN!w)+SU0PU@m#7f+Bd4?=iC?I)O*X03ls(4jMX$*36fOf^fa z9ds(QUbV6`qx#j7qgAzXpgHEshg@xPzETb5=O#-=NzN7r>_l%c!lt#7qiSQNMb!my zsZKA2p$|fS-L_5pZqsd4<|mk2h2KpaJQx(m;25`ioP>D;A#n%S0Y2&O7?^AQRwi#- zT+RxJWQ6zQ-ZbbZV==awjnJ~|>fRjhJ#(J!Vm4tyOv^0`Y*EAoCgi+uEx8i=Uv+~h zxPsm1N)SOqebtW#WyU_&Erk^HJ8Vt6u3O%(nlz61mUG0nsAGA)>*{4qRpXdPQO9VH zf=6{z#Uh4m=3=kw>j5F`34tcN-_5%`rPmImq}HF^|*}k5DynbtXRSM1p@-g zm@zHI0z=(<9CVboDj!ikg&F9ET}pCCk|c8-=?p68Gd$_xA`u-z;8+<*i-4x=pbfAk z(5|54cpU1QV_@+_XCkLNGP7V!c^1}Jm{t&L0n@c3!UGC-eh(C5L$hHDaHIL-dW@}$ z=wF&mwTK-(P_cFPea!$Z8T2^K3a2ST=(S?UfRXgsG&PBapu5?RFEOfMMDcXgwhZKvIOnn@Nv|pCT*khZ)7v{>5mY5l4uOxN-d4(rp7E-riX_9jvPNk z`gAHUi+1b}DGlA!_pc)tDsj0YqV~_kK2nK?^CG=mDsOmMlgfdenDVWm1SKr(C81P6 za1A6UevE`OM2~qMzq){2kS~mV#G3Ol4p7f9@!0ydYK`<8HfGt zth8|*%>xW3Ff-hWvDT4auOS@T(6^g$c@v4dvm9>;+CHUXTL%G0#Px|OK7DcbZ&XYe zh1sH1aeN}K_ky1FQAk}6x<#aba7FgS$jwXR=oVe zh?t9uQ)@Fn!y_}63egtn`^umL-KyM=c@;ujC4saS&e;gYCIcDc<-S0}S>hdTtq&?) zRqw2=u7T>rp|ycR&_ZBdi@R{Y&$AYIxS5}UdVhZWNDC$&hcMN5G^^x+?CgL9wJP0; zqv{=4_xt6F0U9CGRCowcl?}#Py?24CO$k-6AS88oFw`_?^Gd4&YAO69emEPKta01( z+(pf#bd0evkdjMYyNYHF$`Q9HhxF1sM(f@94!8rlv5g63n2sV`5Ns3 z<;Rsz7jvrMM7<$=GC8vN--l(!hAI<58&E(Czd*NHgl^ywqaEQk&-2O&=5C2fN5O0W zRY0o0py@aS<~Tb#uavi+)S3(R=Hcyx}HzQ#cjYx=AqQX!=}(3K^k|AJ8>7fFF!&RnbO@#QuWWUXE!D z$UuPRmchelQ5ytVx5l+Wj)B)-L51qKH2R3DIswy;t3>r-Qe8c+RhgrmSf#YwwCrP! zN+#4tK!iERY-_@&boGShu&Q=^6(08CN5?f5IH^5RynhZeKJ1%@ zB2XWwFG&yjMpv)yheU&DXEdD|X32UdvR^v`jHd>@i|mW|t`0wkD?;B1DuxYL&<5l# zuA`@zYKJiHJ`{nks6j>9nj+mY&;`IA!fdauydH5?nM*Yg?Xj+H>bkzE=`q@uT{1_R zR(2_UBVjCzq3hhQ$FY7EdSe{w?2VMVWf6k{D`MOaJjAiR1&S$O+Zw&D+@U}w>#gY- z;25I(V|EHj&muWS*%Ad!>)^o`4<1DH`6WizflV*}6{t+F3#Sjv#I!tFMdXb3LmE$c z28xol$!webNp+^GR;IeMiTX~|!QM&dd0bUSPlsDP_oApD=ICKJMA|P3b^g)4DI~UB z(u|_Cn5%3~IS6{v4YVD0$RvVqQBUr5II<#q1yfaPg6!3>Q)ukM9X9O=%{DBZ5Syv* zQT2T_c#Z0h=#=Re{HHUjZ|NwygqZ!o|M!ExBS)YvxA57AXLG<|v??Ned2raWfZ^~k z))a%4biQ0i7-l{ZLhE#)I`IZ9rM71`=1bwyG}QuCEjzHvVbpV~wohs|szzTI$4K!lR zRBChe_`vdf-8N_aTB&yChweL^qjHPSeH?P8us=7kIou^q4OSx@AO! zC9?rsgXdMngI{zb5ojfl9sbpOKVq66G|FXT`_#wpf(35+W00A+R$1b9Da==;v~^!y zg#`t7=EU{)gxW>ZJFpS6DR7)}fr%5rbcrkZ$Uq5VnUCFr8i&5>xn6m8%DkxA>`0?K zRh#^p>$uLnJsoCAz0SI4VHwUy=*w_3&(@W0evG}NFJC@dL zg!q&-MpB*twcmy|S(odA)H|Uk;YwT82u%lFZgXGZ{tO%dNT&P~JLXhhhwnp;RVFH` zrq{z-$s!fQ2&a6{AO!AWCIhm-v?U(Ay`*dFAU%9DuuCOEO15WJ&Cv8prWZ_9U|Lub zd*B&uXZ{}4r2$MQ$v)}y$E%g<_>ED!xrFenODRvk4>IX6_kzQTka{ZOFN5wY6NvQJ z&@rnkKd@h*-m7C@0BH@6^XMP)I=*tbG)gkj@I-* zXC13hf5swq)RD#&>3F~#^L$W1a+u30VOz; zHA|qE21lyXR?V!sm4%I4PR@Dd`I9pk*k6~q*TmYZ0#p058dhT-b^EMsM+eV4I7W7AZvsFc7mze3fQ|3e7N zfjS(*m%qjD5TAel@=JxE{Ci%=AMyetUifAHqB?)+?VNyF+XiYXpa+TRE;}I$SUTl} zm&Chyp=107j2B%fxn3x_#7i#ok}Xl&kl%{=*R{eA#&{89h1wd0+9v$%5fJjsAaNX^ zusC-d7@j-!Xn^8ea(QRP3)4z{#9Ni2`DJa-`DHKvpV9NpoHk4l8$It_8zPNsDkQUe zH&RKq+uJoJln?l+0AXR6WVmpNCwf-jF){}8*#Weqqio?Zd;F}qq^A&f|(#_RVp+5WXv>ms?9Ld*0dieCi69olt?9f`A$A~90960hVBzfNAdr>2ft9(;w*JDq3OBHuY z?$5B{w}DAc*{NXq8OL`T2#9EoIyB(hp(nZX*}z}JQFH71i}~`cJ@{ByD64`1jQqxM zVa2Dy{Gs+$jA_4WI*y{`u`tN%rgB;N?{;!qx@#xGd7Hakfehl|_Xo^4}JgVaPIwY+}D$V=0Ee=_4loT_5?BXTJ-rZ z78-H5|A#P}|Kf=L4{Z5wE^)XUjIIEWogNFoD!q3mAjOs zK8Z}VJXS^p3O-a@`hU*Il(r(WRVlQmBXMU>DtF^9WU=k~#ag9NGMJY%ZN{PV>m{_` z9#zp_-mQM=>AAcgbfk{s7|&;I`lAE&C225?1o`ZUS8ipU;Y!g9Q&G$T+wMH?)o)N9 zMYP2o?Y&noFXCVhxXKP(^z+m z2N!0mq<-nr6ZM5sxpMoROJwoR+rzTcUN|`E8sl9>$+4vl!AcFYf!@b`({iu%ULyUB z65QfJBNkt6a&M$=nh~MU&stHcTSJQ^nH1@QR657&$J&`|97|p1>W)W1VGtoTn{p=S zC_bj$=FGZs_3BmWqTFZ?dDuZQH8qHRg7^oQxMPv&JcGvjXF!tj#mF<7C9DkAO9Z~f<#ivc$iv?{>pT=LL*RwmMmL2ai~vZ%JQ!#{OK!#Qp_K z{qNZ|PI9UV#QssBQpnCGk7Xrgx022pnSTb*Z1JpJr!exeoh7v|di)LKbSm`qICW$b zpT&71PTj&Kncqt3E*vh(E=QcKl6G-scrvBBIWPlYw;QbJChwb23^WH~pUQdQ?YIw? zQtNZzzvVvnE)YFuEyf*1+#nT>ThQ6&;VHc0EINJ1}mQa-T2w>2Y$5 z1nwbC4^*O3Ys{kX8R*&}Hz15L-!>eS$&O+BaJm0S|4%p6HN!8dD$IloT@OmW0jfgi zu7#FSnk^YtxaNj1YwUPPFFu1w$NeZrG-S0M3qS8*o{COjNhHswy`^`JF9pgg2(aoy?N%0=blurm8;b}C`#XeA6c;bXJ22`X4CEim^W z;H8K+7H;x~w!@=an^4d?lzWAruWz-XSbSHzvL03{l}AEFi87la=7@Lrsy6}cY?9~A zT>{M=E#3DiKUCNuQ$o&?)+(~fKz89dW=2PLaaM69gexN$2x+WJwh8q_{`H~+4*2_3 z&SVTfLVn^63`P=VwV?4L`M%yNXe*l+wl+7R4xJ0(<|WWi&WD@p+*G>`+}heaTG@ot z7tu7_4mY8;SmE_>9WKJ7;pWzr^)@j&o9E$Ym!K>tWb=x+ghD&(k3hlvH~c?5?X-bc z!qyCD>v(USvvDA&2geQ?*eOB@!jr>9D7TEFG9(kw@R*1^OX@(H<1(Rylp>GOh@ls* zN{xgW%{i}32wj9pCa~?ohLT2A%Y~Uo*UEKKP=GsPC!vqVil{bmZ5ue)iZ|C-a44;}KQJx~h zwYkxj`3Xsw`1m|E=|xq&C_ethe%hy4JNS5S_G|oT?YEhvPs;xWb3d+HFrJ~mp^7Tx zZPHoe3Cw2DGoqD^kKX+-lWFaZ?sVB^I+{+WR&7 z1`7Y=$?xx{@5~i`AWj~jQWc^2YHFBj&s69emGNPo{U+o$<+JDaOsMaHQ-~FDu z?|#?5`p(YUoxvZ!=k5n@Yi#`myQ_6FN2H;p{GpY|zi&0W}U!)OJXWxHH=$L>bk zW#lg2uk5Q)M(^vrXWv6vj^%%;e1~T-SNbk82aFlAkmFAkQa7LUmj`#m0JHq-6=_qJIo8@g%MytwQ-ZfmpEYP)d|%$%%LtCf?t zz{hxEl&cP@Qs(-H%cV0_v!s>{(>8J0)TWzWxm?UfHnV-~ z*oGFDqk46+v18he|14SAoT(j$7+qTJJ}qc zs@DY>BNdRDdQ^_Jjbq1tf)kX>5(Bv3MsynSmK{Ld1GIdCzu`l<+{j=4$5`%L3Y+8U z3sXA`ysHGdwul!US;On)qdPZT)h~{Aj=eTe*JC-5c`7GN>B}=ln#zM5t4kG2rV81h)#(okZ~{`#JNBi#!@kL~mcsC1H@0-GXO@D++IxD&L|L0T{(wxRp6^vI zfc&i~M?i*6E(cf!uVacE{e})-%3_%J zd-$KItzrg3;5Fe5WD`rZF&Z9&;i<9XtZb|N+Eh#K&NG`{dtO+22X}~OWCk~R`6~li z^rU&UEugQ`%Ri-rRaEsw@yv^=T44lVvh&ZeM%;uyi~a52Lf5gS9GnHs>b;hL^1VlactFj3*OF$s$t&p2 zuVe_!vOOBwDiLlRckwO zt9q|GN%vzba*TzMM5Q!+fv>p`pJXSN*1lesh`c)(GS^V}{;YCx7SF4SPS4#~>xq>XwR`OW2mI%Zg#GI;eOpFX~ z;W`SrEc5ZvYWS9T!KG2*X~p=0XxM5z${H+RRaj%aZJ2(c&(7=_Gmu8Qk6t9nB1hX{ zB?Vb*G5qf$uL{L)gZ5WnSjNM;{DebpClJ4>??vHuwN>T1BYftiZOU742nPzLS-FTY zH^F21g+4x5@6_aTRp{KEyy&`QtW>JsmlrQnP88m;AO6bKz{qNx5^o<}o2^u>7wvg~ zv|t3@q`Vchki`OABZUqHZF;!IOv)CiL12cqRsGlUYoZwj(GOFdZQwZEFiNKOed;he z1-IViVoX;*~bd*A$9ZHCnr$CxkUi zzOl}1?I^4WHAkgQ72y;SjtRdh_z7^lvPm8}@>cHMAnZyB&&$2SQ5?|BGoy2mp)BL` zK&BOA#^`kWNi~-CW?*iFUTHk#P$X7_tHKQOe#5d#mesJ#l0h(NsZt3T(NtoTta1FN zWL?S!%pI0qYuVGbYgvw=wh47wbv*$6$Vd(xK2U=-b7@=r=oSLZMeGI;!$j4HLCK14 zS@1(UADp2ckR?O62>gI)@P2iL1iI~e)F?NCpiwrcZCIsrFX0ejN`+hH9skDxn& z3dK+H1@g-$IeH7Re*}BrfvTz+rdq9H#uc@CAiHPaJrnO`@&A$1RE{f~0*P26P4T6f zr%I@y4YijDI3Z8vUOjTKaDSi;waag0oLGHUR~J}!=;)~bf z?X!k)*6`}VR0N|g^s9aV>pbtcN)S5ZE~eVrCWHSrsd@KFt*o8YOrxgT&Cbn9;F$)c zb;JCeX3##NWF4fJ)~7bC6Z@1%*}J5C8|3^Qpw%jU9)}SIia1%C2l}IJ) zP}fDG>8@X=AnECm>G5(vT%Fh6a%`- zMyXzzj2f0#DTh98$(43(hs0v7?JO7#PB}cnJUQgMEC(>R;r|^39#ah#Alg!nPkLv{?eEKI@ga2 z01ZV#Rtqt=xu%`(PjUQ)1oz7%Nh=+L70$mXVHsZjt~~jb0yx91MW6;H_wy7O4*}+T zff=fs7w40H@zVHm2K(@X-2fooFoXw@`p_OyO3IXSvvNWCWahP(!ZfeIh?VUqUE+}G z0;LhgDq1dix)-i&v~+`8JGmAiR4qh-Y06&M%N%j#J`4`;c~Wq)-9Q&s(B3W(J&Vd% zZ-$GDVbe6)_qPr6ER66!Wnmy&O3Sd zRWMQ6s!UW!nzZYUl^S}&)haP&uf?pjZK4JQlUEa!5N}E)Y6YDh@dojy)PIm}LPSY7 zvA7>~A&G?rH_x6!uibMT#Iz!?cz?kCx)1&**VDhiNQ-0Me> zQHi2xEcdz1F#bk^H5@{9okYy`!BA&$AQ2(vua0Wl0k#iXSf&Q|g#<~$F=>NfY_51N(uDeVH?lQ_)CF-9% z6u1j;sneEem-TiGS~Gm5tA|`wcN&3~G|Jk~`xUDe&cQDb7WKoY)}jhbm{diCXI5Hc zs=ELy7pNlDlQs)%W0vYr<{>BeQCABZ3H-g&N5@2LzOZJ63dggQbu*!EH-Sd^R^`2z z!FogOcxpeb8b^6Xr3Gs2qmU6*TSE*nY^o@ZVxxzgz{l3QxbndBQ))*5#KLI70mV7D zYAgzX5Iu&=-!vPsRtD-Wy6c+i9)c-Mg(?_vTQA#Yi&tU64Gx{`V|6KmF8>zjl4cE= z7e5@RmhTuf!>;~wzcSXG?UpH>uEym9aYfhE&sU}pK^A^D7uJ5u0yZKm7uQZ53Y+=K6^X|0Qb&rV`)&&lHEAqF7Q+kHOk+M!8pc5cv0) z@_yxG%1;3og|h>!bkLx{17Q+GJX}W4<{5qs-ym3FstQPTAdM5qf+G5B9LLZQi^Zzm z7ay4TX!uS)%~9V?Z6oirYGXA^bExJ{&P-yigr-?Dank}%lwUxrp9@DfcNv<9~85|eoVQn zZ10QvIX{J^0(9P;chZv^YpP_}>uA5NaqsmxeRUrV_BCWKM<%;;{dW0K#%aOx($KXg zKR>@``-Qn-`AphIMSra6LcG!dVnShSoMROvJMZjtA^U^g1Iv!@fZ~Vx!^Fx2TtqWf zbkh|QrRYDlwERF19|QFe9@~Vc@v1r#!PO<1k|?urrI@$JmDlgXdo0U`gCKi@bVoaH zjr1LRQc$q&n7h?!7soM)`~Nx9Db(*4(<#(1TT7yDzQVa51xWv@%r7zU*Nb-kp(_xU zwzaw0>4-n{%@%)-Nft1C9(1fQy}P;DZi~N1cu;2E2OQ`D4`D23U*s*oChZoXP=-H? zjK;w$k?UieW;l2~*UdP7J+87k8(d>eqj-PQ2&*1wBF<#|Ik(LB)$QW3>>>l*r>g#} z$L(iT+pcocnm6lL(Wr_yG}ZYPG5kIPleAY2O*@|W)v}BEx6UyBr>7W%_wy29SV56_ z3E2(JrUz5qSugarF3&;pUhd~VxKhl~JBB_-;*O+M@1kRf?I|I3PCx;Xe@HAEhQ8j9?2IK4NCXsA_YBOG^{&;PC1U` z;~3Aq6~H>L32V?fo>f+8iY-((`rWmDr1w|j#ONgbIB9i~9_WB;2I#!2Yev-R_G3_6 zy1h7`LU-+({a!RA!m@?!N17CfEmunctChV-t5j{Zp~64As+J?K%xXcY%HS?-l0d-3 zZ|%`LFTjE&=`MDXq_ds>kX-L2zQNJpf3fUZz;R3~jeo?JO}w6T7G=58rw93m{qQ8L z9$r^KXhU6Q7(0Idy|RapNd083zpD2m1W8I@jnV5QE%fU$K*NsKj8z0<>h?R`76{Rz z8(6x%u+Ogf)h2y?ms->|i1?I(h{qGl?dP%+k=Tu;r zWLl_;vaf0Sh5Xm_dT$y_u)X*j=42*-R1TwG;(-z49Iy34#_klD>&d{~Og#$A=dEQN z4yUOJe=r`Fab%_5hJNgppE!cIAdeC|m0PM#TfXyz3bC@CXE&;!bi)lrmjNSQn+ z^DN9bgM`HX*^J7?G;zbV><6D7r0dhUkE9=C+J&4qv%B+#BZG6!0PRD3>F7*b0&14f zx-iU@3l3XS)g|T>_;Gv}e)M<>A>@XLQ`-+O23~$0PMif=C z=+#!a8Ou1_PXI)S7hsKs!X)S*BRHc4u{J(CrbU&z-^{*Z+q4|{nuFrdXO#-{kbsQgKA^WOaJc*fo zgFX*!O?}Sf_~4nNu$y!fo-&0mCBma7dn{nKc8akH-Djs@vB}=elRy1a%yqJ^nz$kl z=X6Uo^mn6u`xNu_2?kHvEO?BWAHf}}byx_fMLdN-=EA*&=X?=SGQ6vHSJyfNvwg34 zQPh9>#V=m?h-)6Q1S~QMeqJEYFEGn;O!KG!!mo)dvH%Y{-;`7K3e3}pMl*2mva7;P zX-~*75)zn&mz2{y<7yFwWFP0~k#0mHvK;D*j(jV5u#i}BeLxW1L6RM-J#h8Gk7O9k zgqVlS&*~a*`4HtGQZMYN&gjEAsj__2F&9mkX4FMWzbV{d3jHNQ`+9%5e?%f&qzUpk zB5^U-^2GyFce1j>Hfz)CXV#~u*QW)_(xkv#TCZ&~r_Ao0Ixvl2!V_QO2uW3rmZS(9 zAD3N+l@drvj`UtEKgqPbBPc31=!81pD{*n)b(iGp;{NKvM6J)St^I5tC0<`X$(*U9OLLw!@0`yu<-qzaC5z5IGawokB@f7P#Fgq2QwxbNjr$FYv@ZV zNaOaJaSFvT2!(+i6+T~Jf^-Qr%qLZY%rV-p%#8agwI=?dMi{Br8Uh~H8zFaa>hh7 zlytp?^@x<3(&ngzG0*LOia-|uT4h!GMzYUZtf0kV_VO5I4sC21#3X_K8<+q6zrJ22 zE@5t-2QMFBHam2j1@yi2tCt`A=hvyga68c8=3$yej4<24 z9LH!SK1Grt(04ymX#aoa-UUpO>nanB8xc2dyq_5v`KrpQ%*xE_uIj3;%F4>BZuL`= zC9Cvy>uIYk{F3|-blc#EJmXjQfMG1g!$5nN1!OaT-2=0D#4i4J5U_*ShGCdCu*+H> zFnlY2JG+C~8D@6%?f3DJwCCI#5gD14Rn<}(7O6Vk8TXuX&%JT(z32RgJ5P}%#n4{) zKdDULHESrcS8s(eN|HTOu8rvEs7x-Kh|J?rN3F^-X=;XYLAI6CtFETl;e5qXp1{ge zpD})S#I`HTO2#kjq8>B7!=#}iTnwwZX+hdwo0#4 z*nyY`n4;tB*D2#EWF9EqNjeV_Y(^!WkY%5@#J!}cj5WoAMHOeWeephGT^to(7ZXQf zyPsfR`A;Jr&x@??&?DXi2MmrgyKp4qH5|X}CFSIL$)76j-`S7+sq+5v{a`kf8d zK|$)AST68_G_i}lJC)=}V()@m|8FX*X>H?{>+X~GL|z7i;riOjS(Qe7Dh%fbP#L3r ztG3W)O5#T%DgtBk)M@SK?Dh6h2eWcud)kYagWAlP*z@igLn-mR_WMcyr=9F4)z-YN7-!u1n@&5e zM6{`tULp78{d%tb$ek+XzuKSNsRBN|C$Xv!YB-&U&3%uPamX zy5jMT=>EZM9jN>J^L0=Q*qbXQ=gEQo1&^%5#LE9A?sS)nF!#r9DAJJbfZ|z09Gy+SBI#qMK@$}hi<8T_$Z7T$C^Y1~rq zX!`~HfawPXHn{ihqsSKYV}A{rx5{G=HZTU;<+(;M1vj6EBM6|G zPH_#p*UGIK+nSxXKBlT4vleFcur=?|j~O%dAgIq6ACq4WYFaQi7ii9L*FEmixIJgN z^T9ETnU&d!$*g0Uy_c4&r>oggF*n*lWU$;DKRb9?Oxztmh`wjVbH9+)!vm+^gzbpH)w?Qd2l1_FNoy4vZ|Z9$~0&Wubcm`BCs{Q z?Zecd@OMV#W?tGSG@(zJ#U3hZamG>+aI_C0ffWuQm`tuaT=9$Ko6$J=y$X)0Mioew z_a;y`AIG6oUPT4HMB30p?jY(|uPFH3{onu^Yb=+pndZFRm&|9+j3jtcB=4P&eMC?x_Pk7V7 zwRi0C8v=TEjNakF^d>`&xSGzJGEL0zpFD`zP8_2HPZ^V%E7`HC98lYj!}GGG#wq?V z&ia?(w}Rxn|Cr@SWczgvZ{5G4lh%H1cS1&M2g`_~jU-vHDXu*oARXWIRm%hwazTqs zOZ5+^NLEwSDoXT5y@>sJsIzsQn1+@Gb=YoIv)Ue0g~r3PkC9~Qd@=p;FAZ%!b_b84Pb zOM8RRoBQ=J%m~s9-G0e=>HpqZJJb?oIsVeGQ)&qkjxKi|h1;Vtk3flAJi2bIOX_j& z<6bI;-6V|Eh9$e`aa|v^z|gB<*>aTye~i4)^BL2GYApQ3B(1JzVU4R=P;Imht@M1V znK|k6?(BSTNyzliIU5r?{@@MjxUhVue5E#SM8iwU=)+a~h$%N<70dFp51gVGzso`< zHzbi8Vf*!Smw%(@iH(s&0xc9%f5ao7C>W7_TJyCJQDW)?OFyq$1KlK)XqxtM&9ek> zyyfNXU%YE!@3$p9M}kOU+Mo97zy8pN2D)|L(sz~NeEj2Z0H=9;at+$?ozlCdPmEzz z;+T?)INk6dmm&9h9*8;Pu_Ny0-)7lDy@>oDPqJF#dA+l=fyJ96FPbfCeBPjIEU4EF zEht9h{}uYG<^hCOthCsgf4xWyg6Uim+``xiZod17>pN4{wU zUbL-Ss+SnLr5lEh|KK3;R7+1R&lAAcg}tiE$BxOWnqJ%1)C&ULM%ch`Y*O_s1|z9w zF>2_n$d9It$@Bx#hom2n{^8%0T*cz{o)X6Ff|Hma?YRHCMI7?%1{Ws<-QU_e&qJvA zW~?}U%~sA z3~hWJJB}6My3gS%QWnuRBH&A!z2#z zUKl5E{t}gs5OPGO+5X!qG{chPc}~glBHL_5QOmTW(KTQ*yGrNYI11VRxxz8BoMEjk zOH|S&muH4PENx0BrCX$XrAIjeLw~)r1l>ei95BA^O#&B-hhhN_j{op^ghEVzHFjsv zNBHn|PuzPPLu78D<}B_#+^Az9&A;vVzO!Aagh5c%9A;~ZTf z%k`Qc)Mx7dY7DVC>{8l=CT7!a*KBnAv_mcUzf-Sw>Sjj*>tiGXi(~D!q(x~3#-g`K zcYqWgmo5k_$&I#PzMs3Z$NeGWe6Gr@_yp^Z_)WO4NZjKf^XnxAWn;E8u?6n05Iq$LM=pdY|+`>0{ClNuQIxh+fgi zYcd$QT@4GzF_*_UG&#RiTu($~JfSYdtHTtEe!5;IDNcP-xI5&)7y_J=`+gNa759MP zS|Wz!Zn1-}{!OE)-NQ~0^bOa5zX9ug-3vt~Y>s-YIZoh8j`SRJmb9q5o$G#<21 zWvKLf>%$W9Ta~h?k2^%{X+eSrnC#TbsYVtfY);~R1fNYS}ROcVXatG>9q<}*nb@q zYOD$sriZ-3%3fY$8f-tCRhoKkYUKCxyro!q%{X~=1`~BQx>Fw2o>|A*o14pPFU~4& z&T&qTs_*JZF$x$?BYRh1_?rN>AL6yf#Cwyy-#h-!U&J3z zd81Us@JC$U9`8$e2Rb~U5BxrOXLXBe!l-ndnYTt8jg4q^f}Q#J=<(x6<0WZ~ zrwl8N^%&3laS&5qTV2Jsuk6Fuzgb%1MSb_atQBamK$n+LuI;#goqFMG!AqW2iMaQ-HSNMB_>nSzeG;_$Mn#!>kggVKQ|>{vj2>JCt0w$*B^z z4xQ9^T~xRSJjj9L6GJiFeArCGq;WCs0HLVNY&fK9Hi`so?`IuE&{5W1Qgv>+n3MPJ z{p;-@nZ;;8Gh8EX4~p^|m)R$#(mE-!Y2@u8vpq^ZNS}XZDjmUhSZ2zrfA#8Lku|ag z)^>-tw-s_y#*ndIJIAMjk;X|Gb0?A+(nfG$Ht5!ZczDOo%v~C5h=ITxXLjxw#zF0N zW`uTJ>8Gc65>i)WF!5E=eS7+&H)@f&y6Wm$r7~JeJi^!3XQXvptr`@OQj(z<4R(8A zH@QGaMj{)LIAnv-x9Ri+D>B&evKt;feWoXNwbMDJ%}QaR{4*DHcXic_w3}*YP9F{3 zw%C)r-j+Ir*8y%t#rUB_|@@sn8oVX2R3 zsN+aC6C|(#c{wd$krw&Cg_F}8=YFFyM>$qT`Lr}GK zo<#w}kxI#sPno38VDHwy?Kaa;sX=bLt*`5S-Go8CWf&%&R`l;PbX8UOt#(N_HHF{9 z9uI!^uum2J7V#iM%axSEaQ%b)=`Z-YLLU|PRt=lq0(Oi%*AV6-XaPsZq%+d((mf*I zGB8js8rMj8uSjuraX2kO5eS3}qQ_F!19);laEejCraOt|2BOQRw>Kt)siBxA?}pU!Fcq& zIHoC#OoaDh+?$dV2slRgi(VgB1F+BS^69Xojo=P3J_>4(4_=C+(QJXJJ@^d)jJSru zJ>I9sQ|rLNkJ%ov35-WGrm6)7&8c;5ZM3Nv~1hLji)=T z@wv%dJNGNUY8zAo*(r+Zo3>@Zkb&y5LVeRYd-}9xl}$ekecS|Y?AGoWMZL|bg6&6l?vu#vnW&L{ z!8%}%HUew)>-%JFo17b%CZhqzm}w8v`TcBydR#^yMZyYnPKpQ#SskNontaAfI3dt& zrhjM(6rP`u&%)oXe2^+cV!=S|B(=f2s}nl(Pi2jiWO-Xrh+~^}sB4qS0_(D}DXXTc zl$lnxmzQ;0Wm9CdS8)f(=(FA~0;>Cn>1u5^HJ>_2PK6wXy@Ik6P87x6(5v%JM46OLsw;5-o-(6U0> z^DPYP=5x@=5TQN>#c5D+obXB5uW6dOgZaPYPpXQgzw(N1De60zV=zP4St+Pg0_c?e ziXJ*a@LSdD&m)}GA2D?CV`p49@%>JxsdY3%Gqn!o_*a1($ ztFOHJ3ipK<*eq443Hovb#%kNrDd|?8=k`&KIrsNKgA?w?!MHawAAGQlVNXNUkRCrR z!KMed`5DvT@D$-Udiawb<4z(8|9x*0U!w3406f*>_Yqnfp`R@Cb zQlOX4^XcpcWQilvQ!2N-e8(a zQkKmR^7nnlG~s=+xx#6?6Ub22n+v513M@|Mor(f?U-{2$Mw!tqnQf@05XuaWP)9L< ziob|jM=I^vbvq!l!_(Vgl>0Pr?Al1g6N!oaxScgrIPQ<|&EP0CHu2lKLbM;$9zz@J zv2%tN%5ta~=eoFj%g&!OF}F)d&2!AONK?~IZp?*xMbYFcJ1PDyQ>B zNKaqd;vVqvYov&S?=wt}-0lr89Y`A3gHOBeH(z|gbxE*4f$%EK=6t@B%WV$mY);Cp zzo&${XAKG;!45UfrV=@7={vf4@uIdYGi8Y#$-N5FZkmsj+G%IK30+GYnhfH2T!Pn+%IfAN zUAW+R7cRQ)#j8(ZQKrtzWzU~yRT&A`>O|pVQIvhxQD!q3Sy8On{`5M$v`cP4!;{VC z*GMoaIe2iV)7=@3H4%eCgAsQCJ!w-~gAuo|cj7h{1{^cdeWE4ai+O5$zNj@z1jvRk zz$exs&r`L#dZw$=3l}b&S%s4jjvLUNe2%N3FX;AL&m(38ZeCDnr$g07)D34;+U-(x z=2uckiQl#1(XGI`Yz2Ii;z-tb4)#bYLqFM&mZ1$C<1-%#OTlTFaD8Ay7#g$_*7r!C zwV+=UBr^`!EtpI>OM{|tur>U{U`|nhu#RtEw)?f(nRfd^yM3ls>nh5+ZXpA3>j};x z^7dhLqJIfDWFeR%f%VSrS8e~DwKunw_G~QzGJN~1-FI5S=Yi23VDZ<`MgJw-U>&^r zD(5Ev=^ufXd<*pT4{=_46U?k9tR3SYIyvD&3H}L;k6p}hgr0$bB_513=LCv+S=B=1 z&QX-GHrtMT`{@X14LRS>DvBf63^nzVN>|TJGU)^|Rlghoms^DY9+*4MUjW>nAr3Me zeOaZ~pjJBw#I{! zHdkcyQQTyCm{J)*r(IHJ*}-rvO#-W-n;Y7RCuMZ^EB6s|0`?3;EfGRwxFWJ)!0Ry| z%W$*%JMrR-!H8j~glciagK;bUq~2cez3zg0Or{EibH^5v za=19BTRIFKm1M!wiTvwwed*|8S*b6rEyjP$5MWtG$3Gd@ni0FcqB?VjVz_Fk-b`Y^ zyG{KkJl~vc`F0a?hfsvPugNNWt5wUsLp3cwTD0BLLM2*`qlD^KMJ2?HBUL%>S1q+P zJ6E-7Y4$yg$%KL4D9kjNqN-+TH1-jBmR6_aSz-f$qn=MDr0D7?#QF&9Y|2`tRkJ0n& z-U#>SIcd}A+n$PaKOT#?JegJZ0D%=Jv>)9ivce3udwnt!IiZg2o3lvJvo}%Gb47g* zrIYkc&l~k`l|AGqXw7lxr2okMx~I!!M54fe{XX6MpzeA42R;4!v~Q;g!cN>m4P$sq zidlcl5H}};f22|LrZ7jB6_#fSOKw-w%Oe9@MWFUOZ7hyv&hWJi4ndou;SLn*Wr3{eV&r(%jv&JoC5K zuOC2qQLA@e_?XSG_RP(6=ii|&o9s9xkx>#Rfap6l=w1$4U56zQ+jCUDAyZY6= za{BBteGY0Jzs%K6z~@{#s9lW6nBE%p?boL=Uu*#%EV4gt)a=9m_4MnR88cq^bWMK~ zr3E@}s9zu1o_Vzlc7%QjtKqu)^=WScJ7nx-&+OB$bKJwjP%m@RBbdKB*~HMLxWr(1 zXgQ);@DpV z*)Ne^0kVn-DDD#?r)V1Jek!a*k<;{XR|}g?2nTZxT)G=K{}wOXbGz@}W5f0D9(y`; zuEAO8?Dh1uv69BxVP&!%7N#SLt?wbkn7N3XLen!aM(!eRCfZwf|Mr#^fRkm@TiKIJ zTG&NpdK3EtMU)GhY%IW_ud@-ShOg7`iNAHCD#|s4w}A~D>#)~wQ_L+Ue48g+!AGws zmqzIt*0M6SVqS)KT+C!MW>1Pd(g){W7^8PuW`(s8uY06WcxWUpDeq@qfd4VqZt?vE zvHijLZ?qH(wk8?e4`N;TK}48k3m5o3!ZVTd<2DZkYYzlK%SqB@Q*R*L%fyWrph+Wk zv$dks=4)!VtHMtCXXmUSNZ`&far)21O?cRcXSc^5B`n2$4)N0xA@|XafPoe#{PK=K za*2XC4nn?>GCvRG53yZ0rJJRPrFWuFVh-PzPfKgbXgImi9qvXZYiYyc6Upv(U=EhT z6I9(vfgb2go*aE6y^zMGkFM?%f~?cjDNpd-vv}iKZElpJcyBvQo~u#wACU&)o9^n z1Jg)~Ve2Zs{`vg;K{$;dSmS^N93r>3@R$T%=3ubw%Q^9_DOe7?+ISVjg6OVaxDU z=F!Vdxg=6z<>(pfvr1C#uVHK=&TwK{nZ9J97?fRUM26=<8&n z$fiLRqYBo620sWaTGGs_rIn}^7^)0bgRg@%pecl?u4XARQ&nBZjCE9TjbJG>Tue?z zRHjpvLCKm6Hx8 zN4wqA%|-<;!K-wJ(ot01wmehKzL}`^pOU1$82MmG{y=1*JH<~CBLTKef(y{%w2LDm zP%Y4#K`+m>kOM7yBt{h}dpz7<}Mo%`z?$=Hm zgn_haj47VgIG~D7Tc=O8LDZ@m#MGcMCAujar)#*}VMFV7@Ph_Fludo|cc)wF?^Mhb zo&ORONZHT;s}4r`SMTVw6_u+O&t`6`@Fv;lbPS^4{JD*(%IyGgh})ezs<=$zR8{_S zBmsYprS0`=piY)YKgTr8`1AZb&FkP##_J$WZ!<_SmiMTVyk@YWPgD@XsWoLp0V-D1 z^a`7(xasvbQH|58ljlL;waUi^Q)<^n;ngYz0rQ52)2cf3HQ2S2qzwYo{9vr&QJ_Yk z@_h0}MJT|88i=hZK@Fzp1QZ}MUI6BfSN(9Bij2y@PQyWkQJj&&lx$w{b+-lY(tLB8 z`j`|+FdWCgWcAb>S0?DfRHbeDyzG`+=UQc#b}QGeqIRoVp(G@FR8&#(b{ADp#L+iU zmp;q0&gCXtK`DFF)o_q0AmS2bUBhq>RZFHSR}AV@p428b(jP1%POgY=xtb|cuR2A6 z+O-;L4jr%0YHvbK;J3R~qh4=K{i&$^R=3l6R>XKdn`=U&;!Uf3Z`p&PktvVYfmdnl zu3&t_?mFH31zELye5G7oDW@?J(q9vY`=lovRkJ-9rm@R?kEGG#ZPv?X7DssCe5m*T z+_AQL+uHi3UTP)tv98+0ehQc@V^XXR44FC{s_v?DD+!!8kf*C}e|yziT>M2eRlX8q z`{=?KxXaN}q#`|x#{wfgET$taK5RNYdx>Y9o=Ner zz334iqMGzln(5@Y$cZz(YKpTLMaVwr0kUI{6amrCf(6Whbf7?>4751jNyCoQ%@z{I z6X!gJnbH*`6)?!;!>o1u-uCjS1ay32gW+DS>kqtuL`0{S1>K6_hNYHi zVKzY1GtF8=lFFxcx3w?2rbm1Y-?a>#F z^OH;Y2Ku6$pX=_6&Q9xF)qOi7Df3CJ@p)F9x~ec!VYN=pz!cw18_4ASgnWdMwj#?HW%&_80umRFRdHYb;kg7%MOoH$YS_&2 zON~a!4+wF}miibxqmmC33cph2M~NZ_q=YAwJPJ1gSr+$4x+-$02hzNBn8!n8L3(T~ znW*qC9c2#2dET+?p;twW+Nzj{UF9jN_Ak=`=do<@CMcVleA zb*#(at13L~8P$xf$S37l*_9E8P~RL!!UxUweS zttv7z4dt}_-o=v*x4(1mi5b{_V({UCuU3wpIB~S1VmlLnpsF^n!0U7h8+KPdPQ%?f zS-x2@Oc;DB_sQC~7`!Qa-$Tu24Ex82cACA5Zj46RTx_0IN- z;>XI2O6O!b#EupOb(bRY%81>YxQw{N=DiBNYk6nEJMqxrz@|Y!?VwV!_=m>TB(@iv5;K$tfiUTf5}xM#-^k%XJ;yaZ0*o zp9y@=F&Q)bx*sx|nar^4nq8`tTupc2Nsz0po~MMa(m>S~?xQ5foxpX-x^#rwonqNh zEI}ry27Cr%xQQy@;>1OIj*H%Gh`l>bX{0ONz;|KAvjKMh;2xa5Q6IcXk$u@zXV2k` zgGvuQ)>0KkPFl04E6i3|{q|O;P8H26E~CDn5_vA7uWCCk=7}wp`&TaFl4JhM zh-kbsi$?DqTPtlIyrMaE5p$0|GS%aN;~iN%7h;0zvBQCg4;%Ie93-K~6OM>~e_H=9 z_1gD;|A*sy;~#k_xj5Z#t+=PRoQx|UPHX8EY5F5 z@&&4YM?S4~c?BP??CeD4DcArCRdg@`uWCUH3Q*6&R&ps$|lLOvZN?*y^qNoi7 z=fzn&JXs}c?+_&@R1qcIuTTbMgL*$B%eOj29o|Xh_V0+|sIH3gmY@Yad77HBIJc^0PQh+TbaFy&p~T!!wL991B=QqWFYz3?r=&OY{G&~<6h!^IBukPj zD*q%Av7dY2KSeh1la#6t-W_l+7&P*RpCu-7)X-j_bioc)XZ-Xgq7eokiC9r$_-e56 z)6b}cDyApPo~fY6ifX#D48y6fz>l3!wTUU)qj%Y|N#NAEH1%EC=^=Q71#eT})s|a4 z!G81ASGn&?hi7eh14w389s$v?1R8pZ^yt(DlZZ*;8CR&?KtRkKntRb353rs&p3pi^lki6fi@Mz;GA=vU_9TOb87 zeCK$;PP$-=K408Q6mSJyFLlYoK=Og5Q}xd*{RP`Ui_S>C{eH`Mi|*U!E&YDz=)X(W zi2s6ak#DP1xBNJ;ui3u-7Q=eK9gt^rOM@qrLjKH*4vZSj{7o`qa9}r`k~AofXN2Vs zH*7y8?71Xf-g); zOPdv>vWfvW@3-|-5^sVr2}+{sixPCW=cnAu%4lt&#^Z?&?eq3soEA&^CLhf`fZWkb zRK0J!yaGeoeQF_xhVZp)PVu#z_-2j1c28reTeumySpJjr3T#F`1KGP*^Z0}OZ3lT( zj>>p$x=-b`QGwBP$Ks+7S7XwLYx09!FhHKmi!N9--gN$iFV~@c{e>quo$k(6c>i>F zt`Suu|D`{J|2=^%G#0&h0UyK7x5W-OBcI4W6ZJiu#FCy6$=T6wx$}M4 zb{zNDfVa04@OlzFfQnAxdVt!r!eb0>U}M{?iqQ3>KNxK%MSn#QZj0Swnth9N+*N`1 z(WdO*;iDAPZoat_)qe+lE3S!Neh1yb{3KXS`THWarh^3%TI?H$%>4~!Wo>B|WN=92 z2NKyRF;yad0D%Sk&cR0=kqB59G1vHHT%0+59vADJPjj!H`9Xs&9BcJX&skN*6iZR- zxM6IjiwHGpL{*N&&L`NGsjiji;!U?~%^iNjoimJ~Z$b?xMj5NolBUylpXSqAn<~v> zl3slo@jJklEw0rR{FU;l(6|iNvRH@ZOQ{S#(+W-u3z|C3Jfqb=wzXJdvuiMzZ8ZC{v;C9(X0!iQe0mcn;?ygALe8Q!_$kwrn#vh3 zZ*Q;7(D?B1`1+h`(fMZo#K!FG#)*D2YqzhY*uhf7`opBZ#(M2!__2pK78W*YwceSt zWclZBxn*PHlb;+Li)`=q+hnb{l=?04*vxjTH^3?H!A6=12*Y#NlX!)UygJ_(FzWca z%Z$bOnYz=oOFEs^9nI*@)vI=+=<4}S3&!lgCo}D^-n7@4VKa)AW!PS$X&%+ssQ-+l zm-v{bgVuLH>G#?UG0sJJ6;4ja9C{R8rLc|7kQ3p}VdZpkYNxhY|6a{xl+NG0Py(|z zY=&nCgXf<6+&%aF0HF+TwcL=zy2^ChBY{ndYxoLB-jF);@jQ)($q51nr25KV677}0 zymSfo|Diqivv=I_vp>+z`da>dZi!V6kem2IZXymMShz`7fa`6}g1P>JS2LYJq1qi9 zRRYI5awxJpiRQKrw_Gi3MkH*WwXH^tTA&1t&?p~XZjjPqrLtHeL9^ZDb9nNrf6d1Q zh!Xv{7@yCe3Ek`RAlV^?+=8vaT8MGD*@gy(ek=*rBTi+39C5;R1&8N6-9(G~oN1uh zV6LYr&p=IObX~s^G<+f}PTaP_?qP>#(uD4Tkb4OUT^WWqie7c_p$6vb~;bf(Id zez%Tk=2&@U-tra_QeIeID3f?Tl*<{(1A-f z?OpV)um)G4>&9Q?bkK0WmMyo`RE#bF|qQro{&+!=IE*`9VS+6uS?owr#5qXxanW z0f|-hBZ{VcMC|?nVoX1+hx*gmLH@1gezk}pfs#)R1ub093t|+yTWI+(7u{Deh3@{x+GVe$6YNN3lNB(@mQzr#_SuT=J*5dVz+{hgf+JUqa(M5ZiSWZqC0Aj zkNBqBD!CO$_bXm)W~SyY3qb9NiTIhMHycKf)ckzD~1;|7eW^r6}y8$qjH1JZ0H#k zT62>?*-3P(G~c#l%;+bF<{h?X%0$sL*=o<1EIpwWr|bu@Q-P0Vqv|EJ?3BvUTufP6 zb4}CL%8bTyQMu%lY2sBI^aCZ^Yt7h(qrhtvbIya7ZiOZs6U8y?nU-gl;3Y}5nmFZj z?IWEN=t)b`5G=fVGPHvX;SIDV%~9KSW!&*hDDVWrFR>Mpd3z6rqj>1-n8WN{K^I6wcgon{8U&sRc03*)S)xf%HcnUQ%k!evgsNxw{ zt)SCcO_%#d3xCCA72iYO(Y1nzq=ck=4V#7(}t`i;ts3#2o~(5nSSY+3Ti6Vm938G4l(aJg~!o7a!mY z6*wD@$Pib=T&X~vP{+t6Kx~bJP(1$}ZZr+a7V#0FBS-j{s3+Ye-6wt5#Og$U?~@*m z?^CFlL=!Sc)TSQ#lBaIuZH6dVqmd35$wje5a7Zjr92RHF8I_XIFI$FU2i6WEq^h!E zmHkjt4NxXazkqf!Y_9F29dL9WlnX|eW=M6gt~Em?%%n6lVdM*%wbgkMZR9+bRmo-0 zev&cNBruRk-UR5KM9Z2$gVTNf3N-P(wVhLRA&SIY6{n*E7JEO< zG5i|k+wY~&jT@U!UxzfWT*8gT2|Q3@7vVQy$bplMv9a`M&HM@J1E@X4u&AQKB*l~A zXq>T*P8y?=vEZJuNTOtvleS#y@spE$67x#-4Tk;LO5Kl-mc3sZ9sZW0)X-_MuCS{z zZZ$mrMTIGK^k1wgzX+d8K47WKJL!92^WxN(ogXXkT@x=s$C0{xc)UP#D}nRO?w7s+ zea0>6j7vJ^Nr&B88Y(ds=;r}Bywm8mpp)iENMe>&*bg64c zurt-j?uIH+42x2z>uY5X`#=~`&nMU}lKK3CYiXM0hB`r?eub!90Y-60W$x2*vvjZY zSdMeZ{iH`;H^Z^@O;Ner7iXPq3el|88o{kwlhfcy9Q4>^kOc927Q33Zaa&;0G&fv$Jaz@gbWT zTj-QB?46N3j!Ab*Z^m`r*DMjVVq=2(J*G ztni$xP4SJxQ2{rE`$?JizCADx_{XdrzpPMMk-wpugsR^pcw`_N)is44`TSLAMdYGP z=|z@3=ON z$g78>BODiPd-rO5Cq+Cfpq{l;a^?ga2(a>#>~(tknq5&cnaLg8uVc z5&RGLwzjr9y0x=~2RmEi)R_r3ms8a7!lJ)`NuOLdsqh)0;?fCX z*NHX0ZaO0dR+4bw8Wj*<5(VVzZ!GoI+BGZR#;m( zSLfCPg)%Jt(u0>D$iuRQi{-5a+8$)qlb0X7Eag5F9nN2kuj6HCfLV#XVL9_7hSCfC zcTN34onD4gH4jQ9XT{9_%@pKtnfjEV!$_f2iwKfiRDaw`e=2+wa~f3W{jqk3=-r$E zm%E7(Yb-8dIaQeSCYMcr>+%Dao}8pC^&nLRg}2ks5TNfe2#T-=K@ekP&IpNyDYdbV zPs79TN^3OEt-%QQKKMet6H)i0)M~}aP3}s-hby_wT3#QH#Taj(qXAB-Ai6vs!0;;8 zI8Z<1{-pV0Qk?s0#=YX#>Y{F`ZlZZIWrnN~7TF^=` zj-pN7Q54#8{D@gwbb%T~mWcreI70Q{T_oExz8~2=H)(&Yz`Uq`gCn_L5cfn(E-YKCHW{ODzT+ zv~}jb)0PKE7WEYOUxWBm6@~ZMbm4vZb<~NWw=GR!bLhiB6osI7!5mXGtF0Ro>&&Z@ z`F2pOC?SjtFY^#`bd?#d^9XPp*lNY4=YL#2V-c{Me9t(c%4FVRveDCY6`kianW%bP zSdx~F24z4F)eaF^ZJL@vYhXQj)!B}(0BfAAS6_bhWj>dLbITHqYSDVY2TA14QV}4rK*Z@ z*9Nk}p(=EGx1t|djWtXsau z!c_Ifs&=9tj~rZ&V^Ac6gDUSAQc6(>2h~|e#G$BT_2d9ecjY#3T59hGE9dzURUf>u zI{9`=^PwBAhS%ILjz$56NGRw?4yux06WBPqb{7U<-Mw)gHB(B3rKuZt4_d>=UOje1je0RCyHZ@22ahzakP)jv0gl`oYHLL3Q|ts@5nV@o)g218dP7f1U&W z?5fANd3gpTirh*S!UBgO$6teB?3t+^}?RPyjc|XF8`V zz06||W9feBUDEeRAC{iMIbGp`RPJ|iq%qt~;__xUIeLQdAj}pzB+L*Ih*|CfZ@Bme zPbTI5`VjviBqgR#P0GV{M8E=>;FN&YUgL;WgOjAcwqEXW*Tz|*^|7&Y7ZDgH!fyun z8gz7MqoghpRZ|JH;U%UiFf?I?LdZ>qRVtq@mrT>qR85BeRNM4jPltPQcP@_SFu+#P zJ=ZsF74O4i>qHJM*Ku4cB=UT@Jbw=}4aX$LA!ZQMG0b^FQD>>%~4EAJsk(J8rMM4(aWhu{5%U~=%$YK;nZk^@vCF|@f zxCsO3@v#ClwlNzl85>L%W3_p@LyxAgx38e3IWt7#Kk)zl6?1oqe0 z!r68+2%7EL@CmAJ<0SjGN?+nLdSG~F^LhO9r(26MyvA0m=--IV>kYyfI>Cc8`Fnyi zj63s%u5p~mWl0)L&ak#eG1Z%KzeBJ&D1|-LjLdj&da|yzM?w5hI&KwaaN@fUX9>45mrp3z5aSBiT8-0eYgj2 z&hxU?c%GJ3j$HYG^wu=CXBz+9!KsUR-+3x*ZIJ) zp><~4N*8G3pJE{DL%3#R^A#K)p5XlB=B1HJ2%&~g;zajn$xzc>Y(x2DO7hg1CXZ`KzijW#tc8>D9n&s$$PWgs(<;@BTlJlGj zH5JI~*BD*d{WgA_`$pAZtTrpHNGJ2WucOggfm392!reHTSX{VBL>tG=B5&W#w6)(p ziiFIgBQK>xus8FT-pm^Q<7wT(CgjzdRc;!GAib3Pl8lcodwZ@~j@{WAAt7{lSPhRH z>P)>VX2i9dvK=Ql-DR-@oSs=}3C4c6PEeHWuT=3Ez-aNLJ0iiBGtdpH%+4z3Mxhy_ z&10j-({b&BG6I2tN??w-ydfCb$N@l$Jj`&^gIjj^lymaa zG^3jqk9IMTQZAGt-h=*wbYgIQC*7iVSVqaTYx^q16nZwUo1XEew+BJl(GJnF``Uga zspB*`QcYUqX!zspd`~)7$=G5_q0~F35<|%yyJW?|S4Nca4uVTdDadM#_da_lQ?7dg zklM?Ei1*Yus$Pv6jYxpZHH2G%>{Jmk_A1^zhtHkMmF+edoc8Jn&!}L8djoaP_A5T# z5VWd=bz#J{-X61r&_Lc5V>RxNRy?Vfu9fP1!(;q-+!a{VTd3??&|NEvfuz9Z1?1v# zR41e!eSQRa`w+B&7JJy>>Nh~=6; z6uYfY$hypYk1^+@!wY`B@Fe&nHu;=q+x5cq><=fi*! z;eZ01JmQbJe%6$Y!JA`;CSvU%~jp|6l0)0@C+|zq|C!Vx`Vr7kw(9(@=8y{@&}N zFu5Ke;$2XqIbv<*aC_d118SPk^Xb-3z1OgHB)e+p&Z-?KCNMfvv4GLwepR!v)2cQR zPgGXNph%m|F(^_M0X<>3&ihvER9~}{LQSo3lO!oWwLDh z95XarsBv?*l72n0k2JWf{an^(q`RS)ydeF3>4#pw)N{|}F_&cS2ajQRm>PqRtH7Wd zv--vmeTpx7EtP=cJf|oQe&t+Qe~_w``FYMVjuli2Mxz*cs#+Po7Y+*1mHXm{uemir zJ%|A<;vVI1YpZmAWgb5C@m!fM2^Z(J5ls=zel&{X zP{k{Nt89xy?`9#iQK1Po5N)f_2)iWBmB7ZBc_#hl7C0)zdz)Y%;kbFDzn<{CmR;5# z$BP-BBs{f?2vCx7PHkhz(c$45>teDO49Y_1Hw?LKi??795j?TMr|jCFn6oU|WRC9M z^V@Nw5##25J@(?N%rwi17dPX?bzP?t*Jt9E6PcBu(Oo>;ndzyjK~&wT1+~D9eBG@u zu(&>6l1sX#e@MItH@|9`wThzZiBp=3h-D}BdutWjvVtW#=NhX=msT2OgK2tX1yHJK z5Zzal5e~vKd?_D98?m=G#w}^>%`S$Y?dF%yQ9^G6+Y+CY+#Gg4r1|Dd)M&|u?)&w@ z?Txvh6a{mQgmTIowTzJny(|6tSF}4&sr%rF53}#C3q!Ey|Y;X>Nm$q#_-#@ug_f_!A|asQxN^&+}vo)as`0{Ih$VF19 z=S;u)I6>K-(6#gn%8wfb@+K+YgM=9?kgP&kA{KBc9p@2vw@Et~^LX7FhCa+3UalRZ zPcv)B$H{=_zZQGAlfd=;R4j_FL{W4hiY|!_-|ekgt6{hW&qv*GCk#V8ieMjR{@K8j zGKL`51fFo@7mH-nY>$2KIwhWC)VRWhFqH|mvfd6*ex>m5YkSwu%LOe;4}LFz|5~`2 z&yPO6cO^E)G$=dF`b1H;H@}9O+^5aFrZ%y6&F!uHqc~_p9qPk(wjbjsHqPgolNgDI zZ|l_#4a>7hDe$UG{iSMksRjn#>O5IaDvge*`=6-c#r{%_bnx{{t@;Yut->W11JJP^b&g1>E(%Ny6j`O2;!;Z)59m2w2O5X>YtD}O7-zbAe z#7M)pUg`|EIks4EiI=sb(bG7oeVYDaT7$5;2F2)Rd9G|8ElP~$dVw(rh}?Bzn$%MC z97U+eMpw*Vh*1WJAgyXa$GLzn>RlE)Fz|bg#^)l~)$27A{(F$mGhHq|b%`%X@I{0R z@EmEtKMj6I;KZoZD<)isMk^Pixnz)x$+K(qIbwV2PXg7#vQUG50#u!pQ_UO64JA2C z`a>Z;{=mODiX)h#mUTKog`ZDI+=>a*S}TrQrY0}q=W9{cj`E;|=VQDfZeJ|V#ld3m z7|3|MHlNo`_*$6;-0zHnL8UBq=LlKl_QtyqjU_2_zk1en|}b$*w8NNH%XkZ*i%;NDWxAphcuJubbZaK#dbIg;}g0bYD88~ zXr4Ap=}Fb3LAdVJO18W>&lcU8vaYVJYwV-4t_*Qnb5nT+b3$S{~tnT{E;R13!Dnr5o1Nerqm%`Q7N%l6=2V-BHk zn>7{FUFjAO@msR2`|Y>2eO;E-?C2GEg#soPPL>;*W5K(aZxDrQiZUBp2Gf~mg;hjb zbwb-#5Gm316k8>#;ZVyr;07=d5!l(3$P~tmjHy-(qh+`zW11Wl;}ASYRxJdC3G_;6 zdKwH#?a)I%RX=nM%Tg3wpC#~iU02{ea(aNx+)VqZBRpFoqDGvQZiQC!kn}iOwh?#9 znIXgcLyTwz7zdQ}1ZKg24VDOgb^B3&ls+_xd${7>j@uZ=$YzNcclEP_Jmw+E22Sr| z+6kt2`0{8+XD2lF$PuT)SDvVswze|(_xBzKg%5pIJ#2{eh+h!XAD!mc* zX<3<79sNmb8#|V5>q*^FXO;iHd8J-jz0$nBR0oX|`0#y)bUMW8KbAsQq`Pe$gCMM0 z8X9HgZ6$_pMGvgaH-PQ`i1aq;z0&tee;>Wmcn>3T2WIxkP(*2fgb?_?HvpL>gRThs z;Bg!yx%SWwT~BZ~;Cz>)bJp3xNP1aM{8o*f;{vRgzErB~O!e&@U+L_CopVm{ zpCt4qSvjZ3H)#scNQe6WbPb%1rIp?86niqj!W~9!o~SjoKpHKi1HuZW&4*d z`Sx8k?QK*6-I`VC+o+JW*6$F~0kNJJ627vpV5JOOphgaZZ0B=qI`n*aH}?wTJx=wVq%qwCvUd|TJ{uL?=%B5F|= zXO@V*d0M4g&}(d^@cm;lTH?s2_ezgS?*QHV1dloAJ@!lXrMKzVJ4Tx^AQ*3u#MGwLC{tic0s{VbRRhmIZso8YOejS7+6DRv?nn{af$h*(O^|0xvs zPx&>)A`v{ZqsftFE>>*6-0&L>Cd;e=2W8)`ESgp%YnQ@uyB$X|WAb^T!t3Er{oyhA zjES8j?W&I_q>IvJuu%T#b=LtXJm}m zk1<|hTc$pxhDjbbx}3)B51_v)W(dnC!^S%AcF{qtocboAFD#mf_^;dBL@0HH>ID1o z0X=S4+F(yR#CfFbU-HV^=$Qojt<)_Idm0@$jGIiIE0^afYnCG`+4c-iRrUY2a{he9 z?RIzYS6gN85;`|+m%S?%yR4hU(l0aXR}ALs1~bEwZZa*5XG^6dpcLm-^;cizc`uGi zK8%Ow!74byQISvLyv0eGr-yZAG>H*a3=Yb!+$$$NWCV=gDO=Rz%F=Li$zJH%+xOfS z%yk}*wvHcmN);9^A73`DI@z?W+g15-gFVR9@7C!3I(xSwZ&~IJp{Dg*W4&$Lty*x~ zJ==D7!8?AgQgRL---?>Ym%}C{bt{yW+bwg6Y7a8~7&Gou*@k6p$!gg$(IOP{wLWiq zE7EbElO(H}fWRX1gb zVHlUITUT+cebv$8G1Ka}EIO{cH`ZZ=E~;98Ir05Z$4lKV*l37zO6KI)eb9~NAD?}A*48vz z?EbSXi=0-n{A-x0`L`_?BT*HqNBAC1l-J3N!PLm9=QDcl_i-$Uf`(_alIGH)|4oBf zptTlh_^X?%FQp~@T3Yh_mzYk7&S0mfSa$py(3B2mD+f`Wntd!Qdz7G?!*K9~AVMXR z5+d|(bTP+y%(N88u2)QFevRYTnm#Fe-|Ll$&k>W(ascPYcDV7;FinFPrtwh~hT|~& zH0cRZ(ZomZ-QV;|CHJ?`dzZV7@FkbCpNGzY@(tKCibj>ss}#CKkr$7nfk2FLw6 z4PUuOaON-r@=6BTLS;H7l?b4RQ^H}2=XewjUkT_W&QfvTuOU=Fn0JVlvDq%__|w43 z4tQ-_pNVxBL|aIMg)**FAu1Q(I2C#TZB6t|9nLIrn}OIsZB{P4@MW^GaZ= z^594z1eK2QE#^sej^URgdjfAP-{4#}2E}Ka-cKo}vIWCsxr<}wCJfHcbI15ILN!mS#_Fn}o;1}Hm={_uly&_2N^676hX|h2Bw{n%#4DQzQ}LKW}DCri6t2jnkD`D^^>IcWB6)(|0}OdmO|vL6!J$<%p#rkEo1ixd?8=C>t*vs$G2$mCjb}X5 zbG$l?Bo&-}c^>pdR$7$S;i~D)#MDfDBKrZYdFH?LYBcZ_0h#GLN;ET@m`cTSl|!1W z)Ii@<#2Kh5vUW&uy^3Ncvon$6&MVbssLahNVY8|n=4-DLJiYfjz*Vm#X7M~D4lyXXdi``&9<=;y zsg8NGF>2!i25@M)SuZ`u=f+%pWn)EmBf-oMi`~2UXrhaQ0m`)S}rcI4p!|zO!kn#KF@_j%yh;jW1Czlh~tgA6}^$M`*A!vDLxiiU-Rv&+^gI6 zbKhr-{n<=sqj4oT;kdfHHP|I9@(>tIFz68;8s_FxX*kPgUNa5et=~|r?H5(r3gW;7 zo3BE{Qb3;s^GCg^(racwGqt`trtRMrB4`xU+zd@(hL++QIw%ZCg?^lmP&6M-Qe}T^ z(l0o*0hYlce3SIkpbH%4^c3c%A8k46oCu4}wlKK7?k9&l!nD=h6wp7LsRtOQQ|P$@ zOiawG;?xO@NE!bX&y|O-9r6_#4o(jL6T;Ma(~5#HGR-IqBFmhohD_)20$j!maCu%; zMwh}V)Rw&w0am_@}wvMb>vIFm?VD_Y2hv+RuAx_~EY#o{LC-uS$;Mzw*%QG;; zy>6R+X~yl8DkYJ5zKbDh|qci?*>8!}@GPK>~(g{ih4SZ?gMoO;3ci|3$S zlqTYz`sr*gpT1op9C`i(&gh;b;=3w*(qE(uQO1a(`u2-je!MD-_CMw)&V|v9^th1s z$A(_^#6;=C{;WKcuQ{KSW`!;fFI^W&7je@)=gi{cj-aVWu`yHNOzI8MK1B_3DpOC^pE2t&Pi*dGqS8e|Aa z$l7tg2mfv#oZdYAUFE||-J?H07storm@IGpkDHs1U-^ei-R>8 zsMtcq)x7S^ocEdU`_AwCeKl|YpsEdSN*uf9RoanZ=$bxL^Y_&ZelTn`_U}7jR6>I~ zv8{T%HmuQJCt7krtB&WOPJ(*HC9NFu_+OO2Q83E4;HgCZOLPgBwBp&ieY7gk6kq7h zHA1h}ZQebat$0{`P{k7_uqfH*PQ)Q_Uu0K>}dMgECd_hg}3w5jfWbIhwcr! zAy=)NKXlKsubH!}Gn3!H^UmMD_uhX_+_368Hn;EcW3nEat`~Peu*&l~2k8x!&^&$?J0rI2la=7 zgY&1!+|05_;_Bs5+`H+W?^#*h$X+PRH-z_fl>_*;u3UW)U}StZUl9|!EOohDFD5MN z)DypA8){@cb`P#3+iqiSzSHb=L~`%0RFXlY>&7p{$3QcJ(l?t~y0RSmAzkDuJgO*z zeu@}gNg>3MtmhOj9P`XzUd{uVuTyTiVV$UUC5Zi?-||~#C9KZYyZYOK_oOnU?3!S=G4H~|x27yy+ zcJujP`JZCk;<)OkzUqCcJtQ!ty)zk|870lb&5r<)+Biyw+xt@yD} z$?UXUu;bsycg!Grx8~{&GB7Kh_AW`lRlB zl2}nfLXQpe^`=9@k7QOktejHLDUT>m;L0kFu_Th#Mj0eFU$2m4WeKiBm1tPE$E@Sq zJ*~H`qV90d&-~BDde!oHH~|q7#75LD_>1f4bG>dzQ5!b$9PPyGISH;f-Au1cy!b`2 zjlGEZOQyVgljua7HF?_|&|Rhz(UZm+h2`9JlFD#8MY3w+xPPmmpu>`cD7R4gBy z#}W+vh{XOt9ztOvW-yQ`ZPm#=*+YbB$W-z#sbx* z%n?r1FT)u^wB(teKl@|~%>JAdl#04s5He68V&S4yViQ@v##wN?)b$2??A&mJLV3s2 z%p|3gWGeb$5mml)^>o;7k6NwE0%b^AVJIMjt;GT>_+kMqe0M=q@Oh^yczCPnUGO1K z;f60F_z*FOFQh=kKQHe2!{P<^6e*<9@diagCH=W6aFtn2+`F?^@f-kh-Mu3xhUQtF zl={mhL@qA%E?v71Y)XVt0p0gSzsy_)%l65)7n?jS<)Hh(bXe@4k1g-HRw zOJhXINJUY9B@z*RPLP#;=JQ6OImfGd=|1@keyh<~g;Lm-s*O$!iKEPjArN8CORdA5|s8QzHxls9JRXSf4VLP!%y|DjHi= zrqd^=U31-pZqMVZy#TtGtD?| z-)>p8+FTIK)ou&hQDT~N%bDzPRe23GhItWr5tlg-0V^Y|As!YNM9OPrS9SH5_Tk(< zLH~9`WBYzd)nAg3F{q*a7#ebtd9&}=?kc=flv3RHMu};D$HIT?Z+S6Jl>V>#@gR!> zKMn zMJdOoGSb)Ym%}IN|*(r z)g-=jhI_zBK`g{LeNok^roKmoKaJ|@#k5^{x;BVCZ~Jte4(V8~X%1iUV*I8)iJJ?( zrCEG;Od2Tq_~N^M!H*?kABW7Q7nfrU^waoZZ0h!9q`StA zQjVt-LVcf5-Y#%wA5uQ9d@i$h>*Wtszw`-{SrcBz;=(pUq+U@b@eJmCE%kmD%Eee7 zyQDbIu20LNrQh1BrlX^_K;%8Gs}uCg)&&X3H&wZp7fDymZkxa}|06{`rof0ncA7g8 zPY`Wth$ZIy9fodAz2qBmm#1G!{OKLuaBs9p*BHe7XTuDLec_~#9e%0`np|f=Uw!i# z&g@l9r7ai_@dBmLaVZriAT zQm_@DM|ZvZ(18?&u%^l-$juwkeQ#4!U&5+;Nnmwl|GH92M z9>tTwkvNOdf$8k&ue@8zNz_}tHy<_6PpAAxe>D60k4x^#lj-!s*>mUe@?C`2y|0b;whI7-;B4O3(+&PTBQxDs{uYAf^H$6o9;(=ubBij90t)W$&7U2n01K?s#pr z7zQs*=i~Ba4T?OgZ3#DUk>Z7&84ByLKX@NO8#VV4_1_7w3N_bYG16$k+$66~~S2ohSeh{}Oz ziXD~j)fgomqLbl4s(p%4lewnGf?B0g3z+8CHIvy~t+#`)ov2k_QGLDUQ29Iv zyxdm9U)1P9IyDF5ywTs;7Y8tyQ^}&=!*5@2wRZq{V8yiY`s;b%w7*cb5My+|$Y_Ya zhm^I`*#s1v&0K#+c^UZ%my}b=-O9T_`cXt+V~)^XjMbg$AGpFVVQ(urt7pFIzew_2 z3N2=P5cz?qew6&nS%;CcWj1Tnac5>+ht`@uk9@Z*!IFFtHwio-S+0SRHeEp{id^4Y6pnsUY()*#KV2^C%f#X@8V<&F!9oR>U$RKGTa9Y92zF$W zJ|yb7sMxQ{z0`V>^af~x?-}qkK?v+seBsrrSJVF5Cw*ZJ8|HBrJ&NOMjOzgjYWlcN z$y04C^2i@kgMmUc?@`P6#xZL14SIt{j(kZY-oJZPEa=}w$Smkh%%Jld+@{C=J-4VA zdPMuu5u)AjfxB?U-guN2dS8?H1()1-yD!rA8GTQh#mVJdbV->qL0%J%>DxB1#=bPe z`f+IIcG}aDX!UzpguyIt3%Ttz#h31qw`??R|9#rUqQ6@XFYj^<11M)Un(7-g)Ttk1J0J54$~8!~$&q2u)p_|iD$kg&wD;*F*6Exhfn!#{V} z4Mt6(u1qS6$Ni>u8zlw*Vzyp%P<(0R>RN7c-DbAV+8o+{3*EzKq4%fgtfD2ZlpMpQ zu)i+BHDOVI`={K*bB^Jx-z{O(kMTCPfl^@OJfFMvy;296FD02~_@N?uDefvPnm8-6^if+7}dj{(6S>@N2-&X#$@^7=afUyuVgd>{ZfELyomlT!(U5F)^WoTBhwuHw* zdMRuTLtUD6;03}Oh*cq8JS>a};t{L>c*O=0i!$QXYq>K8ex5}rdHf0$D}8clVtH-L zuyvDGRL@n_3R4X==ANPQL?xQm#5tjIRP6yo=;6sSiQvZuLfczpZAGG%63$Uu6Hq)QL)$aneasZwVMx{l1! zP0}}Vk~e*+?K6+#k7srwVUb$|(XhbrO7TZ@0?GNjAsv&YSg;|3ok`jQ5x`VZDM|G2 z(agAq9U{T#A;J#0!(m%=d|X_H1~oljLz$I>80BeR5*ZF>ny1;G2EThI6h_>s zdA4?~+q$xy)@3b(S)CNkls*Bn0k?9*=D^p{3%uz#_e z(e_Jfk5Deb<#>VDlpmyAB}a!|;U$p7!gq;}1Ru<}OJ20qLkCgmJ9tR7CyrAwEz5Ep z=L+azeVuKpI%q!nW_8AK&3dzLy3S0d1EguRBr0utDx|a?<_DpYOc9yDxA$xqU zbl=l_e}hiiQ>kY-qaT1gw}>o)I4La^K3HQ($hbY~NxCBZG0oBz&{;)YSkQizNxE{@ zox#ObIHtBb(`CkAQhiHgMBQYNkpnCvrpDXx7#GIjSWya2W6V!md>3}+2nLtnK!7Y< zZ{7@$Ee8X}W`FHEGuds@32prRo>|RsFqqHX^7yTC>f7F(+ws!p+iy_HZ|z!=T{E11 z=MBPB8|#`tv?5!PV7D3Vb-XkESCe`@snnu4tW<-bT5)~fb)8B@bS|@A&eI?{cIsH- zhDX;|;O0Yz4^=DP;K0DEI5TruXZz)yb)Zefo38V0)T%+DZ@(2-qIkfE{k_U*IpOp3g+&+vL?nFe{#cZGhWlgvv z%DjOjmGlL}%W%|>q$aZ3c6@Y+`2`mM*{+y1>!vhQY6@jJVU#dUww|uM>n{;?|6X&0-?@u^?xFo_b`; zM{S%lVx(R%IZa7M@sbOwAEoM0rJBnbqZ+%wG|HIEQ`d|0If(5EbkK^TcS_~@Va7C5 zB|2ACt`k#xPzr-*h1~__N7%Ndch-_z*DLf%$Ku7Fn#JhQ^Etf^^Xh_f7DnvDWsMo53FtGVhAs;S38FoPU0kmv z`OyeH2s}~N@f!L$3=xKNoFI*(i^_D0yv>UHoyLKB{lJj}^{T5<=t}7A;f|?^lwTG< zNex3K+~ohg7N{6bjMf=rp0Ca^f0O6Iktn{8VKQ(H>SQ zGYp-ZEIT+{o3Ah}BGg4<4##O7theVI`&Gj9TUqW>1mTSriEyEjak{0)<(drFJ;#sef@3*}Bwh1(8Hpo)5{*0i zZr)dm?&=L;pL}etqb)itoSV!w4)sIQTkl5(Lwa_N`iV)AU<9qG7<|vrRgGy})l55z z&7`9H8lfstqGaEhbNxG_VBeX2-SMAQS!Ge{-n`xm`-d96_1?oarMijJOyog7(vG z4}~8M+LEw0Bs|OWI2p%@v_5ii1l<6nqLVmb2x>(xOgnRuM`$_6zz&a&ztw0CZ|On< zv-YXEpxR%Rh3d}V>;}F#49-+xbjX68ajPEQ>pzs1t0GGI5Mp=#1UEm_lbD)N%38$c zWO+l4d)yL-_JJytTon5u*RaKn&Qr4B6|98cLzU)FaFg4|=V3mtDFc|zZ&8%N8nTNQ zm4Kw=Yy3?&ADZa9w{B+TzWG#(@!^|o(m#Nr#7SP@=6lb zplv-mBan3c5eQpUTy#alfrKk;$w;jZV%Qjeg3&HXqgKW^`1{!t98q{Ng|5*)}xYR>@6-ag!RY2JPx?#Cxs5NatEDhM5iK zgsVh@*|RdfmHabMIT1LBu@{MDe8IH(^K0|N@$txkYdS&-;a~08>J62#onC~ezsNomNmuLm};Jsf{zb??Xy8Olax~dW07VF;`)EJ$tM{UqrR2f!b zHiFmKf^iLzB1v{R7G=z0^6`}WeUitG%t=sl3ui_iHJXNMN!2C~(lpLFO0+%WMy4Ke zvvPMJ<$!uJi$eFKA~0Qe)iz!+Y|_{@ZsaRzEJm@l<>J9H7|n+|HOJysf;{C`nwzdrGifx1;u7ee2lYQ-gvMBu6a?@*x z_EFl`N88{%+G;P-pxP&L*{3acVMNo6z^2ItH|CmDV7^I*Vlus zy~e@&e)i+wn(;e-s&TPP{LX*q_}DFaXMt-d+V7}xd2-Oa*15P&Oe5y{!~4CS#mn*|mGq zFnArgUO~UF5%L8!toeY1+nRRLd?K_T?!$)Qtb^9Ndop_;mNmB|pYa zw`JIy7jS9)LMS@nV9#&TTQL@|6(9Ad8jE|zNBxJ6$i1VZ7J6&BUvIp*ULEx^iZQIc z-u3k85c~6M-2RdLF1%5P9*E$?|JgF05xu$af63xO2%mSJtoCQ<2~f&b{;BxyljO@^ z{xS*tcYUyWkz7nZ^IOSB^71Yyhm|$Krh85~j}}46&@IDNqN<84^W!7SvEJti$e?pW z(8!AmYkknwM|v_&^l^;fx(%vLuY8vl=KmLHh6I#E$E3lb`s}g5tVEzTGHjyI}0>byN z-aDo!0K?(0oUsNc{TCWrPy7@2n;>^Ko~#}_Gh14DAEoaZo>t2BnF#C5aiKMOBpGu( zK1sx8#O0+a*EnQ1j}tzFK0_lu6z2bN?PF9`+sw0JhZ`o3nb$AU-yGPrqc_xU4H|yn zc{B6B=lk`^uQ8pPrd9?0T=SVmvg1od4gB0pXMNU;J4?s7HV7XL`_6hzE8!+|nA;AC z2(>aR)6vI|;zDpTo#}Xkj`k?)_c2qai^RjlJMLPu!s)EfoH;)Cn|l;^OXg26)%*UN zI^o9M^W|drw0~k|kD?d;Gl!vUEy4Pu3`E&tz6{-RENB%_J;bnWG3Fe@;U!!jVqtJI zf=fAige+9O`k34s_>J(k+KH8#{XyH%Yt5$lh-=!Os#4oyZMl=jO#PJPba}Nl=S(8~ zLF3p`J27UCwI4B?&6;l5AJpGo)j%uqHPeD_E{?03X%g+Fg4ZYGD_at!P(r;+VeE7% zM%7xRe6$9e1e#%GhI!f&TOEy8PlEDC1#AC@%QXK_F&=l^eZ2QwOOu@a$lsp_2_V$% z#GE}8Tz2bz-8^&1tQd~=K zNY@VUGBoQ6DQV~ z5!|rG*xFe%xZ{0y-0{?2{dAYyp2i2> zcgLB%`)X02p1|sF*Tb(-kHcI{`JKJ$Zz0oez4(E>D~^@&AnI+KN8QSfXv){BH^TFv z@+8mU*Y>QmhP)RSJi=0L_pY(De=D!TzqY`e@12(i_Dc2|vxl&kq+Fg6e5G%}Re>>D z{g7~6(35qMycYgO!uF4pS{nq7fbwcQLi6F0_;sJ4gaj>Y8v+&wq6^WDr4lYXk`=`X0@VKbVm;msKuG3 zK4UdJms-`p=_gGCrklP)2t%st%3{mwkY&FdpQfe1pB({t8HWT4M3Wso053 zs@nT+1m(sznC2L*S!>=30C%&QD1=o6BvM>5I|KaEsTAU-`SC7KYSaa#$cx7$O1#D3u zA7{j3+wyp2gPz0(5+VBv`@6u&;qAy`MUM{es!* z;lqqRc!va*y+m<2+K#0HSb8O>#8Xbn^Fm#l7iL`ej9=0* zypC>GDzD~8o73LO1?@xshNHS|iesd0!>tx=we4Z-%4IXS<_zstvvntY2?I?eKW6k~GzM}x7??n+0YnE2^8f&NoMT{Q zU|`f?U;vT-fBt{W=*hsyfC4xe0cMf}iU0t3ob6d#5`!QNwD;-#?^a*b+OZWR z&06b`ibZ8(!gKQKhOrO#KVP3O&9{Nbe^diukHpnb>tPzKpnC4Bd6kS0?qk}W1xLG2 zH(ak5T$|yahZP@<`UNll{OpY}+|8U-OI&WrUJbm5ru;|WPrACSaX-;;Le>%GH>}%I zdLri5mdhyDKHxmldAmbAnjFP)z3CC1v+Exv`-bK$g^DTFuhyV>xc?wx%jPut8cCki zZ>2dSZT|X%;F+oyN((QyiZvf~?~%NxP~NA*&)x&WZ`01{v{P{yk3O{;hx4TWk%Zcs zkaL%l;88+rsg^9~`3OmDr8wnie?>oJy$3Y+eadz3=;sYV&1;i*oITfjxK`uy2Jm^` zwbm9wC-fx=p@>RHDJ3CPLWqtOLQ<4Uq4R<0Ae|85addIU{}>p@?2kBB?y{c$HzeXXl#i49c-ZB(MV!!)siD05<;9kFc4B>oQw4V? zRf#wmr<28=qK=BVRK)XCb)4q>v=I@Nsxh1^TPwS(ygTBImTZ2+nS9Q4Rt488YN_Jx ztS)R*#M!u?EnijVRf{63$x&^6M0NSAThD34_|?Fz2A>*YYr?9f-dbX7iK&fqoieO5 z+Za)oU)@y^=UUHIXT2tjR_Eb!9**_-)?XOW0G|eOoKJ^_@-!6Nh(?X%yMVqI;MG_? zjp=Zq^}?AEP4H@>-X?r6;&YLHUhM2*`7UV{(Udk#>3%7_FT?S2+BK8EnS9Odo71BO zo-Oq13V0|*%SjPein~%RSHZj5-8HbTb$*@a*7#iS{08;3;ok;UTl%%5YkT|l_;fHs z9o5rOuWy8V6W>lSJ1vdq?EYr^n`w6o?QX@pi+Z}y;x==78@{)9W$y1#Ygc^lEXzE1 zQ(HHj@1oCL_;h#P-M$B%ddPJ*pL@*rJv8j8cfFk7i+gW;dh1JXHT6~ZeK_=k+aJgN zp8Jcv-~2ov_CYlaC>Jr%tPPT9FwF+bF~svw{D#hp7zSe)?!(0l-xD!Hu93tW>G@$= zkLn-s$oPmy&Hrf6W9T;4-8eNpW=j_)WxNqL@k6N%Bvk?_~KW<2!|BQ(#Xu zZ&USjntV@`V03(v-cREGl>JkDrmNu@xn|hUQ2$J4GsVopeKu|9(r%uZ7h%6B$9xzI ztgra3EyUwBTwiC4s7R#(t;1x_o)t-|jEI;_@*)y~$?rI3be>AY6VI&<|QjE}^8 z4EGc3C%A0T!%y9RruNVA-KdUD`m)Jy>T7j=L&tAme@ox*^l}T|ZGKlf61lWOGxpI*^VPoXVcaPkOWmr+< zDy)j!Nh2b6vY3-$pVFUMEAlzDI1_(brO2I*Mb!H`&LULcP;63NGp;(HwDe*GKMovGbh2pr#k~{6$*6M7R0Q7SQ8m@vq>v(Ee5ST1^J; zb@Q@_mW$xLL8mu8FE)pZ`7WWs5;@*d^V??o9XXc5U#hNm@qE|ad-yGrXF2WP*Y_22 ztyKR?F{{-10l(Fr*T61RQ=#6krN=th>&(iBG+eJ|AMyJbmiJq3gW5JY|BQV>)34HCGxNV`yR&{Q*ZZkXE+-(=P9sUme+F^Ez^sGqS56*uu-#hvKDDRJI-X-TQ z{C~pbCwD*d`9;3n>i89x-(l~e>mTa<1LmLV|BK&VbF`Pw-{$2Xn(m|JKK1^0`rw&wI{WlZBB_%dwtp5!)U4Y#!Si`C`RbTeczcho+G~+~?}yt(bjr`y)C= z{z$$@ZHs)#Mv*TyKJulPN4|{x(QuBf5P9E``QzXmUn%nC>PP;BE|D*f!-+#8e^U3z zpFBJAr|gRSsra1+>vS9{6-NGy5|KZ%Y~-tmKTG`C@T-ciCUO5=b@U+49aznR9j$a@Q{Tb*}-cUxw|A!Is5XxPhI`+=_h}Ge)sFw z{Wv|Kz6a$TP&4ua;SR)m5YB@KM1F{#48>(AtYP{;Opf8sM&LaX#zW#CmSdFtBkmtj z!=wC1%QIR(M$0=!4P)p&)+~>MKMwXdd>@1JnCJ1d^Ipt9PP++WCz_i{otb`3)~hM7 zrmAVG+|$hZG&!FT`vgs%ROeH)dx}OrUGmd$dfM63=HVF_Gt@K#znQd~NvCJUJu7~e zJhSxlIdeYS%+3)zhdy(wFq%H^-nU+U9^NnD^`cpQ5zb3$dP)3zeOMr70Z!hH`Bz{p z)R$M~eig6RfBL{!TMhRits5iKR>|TDQ>6d zAN@9V!QJKgC;mUv|Ci!SuXfXRw>kP%Uw?!1n_7RzbB`MK(D@H_{He!#&E4N>*oVV@ zTI?6|ubBV%9B36uREQ+kD3W~rNRmmBr1K-moEKDMn<6=6UL?gvL~`iDNc=sY9NsaK z;&mfAqD&-5mSejkIf`FN`;v*d;V;x+jv$@wptgW@>B3w>kXg8zO13E0Qam z`LiTxDc6;&BDt!6Bv*^Qnr^M|xu!}a*RtzoN75Sp^-CjZQ#O*e@O+CV?RrMizAaOK z2b?>&@2IYh{BMMPQ?p1q4T+>PU2Yx~$*p|5sK@tba(f!d9klF9kFNCYirby~dZ*ZK zICqoJcWBaG9X)928#K9x9zB~x(o6ik^z2Q~-ul|dSs$GHs_8yj^uwpW`1{Sr1N!}d z{e$X$&^myY192Z{mIjF*WNrr2b%>lp^lhk_7>468@x$mj9QJUWhSPflZAQp9Qe7kU z?qRd@h`JxebM!%ze~cVs`HU0)n7YQhA8!U8cQ!$N6KFKi-6UF1hBw986najh^ApaW zl;8Ja@{}5<^LbkQGk88D-;Cvv%*6XyezWL2OOL!Kli4t4>)#yxo=f++`uV&%=ixL@ zeJ{9wfj%$Md_Fzr(`A7fTmb839A1{|75i6kUub=mwy&Cz*VyZNyolc$I4!2p68zqR z{kC4bgVVd#_wZjP_I>?bA!e1lAL#9Bc~|4IhW2Y{P-q6$ieIOmb zKa=}&F`w(1cU!ViZC}9uLS0|_Eqw|5E9+NsZKBI2_g};Mn(p7w;#)j6i`|UZcjjP= zx!HpERvK*6tLF*Ejet^5v9R6fJeo?D;S+X1EZ#4V;py9Cx z<{mx#ga4oS|ApUPeg0eiedc_hy7tMrU);ZP{43@^zuf~gIWQ*Ds1j)|Wz*UINb}nw zO**p8k@|*Av*nQ%@H=Ekq{VthdZ_iVC6OM!KGNduj^J}-t4NP3!{$d?qHCljn?+ix z7=ux|T%={>D6=Wjqo+lB%z#LbJ!tOA?vC_0cgMjvzG?V$jr4@VNKafEX@#;3rwV*d z>df{=da|6SG-A6Vtyq_>iu6=Ir@=j4OeJ@f<*htB(lf?KdiJPDtHP{0FVgDxRfkan zZVh-f_}8q+CPi8c|JtpYy6W()Tbzln%l};U)^m2A+P(AA2Gtn8=a*pi4aGIw6KSJ` zkzT;JG29DrYJ%fM;x678=_PP4g?X9Wm(#Kty_@lAj#G17o6FNe{a5g5iGNFY{!UM? za&~p4NL#6^6|JwSz{Fi^y;h#kGKhm4KM0$&Sx4^iSe;4;%)Ny-#reAl!?F#cwICtuEH@&&5 zPo&-P>>;j)`MG;$r1z+?rFW1h#0onW0Hexm#nVNbH3qUI@Lrox|!!xQR$ z61VBrr}g+5n$IwEGvPc-hgs^GMWg4`Hyh?0dFQ~Ki}&+p;{|%Wq#yI$FQCuMX7yz_ zufSPo&KA=1Rl588IrZL47s2!HOW$z!28=iTcHX4PV(Sv|{)SH9VoT}p9-h7j)8*!A zIWF%vVS2ejz7=w>Q140_uY|Kw%qkkK!si1%Ys3`dTj+c(F6+d8*p|_7J^eny<0Ek& z)7szC>Bq1>aqqpEeyaY@;Cf%CU-0` zzsdERx&B>$_R!vYGX2B(pX&KbeSdlW3-(?;{9E3CTA@PUU|Z?9*|m1gDbo%KR!XjO>hR zY*J)rHjAtZu4k2Cdm^jKujc0T?Mi!u5%qD^CY z8oO`e{^I_TT`KmnrIGntJ-d8!WX-xq)|^lC^^vuh7TFbQYe|=u_E(OI?5ehrU5#I> z3Xxp{_ZmE}g>#+STC3}NemBfy__d)^8``x|LtATGXYItd!=r=P4r=YFcQ@j2qgrot z@7>_m@Ft0MDve0DQVxA40~zFT44YVAVTF79u0cbmDm9lzV{?=Ty8=v7x| zU1`!yTsO7drMB++-UI(0bh}&5d-(OV_HuWxx#V)OjC$`srmq-217o zKaKmV@qSpoO|u7R^dPPS`3_tX*&z6Xn*(f21C%{YFix8Koqi*<|Gt*`|i=a_qq2d%6^< ztq8_WcRTg#M_T@f^G`Vag7+`h-7t2;_>~sFs_{2k|3+8euGtL*k zQno7!4lT#lN5Nsmqu}rgY;zP8UlIjJ@H^7}$mvmVR8uxT3QAZ@%#4DPjo6+jDAgwl zN>^edqM(fPW1JrY^H}?`e9LbBKbl4FJpcfBoMT{QVBlb6jAzhg00AZ-<^nKYC6yuG9d~er564~VpN@OvZ^wP!`r~+jq31jHvGyJv2YB$_ zVx>%DbX1S>L{-g7X8R)2Ew$CIrEYRniD@`#IZIhd9T~Y1@liB~Y-UU$Pe>LIo^Rb!4Z zD{ak(_V)4@z}9t;0001ZoON9VbmK+>?eN%+A+%6tPTNhk%*@;?lWZ%A8{2X%JFsPD zW@f%JGcz+YGc(-K5_hSA32Q`e^+2CyYADV5_e;fb^5Ws){3K-xZ0g@mEIzSp^ zKo;acC+Gs*pa=AVDPSs?2Bw4A!5m;tFc+8`%md~H^MU!n0$@R~5Lg&20u}{}fyKcR zU`fyimI6zIWxx#34+g+Yuq;>(EDu%yD}t54%3u|+Dp(Dy4%Pr`g0;ZfU>&e7SP!fZ zHUJxfjljlW6R;`R3~Uaz09%5sz}8?J@E@=(*bZzDb^tqqoxsju7qBbX4eSmakOu`& z1TGi^Ltq$`z#d=(ltBelfd^_}Pf!OwXn-ad1!G_wOn_NnFR(Y*2kZ;>1N(ymz=7Z( za4DtBG&lwv3yuTFgA>4s;3RM|I0c*vP6MZdGr*bPEO0hB2b>Ge z1LuPaz=hxVN0a5K0C+zM_3w}U&t zo!~BTH@FAf3+@B=g9pHa;34oZcmzBO9s`eqC%}{7DeyFS20RO%1J8pOz>DA|@G^J> zyb4|euY)(ho8T?*Hh2fT3*H0ogAc%m;3M!c_yl|kJ_DbFFTj`JEATb=27C*?1K)!m zz>nZ3@H6-Y{0e>pzk@%(pWrX>H~0tq3ul7>LWm%S1X9Q#hY6U3DcAwiFaxtN2RmUG z?1nwC7fyjw;WRiM&JO2*bHcgc+;AQ^FPsm~4;O$7!iC_%a1ppDTnsJ_mw-#cKDZQI z8ZHB8zVt&eYgSK5N-rF zhMT}m;bw4ixCPu2ZUwi7+ra<8ZQ*usd$5kA@ERm z7(5&v0gr@7!K2|Z@K|^pJRY6^PlPAIli?}wRCpRZ9i9QtglECC;W_YJcpf|-UH~tI z7r~3+CGb*s8N3``0k4Et!T-Xm;WhADcpbbR-T-feH^H0XE$~)&8@wIf0q=x&!Mou- z@LqTyydORQAA}FVhv6geQTP~q96kY`gipbz;WO}A_#Av5z5ri@FTt1LEAUnL8hjnT z0pEmg!MEW%@Ll*Gd>?)QKZGB_kKrfqQ}`MD9DV`6gkQn0;WzMG_#ONn{s4c3Kf#~j zFYs6R8~h#q0sn-5!N1`@@Lx0=0th06Fd~Q|hB!)~Bub$UltvkpMLE=ox==UjLA_`S znu?~O>1cK|2bvSjh2}={pn1`JXnwQ+S`aOS7DkJpMbTntakKNq zItm?)jzPzwq4Bf1IQjBY`FNK%J%itNf9}nP}cv-w0 zULLQ2SHvsfmGLTgRlFKr9j}4c#B1TT@j7^2ydGX3Z-6(%8{v)dCU{f48QvUkfw#n4 z;jQsD_&<1CydB;i?|^s2JK>%2E_heG8{Qo|IFAdsh+RC0hwv~i;XUvOF5?QWVh`8w zp16*E+`vsdipTIcp1`y4UU+Z358fB=hxf+^-~;hN_+WepJ`^8@564H~Bk@uAXnYJl z79WR?$0y(u@k#h(d*x4n7y3htJ0s;0y6Z_+oqsz7$`EFUMEl zEAdtMzxZl=4Zap%hp)#s;2ZHx_-1?yz7^kwZ^w7wJMmrkZhQ~E7vG2P#}D8K@k97w z{0M#&KZYO2Pv9r?7r%$! z#~yq`z`eXyLA=!v*Og15#lFi8GWDBw-*@|pUwjuu^ z+mh|b_GAaLBiV`UOm-o=lHJJe#36Z7AVuPmK{7;!Nr~)1Mo5`dNR@b`M)o9i;*$nx zl2I~7#>oVkMfM_llYPj(WIwV$Ie;8U4k8DWL&%}zFmgCKf*eVXB1e;B$g$)&ay&VK zoJdY0CzDgispK?rIyr-!NzNi?lXJ+q&@d4ar0ULr4(SIDd6HS#)ngS<)JB5#v-$h+h{@;>>1d`Lbb zACphWr{pv8Ir)NoNxmXqlW)kk!cQkM?WAv#P;bPqa0%d|qP)T1@JC#_STHfWQM z(lI(tC+IA?7u}ogL-(co(f#QG^gwzLJ(wOs52c6E!|4(9NO}}KnjS-srN`0Z=?U~i zdJ;XEo(evpA^g?6`<+vy$jPI?!;o8Ck3rT5YM=>zmZ`Vf7XK0+U*kI~2J z6ZA>?6n&aLL!YJ3(dX$4^hNp-eVM*OU!||n*XbMdP5Ksno4!NerSH-A=?C;f`Vsw@ zenLN`pV80h7xYW|75$oiL%*fp(eLRG^hf#={h9tkf2F_C-{~LpPx=@AoBl)pWwSBB zAVUl@!YE^mvjj`B6zgDVmSI_zW1Xyvb+aDU%ciiYY#N)+W@mG-IoVunZZ;2_m(9oK zXA7_e*+Oh#wg_94EyfmSORyzbA6tqo&6Z&^SU($JGug6iIkr4ofvw0^Vk@&%*s5$b zwmMsbt;yD6YqNFOx@>PG3JCB{uE?^h3i`d2N5_T!Oj9t#IU{|uM*nip8>>740yN+GY zZeTaEo7m0l7IrJUjor@fV0W^+*xl?Nb}ze+-OnCi53+~Y!|W0ED0_@O&YoaTvZvV7 z>>2hfdyYNNUSKb>m)Ohf74|B7jlIs^U~jUw*xT$K_AYymz0W>iAF_|w$LtgKDf^6l z&c0w@vai_J>>Kti`;L9jeqcYcpV-gr7xpXrjs4F4V1Kf|*x&3Q_AeLnKMpzKm=jJp z)huJ-sGcvjF0mPK8x?g_vZWX zeffTTe|`WzkRQYk=7;b@`C~AH|R6$M9qMar}6G0zZ+T#82j@@KgC|{B(W> zKa-!u&*tawbNPAve0~AHkYB_v=9lnG`DOfaeg(ghU&a5+ujbeAYx#BjdVT}Hk>A8` z=C|-$`EC4meh0sk-^K6d_wal9ef)m@0Dq7_#2@C5@JIP${BiySf094NpXSf-XZdsd zdHw=_k-x-W=CANq`D^@j{sw=Ozs29?@9=l|d;ER=0soMH#6RYr@K5j zzvkcYZ~1rpd;SCek^jVh=D+Y?`EUGp{s;e)|Hc32|L}hkvn4eyJ77Y#Z3is9T+DXBglyXmSbF)G?SKi{wjHqa3NhOO6S8ePVCfZOwgV<) z+jhXXQ)rY%OO1(Mr&O<%ovPdCR)R*Ocil#0c&o6^K@IQ53H((r0jpqew$<&$F6ogWl7UCZVcDG z=Fo88uq!IDa@ReHL66p&H9L0M7IAvWTT{MgGLshTR?K@QGfBt9*+bTrXuXpfwK}kZ zYjvQFGI2GcD$%1TS{`LvL>_P*g5T#`I~06f>$m(HQ((U zb?Xh$3>v>9gDHkG(CbAS#5@D0%9= zI&6hIzG&D={s?p$NoUNd7fnYZAn_RE#|8+486t$g!A=1~D0n#bm4?Qgx`WFzlL) zON2BnQPJ^-1N)jOAQj~>YCsYpRSs+ArXM+!EGfabE;b4x@!OGi%4N^1>b5H&k+12P z#0(RDY8S$bs_>#(bV@qOm?5G_R!4~Zkp-_NW&tQj!6;I zxfZafY-HkER1ghk{ag+I) zNOuii^Z+$IXpd;!l{gU!BGh`(t@k-9dJ5{ndBF7Oyu+|kwd&SWhRCc7tm)BuV9je< zZuEfG5Wg`|c7s60NIuZVO2x)7)ubmcMz%#!g!<%r>AuzPu*Gg^&@#U4Y0-3-8W*QT zv{a3pPHmT!>&`YkuBf3_Oi|8yVv-q6^tOu1YPLnS;;W_w5p9i-@wO|b1W6r9JSZAz z34GTHT6M#a0HQRE_nZ1IQB>%Y5yuh|@#Bi>D~1+gJ{a`URCDntiLNgr9`2x=iH4!r5LX2Kytq>#EiYV@ex}tZ>24t{QcL!x1G~9Ovoq9?5-ZV`QQ81Nn z7NXW&VV-XenVzO8+UsVitO~qSEM`Jtddq<7#w%o^i1vic9WRu{3|I`PM7a$_>Am!^ zJFb{!GNwttTO|>|^tfb&(qef?l$#bww(~6^tKK9R*TkGRE{vyRJYq78h)M6Gq*6Yo zLMrBOAr?)nfuZ%Fi4CZ*Ax5BcMIr>kw)F_;o@3XNQ+KG2a}FTofezWLvCA%f)K-4^QM`& z7WtoMShIA?nsLt zQp$#GJWPDUc>sF?&~If!wnglYc$g8HxYlLUiFjm`WCavuMz%$?JXQ1Ah(`I5Z4oU? zQI2F=MB7rBC)pO!dd)CbGI7oFC(4&>i)i^1=1eB8SbnrE zthLF>NXcoaS81f}skUG*eYNW;OG<0ptOW(lFncMdMdSgO1`Vr?Nk%-QU^t0Mgj6F_ zHU$c6Wg?_0g>)UF8e{n&@~2<@4yfOm!i@-^;FYRLg~W8FFoGo%ujTu0qY?CNhG8{0 zD#ZH3L`bE9_1=k)X2jf7W?dtQYCtv8i6oIVB8_;rf+`zBFEVk>qBK^gvJ#ww8Z7m8s*Q(l42;U{! zA|@lQy*2q6#yQuj#spm(Eg_0_XPX?e7)89ZO^(GRjC!tBO<97@qtI?5q*$Vau5*qG zOd_i|ci0Noq&#HoS+Ch)D@2i``t4V9Yy*RlqGsAM)lB4vJ1SaJwfPgQ$ zpjTpJcGRAfE$Hd6tu$+4PzA426QSt&L#wD}udSl;uB%mT)^d?#R-gl+=r!|YR|V0k zsp)%*rsumYVzbr}DPz^}b#wxRW@=#~Aj+d;z?!v`m8k)iYe{K?gUnE@r%*1{@?O}j znaU9tyCW{fcaCWcVwy#DLljcGA&QHZC400M7p<_ZfmlqloYb0PMw5$pFrbQrM2LGs zWRG`qt!j@Ygm0g15pAwpu!!3&Sc_^~i;^JMs@hQq6Cv9o+J32IX!A>{ot7|eDzv2} zBa$qH!=IlP%C?c@q0uZiZZylyMX=v~D<$-3 zTvp37!K8nBt5|nR)u1}Hn`B!=6JS)1QkGyWSAxxfWW1Y;Jhu%|2`G<3}}QOXib*nZV4W+fwTGSP2V?MxK3Q=?`rEGiwgLKM+~_-2@> zu$Cq)NxXwsbj=EjhN{`b5@R`X%*tIvw;-2=OddtNRyOnAY>SwTxbU^ytW^EJA*aR+ z7SBpWHT1H-@pT-TAwsN*Xf*1jnp?z@Bvl_IeXP@h=Z%zP%xV+7P-`leNPww@x?3!X z(Y0*-`up<1mSR`CJ}oXq6QJ%%405)n^DYu_q3+cZ;>Y(zEvY9%)Xxj14d{?y*lUOYVWKZzYUm^ngreNRt*1loHtSwz#Ky&7M@>cpr6$+bBU*3P zT(={n6RyaOX5BXnQvsI4CaQ6lnvs|eRE+)_ZZT&|%9$lFh08!G6VKgr3HXyEv$zfa=Psez~)WT@U)WT@UbhQm>vz83;I1ga9=#G{Oa-Uci;AF%D zBj1l337#pIoT0i?=`%a;j9;Q*H^aD;C3I;#R4-M6!y@UJlnt2~ zTSVNviyi{I6TunFR@L}0QZkWDM!Z|YveO(I4hBk@xMm_)b(^B+DBBSaP0mG%sp*yw`E2dc#I>%FMyC*B()5s7eTONQ zlbA$~P#$F#^s&8fLMd#1N&k$*jtnPlQ(6u)SzCniNf zMkD4-T+4>k?Bqn82QcN<9pA*5YD`_fAfmwC#;{wjy5dzwtq~p%SXKbP5#>uV;#2KB zvkzFd>(gw>?*6(bG050jc_`-AD>R%TuiEa`7{uaaFJ8Cn(``v~PWr^4&bdiUQkKXh zZWi6NXf?~FLMccy!zA!TeHMv35!CSsI|maXMFJ(opX`oAd63XF6?{;%r1H=U8g#0? zgK}qn(5tJXf%%4+TeqsyVuF<=-IEw}#x&JK+6o(V9a%KEdG_}V%J#3NdC9hjT^2XZ zN;)QWD<)Ut#9*jq3Upk{X3D0bxa!=acyMnB1Bw=pr&mq{X?n^iY2py zlnCjZ3W+MK4k)#}_0<1kIQt~JNrm1?jpm4{@l=^Ix!JV19HmnCBnI(_Myb}-uE(uL zso2%7$72?zYG<1qw-}~!XPX=kJQ{0twd*Zb#|x8Nm3lm!_B0&~TD#6RIUb7I#G51( zrN{jYm&iKXbuMAVnkQ2krAD2JyrSrxu-Ua;ru2My(c`ev3uVpDatI-10iL#$>NkYsBkty;K+u zH&1#eHHxQby;(K`^saV2o>YEWj3oU@l1dxQ71zY@+$oB2zM0KT`+uhK^a$hL*(S#= zj(MgN=xmeYksG&~>`;rR%&byvlC%|Shb?3c3F>+>;>IYf+sTOQ7CMSTScelK)vlvD zn~b=26V}m0NV6g8x7;YM6U45A9k!xfMs+S3abpzLv1G(`rx?^J9x$C^Rvk)Nf{uJx zXA&U|41x{tkQ#%aP9#EVf;V-52TT{)SeZ}9B>hHF8Ba!BN8KvZDNE4hqqPj@T2&q2 zXtOe;+8`{WiID0*%oe}KI>td6X1chjkHayP-}iMid)T! zbln+?4C?vFy)TB#78BVL+4F}Z5BxpL78xCi+%&`pBrDI8{t})(-$e1%4`7q|$ zK8%;G2nk~OH(s$KF;OYYQdyDJt|8CZMg#VAOiCH1F2WhC_oEH5W;*GZL^Ts0REJ!- zz))>qd0aO!ST^@eutcdrF-xqO{SJ*g^ut`dFhoAb-1-dj47ey8URj-;m&3!9A-bv5 zSha_NftuJF?2AMQ)-y73jT<^nH86hltGPHcgvb_OR77hU!wey60^2*-6un5TS*eMU zrWFe)_MVj|SA zL}<#dMR`L) zF0A=pvoWl!bZY~->mr-aLFoli8dbmjsUgoBGTjx`m=D#OYI7*3=R9h5r6xwnNXTd? zCQ-_S2Q)oYFBSV{m{a^bV4VsK2zkid1nIC99+1G^K%2b*+ulGz0i9|BWyMd;TGmc0 z9$piS?f&q9rDK~rJYaO#sfe`B4$GT{C6Sf76YI6O$el`F7uQxb8422jQhjURy;beD zg<#)3u60Nn+&^Q6;9+?yE!Y#uNlpUe)y#^uD4t|NUS4r8p?J3oQBbPhm<7{g|q6{T0w|7RnSil zyR~SUDPl4J9J66Swl*uVeFz&)}d@|z3oprvz64Dx*($53dp@F$kW(ZMF?b@6T z&=?Na6T{8AY~reJVtArf^%|vFZbDBuM7x`erXEB=s($@ssT$l(A_{h>U*kJ7BvGms zyrF8T;Za$=s|{YNir%}_n8*p>#Wt8Nfhk-b(w6MqWJ|yjcb2NPW~0yA)9$bp5x%IL za;H+DhP>cgXr%WLg{>+|tW(Z6D_tQA7rt_Fsafj{gxEF1T&o&-tjc6Z$h@MP4Tza% zg;v#2BD5;U5}~)jG$k}u$5I0_&J5z_=?gI7i?&;YEV{VT;DkO%7Z5eXVuqzgoN90{ zmTJt!s9JZh0;I)Xbl!~zjFv@Bbn6LG`gN(p5~a#cO;lp-nZ_B>Gs?S&qFt1Om$as4 zD3emm%&QERO%2s}PVo?Zai83pk_&|*3+1tFeLuTrGQ%k?qOqHa%N+rg?av&BsOedY zyY5NMX1BF5QI^&B8I<*|cB3GcjbSme>NCe*l13bB3}(uuK{0%&i?Lc=_>oaA{3uo;q*z{IPO35M%w>zN;v-!Ch;mv@%0vF< zoS=s0P>*@@4qHqqBDy*;G-L{UW$l5yF6$>0Y&iaiHf)NrBd-vI%^p@47Rt?`p`g8C zh9t|);C>fTkcbwjR7i>6YH$NjvRpNFt2#^iFC!SHv8nKYP7e81BL|1iod$& zd+N-)Q}Gia7baqquP(WJPSGv$fF~=WIWu1dQjk|Xk&jI=3k#3mWffA{u6wkIV+nI2 zZ3KxLn3N?5L%Bl}GYkdcQ_$TK1ykzRoLtaYO9PfP(5aWLs`4;;Uc9JV%vy>phslT= z%Qe$x$pMkAB&zP1ul75$RoSPA`rhY{l^TWNY*lU^Sc_*7&nOrzYK2s|kz40=x7bwY z=6JQKOEeOIR!2+4l9Q;8R?O8yi8}0U!;q-4njslErwq>Gjk;Z4O%3VA)Td~^*O87% zR5DShMe8Ic^Xb?pTzJ6JvD+^^U>!9_q(Yy*0V_y3yk5c#;pW+&P^l)5;0jcC)a)k_ z9t6Y^rR7g}6o&^aS93)A+Jiq!n4)ppSglPqzF0>{Eg`FMbWSwl-5T!M6m47JdnT?4 zD$8ZCmzfA@r$+Wo1Y1dJqRO*^wB}5R^y;k@`hwF+(F`pasc8Wt16V8MYK4+Mu4v{j znNaZM@jxEXWX%l@x)236x$SGP zRdlk}Dz=Pzr_EJZIa`rF#s%T+R9lD@OG{U?1zV84Vk|T@_RrW#vzE5$c*VldViP|Ip&WiGE^w%(AqIz)BV`FeYSo>RJo_dm+Cl8LO7vxdi;FV=f z(w_q|!nkRf45Jz(qd`CbMKjlju?rb&b} zTPqC>P4vmn*O>4_F5Fc6qLUzrkn);2%+?`6Fc4yfAoQNz^}C&f>?BZOH@>3QS=!TU1XySypYj z_9%Wn*_I-Y%#2dv4!NZi?vMw>`pQsDVumR-ER@|Lvkr5`H6Bn>lZ(zBaxze;msCfb zwn=}7TIe=I5oSoHR`=vtOS7tx2x+R;4DX3hjXUvIjFyj7VYJz;ldf3K}Y>M8MC z^3T_!JX-7UBxiTeu8hL}?^LsRmp625O43(v4{zl8@ZJToh>XB}xuM!d^F zdsieTr3_Q~rg4XUm`w{q7{L{8Dp0ZeAHC%j1Swav; zy~}5a?Vo%(w-`hqN}mo};f9P;4Mb7|dsak2;j>pW>qS^%k!b43ewQyllUsD1VqcI& z>6kP{Gf&P|``oZ==xmd<#c<&>C<}A6%YLxtFo_dsHmzMY)q4_yNi0wNKg$!HZCZ~~ zDz0433h(}BTf|M583iwurMw+*e^l z-t|suG)J2nc|K)wGacqcSpAX_rxH3kR_bU^e`G`RbO^&Dq?lU9jb1y_ct8cH1Qsgx zf#r}QfkaSMr*F(H<-IBXh#2bzi`HSE*x4pek1O_fY$r46ii^51*pd#xwff->Tj>dj zJyvTG(;-&_pn&x%(016mRhSxeCc zBjm&%nW(u$WTcoO>)f@MS!{)CQXVq)><>QJ3Q>fqV_tQ?(>(jbO>rJ5NxvduFecZ4 zxLwvtuEIzJF`ZRFP+)43-jo|Z8D z%405MMclqU_e_f#E+XRS#m+-}HJ_nZvrI1gY-?Vajx)#en| zrv>zPaBM+;Usx&9ETd4kn~+r0vNI;stVE)5k>6kQOS9Z$$Yq{tn3Fq972R&>qc<@@ zc$l>X(Kf{_$mTv~L6q&3#XICiuw%Z;zzpfuyTj@mOhMUBMw$qqDbK{^J#!K+WeGj9 zDU;t#a~onjY0fWaTf~&%x|C`x>Y6ByPQwifU#m>DA|4|RZzS39hUD_0+;k40cr%6i zrJ4+Jm1*d6^Xw-L&nx>vu2;oua9TruXru1x;bQdtg-Hx@ffiUwS;FiZs|L5OK3fu6 z>z&jnp^g=n#p`t_B+85YGD1?2;G3=rrqr+5Ow?FQ1C}%(d~?kLgG53Vy_}bhUAl{y z+7}70-8Jf7ZFnN^P2!AvsI55p^_hxr*pzcp5!t+3%o%1ULnsi1SwoaHr&3~#QDp-* zMrlKBM<(P$7RGUAP(q&p_sT`4&t=ar&wle9FwdFhxvY6Emr_r8va3|+(r1pvJBf0l z{|ktWl2qxGI|x`(+RQhrjb^4<(i3@KUYRZ?LMjc^vRq`KX}Vd-%Ous`BH{t#&8lt# zhyY$y{x&A2ieGsYLGEN03i1}X+3RW5Q_X5P*{2%wX04!>M3Dege?ukN^z(gs+ngwv zk-utfNcVXmgP-or2@hwI)vU@BzM*NNOg0wzY~rzIQmbVi8! zlcRdYx8_z8qa}At?Ob;#q=pb~k&l+-If#Z!MoSgfOOBSR6Xv47g5tN{^r`yoPmFq{ zf-BEM&d1laXOJ68*hq%fIG%9JH9jHQ+6mFJF?q15nRnSN&#Q>8nyaVKW}EGQxIyoV?iXz^ literal 0 HcmV?d00001 diff --git a/public/bootstrap-icons-X6UQXWUS.woff2 b/public/bootstrap-icons-X6UQXWUS.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..92c4830216044ba21db9f4294b887312e80da38e GIT binary patch literal 130396 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Ã=hYmg-7dH4?&*NqqtUL18qtx> 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 z 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"u"&&(D.yylloc={});var Gt=D.yylloc;u.push(Gt);var Ne=D.options&&D.options.ranges;typeof vt.yy.parseError=="function"?this.parseError=vt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Be(){var X;return X=g.pop()||D.lex()||he,typeof X!="number"&&(X instanceof Array&&(g=X,X=g.pop()),X=x.symbols_[X]||X),X}for(var M,kt,B,Kt,wt={},Lt,z,ue,Nt;;){if(kt=m[m.length-1],this.defaultActions[kt]?B=this.defaultActions[kt]:((M===null||typeof M>"u")&&(M=Be()),B=Rt[kt]&&Rt[kt][M]),typeof B>"u"||!B.length||!B[0]){var Jt="";Nt=[];for(Lt in Rt[kt])this.terminals_[Lt]&&Lt>Me&&Nt.push("'"+this.terminals_[Lt]+"'");D.showPosition?Jt="Parse error on line "+(Et+1)+`: +`+D.showPosition()+` +Expecting `+Nt.join(", ")+", got '"+(this.terminals_[M]||M)+"'":Jt="Parse error on line "+(Et+1)+": Unexpected "+(M==he?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(Jt,{text:D.match,token:this.terminals_[M]||M,line:D.yylineno,loc:Gt,expected:Nt})}if(B[0]instanceof Array&&B.length>1)throw new Error("Parse Error: multiple actions possible at state: "+kt+", token: "+M);switch(B[0]){case 1:m.push(M),T.push(D.yytext),u.push(D.yylloc),m.push(B[1]),M=null,ce=D.yyleng,y=D.yytext,Et=D.yylineno,Gt=D.yylloc;break;case 2:if(z=this.productions_[B[1]][1],wt.$=T[T.length-z],wt._$={first_line:u[u.length-(z||1)].first_line,last_line:u[u.length-1].last_line,first_column:u[u.length-(z||1)].first_column,last_column:u[u.length-1].last_column},Ne&&(wt._$.range=[u[u.length-(z||1)].range[0],u[u.length-1].range[1]]),Kt=this.performAction.apply(wt,[y,ce,Et,vt.yy,B[1],T,u].concat(Le)),typeof Kt<"u")return Kt;z&&(m=m.slice(0,-1*z*2),T=T.slice(0,-1*z),u=u.slice(0,-1*z)),m.push(this.productions_[B[1]][0]),T.push(wt.$),u.push(wt._$),ue=Rt[m[m.length-2]][m[m.length-1]],m.push(ue);break;case 3:return!0}}return!0}},Pe=function(){var bt={EOF:1,parseError:function(x,m){if(this.yy.parser)this.yy.parser.parseError(x,m);else throw new Error(x)},setInput:function(_,x){return this.yy=x||this.yy||{},this._input=_,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var _=this._input[0];this.yytext+=_,this.yyleng++,this.offset++,this.match+=_,this.matched+=_;var x=_.match(/(?:\r\n?|\n).*/g);return x?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_},unput:function(_){var x=_.length,m=_.split(/(?:\r\n?|\n)/g);this._input=_+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-x),this.offset-=x;var g=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),m.length-1&&(this.yylineno-=m.length-1);var T=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:m?(m.length===g.length?this.yylloc.first_column:0)+g[g.length-m.length].length-m[0].length:this.yylloc.first_column-x},this.options.ranges&&(this.yylloc.range=[T[0],T[0]+this.yyleng-x]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(_){this.unput(this.match.slice(_))},pastInput:function(){var _=this.matched.substr(0,this.matched.length-this.match.length);return(_.length>20?"...":"")+_.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var _=this.match;return _.length<20&&(_+=this._input.substr(0,20-_.length)),(_.substr(0,20)+(_.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var _=this.pastInput(),x=new Array(_.length+1).join("-");return _+this.upcomingInput()+` +`+x+"^"},test_match:function(_,x){var m,g,T;if(this.options.backtrack_lexer&&(T={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(T.yylloc.range=this.yylloc.range.slice(0))),g=_[0].match(/(?:\r\n?|\n).*/g),g&&(this.yylineno+=g.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:g?g[g.length-1].length-g[g.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_[0].length},this.yytext+=_[0],this.match+=_[0],this.matches=_,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(_[0].length),this.matched+=_[0],m=this.performAction.call(this,this.yy,this,x,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),m)return m;if(this._backtrack){for(var u in T)this[u]=T[u];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _,x,m,g;this._more||(this.yytext="",this.match="");for(var T=this._currentRules(),u=0;ux[0].length)){if(x=m,g=u,this.options.backtrack_lexer){if(_=this.test_match(m,T[u]),_!==!1)return _;if(this._backtrack){x=!1;continue}else return!1}else if(!this.options.flex)break}return x?(_=this.test_match(x,T[g]),_!==!1?_:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var x=this.next();return x||this.lex()},begin:function(x){this.conditionStack.push(x)},popState:function(){var x=this.conditionStack.length-1;return x>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(x){return x=this.conditionStack.length-1-Math.abs(x||0),x>=0?this.conditionStack[x]:"INITIAL"},pushState:function(x){this.begin(x)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(x,m,g,T){switch(g){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:return this.begin("node"),39;case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:return this.begin("rel_u"),66;case 53:return this.begin("rel_u"),66;case 54:return this.begin("rel_d"),67;case 55:return this.begin("rel_d"),67;case 56:return this.begin("rel_l"),68;case 57:return this.begin("rel_l"),68;case 58:return this.begin("rel_r"),69;case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return bt}();Qt.lexer=Pe;function Ht(){this.yy={}}return Ht.prototype=Qt,Qt.Parser=Ht,new Ht}();It.parser=It;var Ue=It,U=[],_t=[""],P="global",j="",V=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Pt=[],ae="",re=!1,jt=4,Ut=2,Ae,Fe=function(){return Ae},Ve=function(e){Ae=te(e,Ot())},ze=function(e,t,a,o,l,i,s,r,n){if(e==null||t===void 0||t===null||a===void 0||a===null||o===void 0||o===null)return;let h={},f=Pt.find(d=>d.from===t&&d.to===a);if(f?h=f:Pt.push(h),h.type=e,h.from=t,h.to=a,h.label={text:o},l==null)h.techn={text:""};else if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]={text:p}}else h.techn={text:l};if(i==null)h.descr={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.descr={text:i};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof r=="object"){let[d,p]=Object.entries(r)[0];h[d]=p}else h.tags=r;if(typeof n=="object"){let[d,p]=Object.entries(n)[0];h[d]=p}else h.link=n;h.wrap=xt()},Xe=function(e,t,a,o,l,i,s){if(t===null||a===null)return;let r={},n=U.find(h=>h.alias===t);if(n&&t===n.alias?r=n:(r.alias=t,U.push(r)),a==null?r.label={text:""}:r.label={text:a},o==null)r.descr={text:""};else if(typeof o=="object"){let[h,f]=Object.entries(o)[0];r[h]={text:f}}else r.descr={text:o};if(typeof l=="object"){let[h,f]=Object.entries(l)[0];r[h]=f}else r.sprite=l;if(typeof i=="object"){let[h,f]=Object.entries(i)[0];r[h]=f}else r.tags=i;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];r[h]=f}else r.link=s;r.typeC4Shape={text:e},r.parentBoundary=P,r.wrap=xt()},We=function(e,t,a,o,l,i,s,r){if(t===null||a===null)return;let n={},h=U.find(f=>f.alias===t);if(h&&t===h.alias?n=h:(n.alias=t,U.push(n)),a==null?n.label={text:""}:n.label={text:a},o==null)n.techn={text:""};else if(typeof o=="object"){let[f,d]=Object.entries(o)[0];n[f]={text:d}}else n.techn={text:o};if(l==null)n.descr={text:""};else if(typeof l=="object"){let[f,d]=Object.entries(l)[0];n[f]={text:d}}else n.descr={text:l};if(typeof i=="object"){let[f,d]=Object.entries(i)[0];n[f]=d}else n.sprite=i;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];n[f]=d}else n.tags=s;if(typeof r=="object"){let[f,d]=Object.entries(r)[0];n[f]=d}else n.link=r;n.wrap=xt(),n.typeC4Shape={text:e},n.parentBoundary=P},Qe=function(e,t,a,o,l,i,s,r){if(t===null||a===null)return;let n={},h=U.find(f=>f.alias===t);if(h&&t===h.alias?n=h:(n.alias=t,U.push(n)),a==null?n.label={text:""}:n.label={text:a},o==null)n.techn={text:""};else if(typeof o=="object"){let[f,d]=Object.entries(o)[0];n[f]={text:d}}else n.techn={text:o};if(l==null)n.descr={text:""};else if(typeof l=="object"){let[f,d]=Object.entries(l)[0];n[f]={text:d}}else n.descr={text:l};if(typeof i=="object"){let[f,d]=Object.entries(i)[0];n[f]=d}else n.sprite=i;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];n[f]=d}else n.tags=s;if(typeof r=="object"){let[f,d]=Object.entries(r)[0];n[f]=d}else n.link=r;n.wrap=xt(),n.typeC4Shape={text:e},n.parentBoundary=P},He=function(e,t,a,o,l){if(e===null||t===null)return;let i={},s=V.find(r=>r.alias===e);if(s&&e===s.alias?i=s:(i.alias=e,V.push(i)),t==null?i.label={text:""}:i.label={text:t},a==null)i.type={text:"system"};else if(typeof a=="object"){let[r,n]=Object.entries(a)[0];i[r]={text:n}}else i.type={text:a};if(typeof o=="object"){let[r,n]=Object.entries(o)[0];i[r]=n}else i.tags=o;if(typeof l=="object"){let[r,n]=Object.entries(l)[0];i[r]=n}else i.link=l;i.parentBoundary=P,i.wrap=xt(),j=P,P=e,_t.push(j)},qe=function(e,t,a,o,l){if(e===null||t===null)return;let i={},s=V.find(r=>r.alias===e);if(s&&e===s.alias?i=s:(i.alias=e,V.push(i)),t==null?i.label={text:""}:i.label={text:t},a==null)i.type={text:"container"};else if(typeof a=="object"){let[r,n]=Object.entries(a)[0];i[r]={text:n}}else i.type={text:a};if(typeof o=="object"){let[r,n]=Object.entries(o)[0];i[r]=n}else i.tags=o;if(typeof l=="object"){let[r,n]=Object.entries(l)[0];i[r]=n}else i.link=l;i.parentBoundary=P,i.wrap=xt(),j=P,P=e,_t.push(j)},Ge=function(e,t,a,o,l,i,s,r){if(t===null||a===null)return;let n={},h=V.find(f=>f.alias===t);if(h&&t===h.alias?n=h:(n.alias=t,V.push(n)),a==null?n.label={text:""}:n.label={text:a},o==null)n.type={text:"node"};else if(typeof o=="object"){let[f,d]=Object.entries(o)[0];n[f]={text:d}}else n.type={text:o};if(l==null)n.descr={text:""};else if(typeof l=="object"){let[f,d]=Object.entries(l)[0];n[f]={text:d}}else n.descr={text:l};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];n[f]=d}else n.tags=s;if(typeof r=="object"){let[f,d]=Object.entries(r)[0];n[f]=d}else n.link=r;n.nodeType=e,n.parentBoundary=P,n.wrap=xt(),j=P,P=t,_t.push(j)},Ke=function(){P=j,_t.pop(),j=_t.pop(),_t.push(j)},Je=function(e,t,a,o,l,i,s,r,n,h,f){let d=U.find(p=>p.alias===t);if(!(d===void 0&&(d=V.find(p=>p.alias===t),d===void 0))){if(a!=null)if(typeof a=="object"){let[p,E]=Object.entries(a)[0];d[p]=E}else d.bgColor=a;if(o!=null)if(typeof o=="object"){let[p,E]=Object.entries(o)[0];d[p]=E}else d.fontColor=o;if(l!=null)if(typeof l=="object"){let[p,E]=Object.entries(l)[0];d[p]=E}else d.borderColor=l;if(i!=null)if(typeof i=="object"){let[p,E]=Object.entries(i)[0];d[p]=E}else d.shadowing=i;if(s!=null)if(typeof s=="object"){let[p,E]=Object.entries(s)[0];d[p]=E}else d.shape=s;if(r!=null)if(typeof r=="object"){let[p,E]=Object.entries(r)[0];d[p]=E}else d.sprite=r;if(n!=null)if(typeof n=="object"){let[p,E]=Object.entries(n)[0];d[p]=E}else d.techn=n;if(h!=null)if(typeof h=="object"){let[p,E]=Object.entries(h)[0];d[p]=E}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,E]=Object.entries(f)[0];d[p]=E}else d.legendSprite=f}},Ze=function(e,t,a,o,l,i,s){let r=Pt.find(n=>n.from===t&&n.to===a);if(r!==void 0){if(o!=null)if(typeof o=="object"){let[n,h]=Object.entries(o)[0];r[n]=h}else r.textColor=o;if(l!=null)if(typeof l=="object"){let[n,h]=Object.entries(l)[0];r[n]=h}else r.lineColor=l;if(i!=null)if(typeof i=="object"){let[n,h]=Object.entries(i)[0];r[n]=parseInt(h)}else r.offsetX=parseInt(i);if(s!=null)if(typeof s=="object"){let[n,h]=Object.entries(s)[0];r[n]=parseInt(h)}else r.offsetY=parseInt(s)}},$e=function(e,t,a){let o=jt,l=Ut;if(typeof t=="object"){let i=Object.values(t)[0];o=parseInt(i)}else o=parseInt(t);if(typeof a=="object"){let i=Object.values(a)[0];l=parseInt(i)}else l=parseInt(a);o>=1&&(jt=o),l>=1&&(Ut=l)},t0=function(){return jt},e0=function(){return Ut},i0=function(){return P},n0=function(){return j},Ce=function(e){return e==null?U:U.filter(t=>t.parentBoundary===e)},s0=function(e){return U.find(t=>t.alias===e)},a0=function(e){return Object.keys(Ce(e))},we=function(e){return e==null?V:V.filter(t=>t.parentBoundary===e)},r0=we,l0=function(){return Pt},o0=function(){return ae},c0=function(e){re=e},xt=function(){return re},h0=function(){U=[],V=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],j="",P="global",_t=[""],Pt=[],_t=[""],ae="",re=!1,jt=4,Ut=2},u0={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},d0={FILLED:0,OPEN:1},f0={LEFTOF:0,RIGHTOF:1,OVER:2},p0=function(e){ae=te(e,Ot())},ie={addPersonOrSystem:Xe,addPersonOrSystemBoundary:He,addContainer:We,addContainerBoundary:qe,addComponent:Qe,addDeploymentNode:Ge,popBoundaryParseStack:Ke,addRel:ze,updateElStyle:Je,updateRelStyle:Ze,updateLayoutConfig:$e,autoWrap:xt,setWrap:c0,getC4ShapeArray:Ce,getC4Shape:s0,getC4ShapeKeys:a0,getBoundaries:we,getBoundarys:r0,getCurrentBoundaryParse:i0,getParentBoundaryParse:n0,getRels:l0,getTitle:o0,getC4Type:Fe,getC4ShapeInRow:t0,getC4BoundaryInRow:e0,setAccTitle:be,getAccTitle:_e,getAccDescription:me,setAccDescription:xe,getConfig:()=>Ot().c4,clear:h0,LINETYPE:u0,ARROWTYPE:d0,PLACEMENT:f0,setTitle:p0,setC4Type:Ve},le=function(e,t){return de(e,t)},Oe=function(e,t,a,o,l,i){let s=e.append("image");s.attr("width",t),s.attr("height",a),s.attr("x",o),s.attr("y",l);let r=i.startsWith("data:image/png;base64")?i:(0,ke.sanitizeUrl)(i);s.attr("xlink:href",r)},y0=(e,t,a)=>{let o=e.append("g"),l=0;for(let i of t){let s=i.textColor?i.textColor:"#444444",r=i.lineColor?i.lineColor:"#444444",n=i.offsetX?parseInt(i.offsetX):0,h=i.offsetY?parseInt(i.offsetY):0,f="";if(l===0){let p=o.append("line");p.attr("x1",i.startPoint.x),p.attr("y1",i.startPoint.y),p.attr("x2",i.endPoint.x),p.attr("y2",i.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",r),p.style("fill","none"),i.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(i.type==="birel"||i.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),l=-1}else{let p=o.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",r).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",i.startPoint.x).replaceAll("starty",i.startPoint.y).replaceAll("controlx",i.startPoint.x+(i.endPoint.x-i.startPoint.x)/2-(i.endPoint.x-i.startPoint.x)/4).replaceAll("controly",i.startPoint.y+(i.endPoint.y-i.startPoint.y)/2).replaceAll("stopx",i.endPoint.x).replaceAll("stopy",i.endPoint.y)),i.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(i.type==="birel"||i.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=a.messageFont();W(a)(i.label.text,o,Math.min(i.startPoint.x,i.endPoint.x)+Math.abs(i.endPoint.x-i.startPoint.x)/2+n,Math.min(i.startPoint.y,i.endPoint.y)+Math.abs(i.endPoint.y-i.startPoint.y)/2+h,i.label.width,i.label.height,{fill:s},d),i.techn&&i.techn.text!==""&&(d=a.messageFont(),W(a)("["+i.techn.text+"]",o,Math.min(i.startPoint.x,i.endPoint.x)+Math.abs(i.endPoint.x-i.startPoint.x)/2+n,Math.min(i.startPoint.y,i.endPoint.y)+Math.abs(i.endPoint.y-i.startPoint.y)/2+a.messageFontSize+5+h,Math.max(i.label.width,i.techn.width),i.techn.height,{fill:s,"font-style":"italic"},d))}},g0=function(e,t,a){let o=e.append("g"),l=t.bgColor?t.bgColor:"none",i=t.borderColor?t.borderColor:"#444444",s=t.fontColor?t.fontColor:"black",r={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};t.nodeType&&(r={"stroke-width":1});let n={x:t.x,y:t.y,fill:l,stroke:i,width:t.width,height:t.height,rx:2.5,ry:2.5,attrs:r};le(o,n);let h=a.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,W(a)(t.label.text,o,t.x,t.y+t.label.Y,t.width,t.height,{fill:"#444444"},h),t.type&&t.type.text!==""&&(h=a.boundaryFont(),h.fontColor=s,W(a)(t.type.text,o,t.x,t.y+t.type.Y,t.width,t.height,{fill:"#444444"},h)),t.descr&&t.descr.text!==""&&(h=a.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,W(a)(t.descr.text,o,t.x,t.y+t.descr.Y,t.width,t.height,{fill:"#444444"},h))},b0=function(e,t,a){var o;let l=t.bgColor?t.bgColor:a[t.typeC4Shape.text+"_bg_color"],i=t.borderColor?t.borderColor:a[t.typeC4Shape.text+"_border_color"],s=t.fontColor?t.fontColor:"#FFFFFF",r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(t.typeC4Shape.text){case"person":r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let n=e.append("g");n.attr("class","person-man");let h=fe();switch(t.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":h.x=t.x,h.y=t.y,h.fill=l,h.width=t.width,h.height=t.height,h.stroke=i,h.rx=2.5,h.ry=2.5,h.attrs={"stroke-width":.5},le(n,h);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":n.append("path").attr("fill",l).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",t.x).replaceAll("starty",t.y).replaceAll("half",t.width/2).replaceAll("height",t.height)),n.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",t.x).replaceAll("starty",t.y).replaceAll("half",t.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":n.append("path").attr("fill",l).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",t.x).replaceAll("starty",t.y).replaceAll("width",t.width).replaceAll("half",t.height/2)),n.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",t.x+t.width).replaceAll("starty",t.y).replaceAll("half",t.height/2));break}let f=w0(a,t.typeC4Shape.text);switch(n.append("text").attr("fill",s).attr("font-family",f.fontFamily).attr("font-size",f.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",t.typeC4Shape.width).attr("x",t.x+t.width/2-t.typeC4Shape.width/2).attr("y",t.y+t.typeC4Shape.Y).text("<<"+t.typeC4Shape.text+">>"),t.typeC4Shape.text){case"person":case"external_person":Oe(n,48,48,t.x+t.width/2-24,t.y+t.image.Y,r);break}let d=a[t.typeC4Shape.text+"Font"]();return d.fontWeight="bold",d.fontSize=d.fontSize+2,d.fontColor=s,W(a)(t.label.text,n,t.x,t.y+t.label.Y,t.width,t.height,{fill:s},d),d=a[t.typeC4Shape.text+"Font"](),d.fontColor=s,t.techn&&((o=t.techn)==null?void 0:o.text)!==""?W(a)(t.techn.text,n,t.x,t.y+t.techn.Y,t.width,t.height,{fill:s,"font-style":"italic"},d):t.type&&t.type.text!==""&&W(a)(t.type.text,n,t.x,t.y+t.type.Y,t.width,t.height,{fill:s,"font-style":"italic"},d),t.descr&&t.descr.text!==""&&(d=a.personFont(),d.fontColor=s,W(a)(t.descr.text,n,t.x,t.y+t.descr.Y,t.width,t.height,{fill:s},d)),t.height},_0=function(e){e.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},x0=function(e){e.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},m0=function(e){e.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},E0=function(e){e.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},v0=function(e){e.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},k0=function(e){e.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},A0=function(e){e.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},C0=function(e){let a=e.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);a.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),a.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},w0=(e,t)=>({fontFamily:e[t+"FontFamily"],fontSize:e[t+"FontSize"],fontWeight:e[t+"FontWeight"]}),W=function(){function e(l,i,s,r,n,h,f){let d=i.append("text").attr("x",s+n/2).attr("y",r+h/2+5).style("text-anchor","middle").text(l);o(d,f)}function t(l,i,s,r,n,h,f,d){let{fontSize:p,fontFamily:E,fontWeight:O}=d,R=l.split(Bt.lineBreakRegex);for(let S=0;S=this.data.widthLimit||o>=this.data.widthLimit||this.nextData.cnt>Te)&&(a=this.nextData.startx+t.margin+b.nextLinePaddingX,l=this.nextData.stopy+t.margin*2,this.nextData.stopx=o=a+t.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=i=l+t.height,this.nextData.cnt=1),t.x=a,t.y=l,this.updateVal(this.data,"startx",a,Math.min),this.updateVal(this.data,"starty",l,Math.min),this.updateVal(this.data,"stopx",o,Math.max),this.updateVal(this.data,"stopy",i,Math.max),this.updateVal(this.nextData,"startx",a,Math.min),this.updateVal(this.nextData,"starty",l,Math.min),this.updateVal(this.nextData,"stopx",o,Math.max),this.updateVal(this.nextData,"stopy",i,Math.max)}init(t){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},se(t.db.getConfig())}bumpLastMargin(t){this.data.stopx+=t,this.data.stopy+=t}},se=function(e){pe(b,e),e.fontFamily&&(b.personFontFamily=b.systemFontFamily=b.messageFontFamily=e.fontFamily),e.fontSize&&(b.personFontSize=b.systemFontSize=b.messageFontSize=e.fontSize),e.fontWeight&&(b.personFontWeight=b.systemFontWeight=b.messageFontWeight=e.fontWeight)},St=(e,t)=>({fontFamily:e[t+"FontFamily"],fontSize:e[t+"FontSize"],fontWeight:e[t+"FontWeight"]}),Yt=e=>({fontFamily:e.boundaryFontFamily,fontSize:e.boundaryFontSize,fontWeight:e.boundaryFontWeight}),O0=e=>({fontFamily:e.messageFontFamily,fontSize:e.messageFontSize,fontWeight:e.messageFontWeight});function I(e,t,a,o,l){if(!t[e].width)if(a)t[e].text=ye(t[e].text,l,o),t[e].textLines=t[e].text.split(Bt.lineBreakRegex).length,t[e].width=l,t[e].height=ee(t[e].text,o);else{let i=t[e].text.split(Bt.lineBreakRegex);t[e].textLines=i.length;let s=0;t[e].height=0,t[e].width=0;for(let r of i)t[e].width=Math.max(At(r,o),t[e].width),s=ee(r,o),t[e].height=t[e].height+s}}var Re=function(e,t,a){t.x=a.data.startx,t.y=a.data.starty,t.width=a.data.stopx-a.data.startx,t.height=a.data.stopy-a.data.starty,t.label.y=b.c4ShapeMargin-35;let o=t.wrap&&b.wrap,l=Yt(b);l.fontSize=l.fontSize+2,l.fontWeight="bold";let i=At(t.label.text,l);I("label",t,o,l,i),F.drawBoundary(e,t,b)},De=function(e,t,a,o){let l=0;for(let i of o){l=0;let s=a[i],r=St(b,s.typeC4Shape.text);switch(r.fontSize=r.fontSize-2,s.typeC4Shape.width=At("\xAB"+s.typeC4Shape.text+"\xBB",r),s.typeC4Shape.height=r.fontSize+2,s.typeC4Shape.Y=b.c4ShapePadding,l=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=l,l=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=l,l=s.image.Y+s.image.height);let n=s.wrap&&b.wrap,h=b.width-b.c4ShapePadding*2,f=St(b,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",I("label",s,n,f,h),s.label.Y=l+8,l=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let E=St(b,s.typeC4Shape.text);I("type",s,n,E,h),s.type.Y=l+5,l=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let E=St(b,s.techn.text);I("techn",s,n,E,h),s.techn.Y=l+5,l=s.techn.Y+s.techn.height}let d=l,p=s.label.width;if(s.descr&&s.descr.text!==""){let E=St(b,s.typeC4Shape.text);I("descr",s,n,E,h),s.descr.Y=l+20,l=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=l-s.descr.textLines*5}p=p+b.c4ShapePadding,s.width=Math.max(s.width||b.width,p,b.width),s.height=Math.max(s.height||b.height,d,b.height),s.margin=s.margin||b.c4ShapeMargin,e.insert(s),F.drawC4Shape(t,s,b)}e.bumpLastMargin(b.c4ShapeMargin)},L=class{constructor(t,a){this.x=t,this.y=a}},Ee=function(e,t){let a=e.x,o=e.y,l=t.x,i=t.y,s=a+e.width/2,r=o+e.height/2,n=Math.abs(a-l),h=Math.abs(o-i),f=h/n,d=e.height/e.width,p=null;return o==i&&al?p=new L(a,r):a==l&&oi&&(p=new L(s,o)),a>l&&o=f?p=new L(a,r+f*e.width/2):p=new L(s-n/h*e.height/2,o+e.height):a=f?p=new L(a+e.width,r+f*e.width/2):p=new L(s+n/h*e.height/2,o+e.height):ai?d>=f?p=new L(a+e.width,r-f*e.width/2):p=new L(s+e.height/2*n/h,o):a>l&&o>i&&(d>=f?p=new L(a,r-e.width/2*f):p=new L(s-e.height/2*n/h,o)),p},T0=function(e,t){let a={x:0,y:0};a.x=t.x+t.width/2,a.y=t.y+t.height/2;let o=Ee(e,a);a.x=e.x+e.width/2,a.y=e.y+e.height/2;let l=Ee(t,a);return{startPoint:o,endPoint:l}},R0=function(e,t,a,o){let l=0;for(let i of t){l=l+1;let s=i.wrap&&b.wrap,r=O0(b);o.db.getC4Type()==="C4Dynamic"&&(i.label.text=l+": "+i.label.text);let h=At(i.label.text,r);I("label",i,s,r,h),i.techn&&i.techn.text!==""&&(h=At(i.techn.text,r),I("techn",i,s,r,h)),i.descr&&i.descr.text!==""&&(h=At(i.descr.text,r),I("descr",i,s,r,h));let f=a(i.from),d=a(i.to),p=T0(f,d);i.startPoint=p.startPoint,i.endPoint=p.endPoint}F.drawRels(e,t,b)};function Se(e,t,a,o,l){let i=new zt(l);i.data.widthLimit=a.data.widthLimit/Math.min(ne,o.length);for(let[s,r]of o.entries()){let n=0;r.image={width:0,height:0,Y:0},r.sprite&&(r.image.width=48,r.image.height=48,r.image.Y=n,n=r.image.Y+r.image.height);let h=r.wrap&&b.wrap,f=Yt(b);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",I("label",r,h,f,i.data.widthLimit),r.label.Y=n+8,n=r.label.Y+r.label.height,r.type&&r.type.text!==""){r.type.text="["+r.type.text+"]";let O=Yt(b);I("type",r,h,O,i.data.widthLimit),r.type.Y=n+5,n=r.type.Y+r.type.height}if(r.descr&&r.descr.text!==""){let O=Yt(b);O.fontSize=O.fontSize-2,I("descr",r,h,O,i.data.widthLimit),r.descr.Y=n+20,n=r.descr.Y+r.descr.height}if(s==0||s%ne===0){let O=a.data.startx+b.diagramMarginX,R=a.data.stopy+b.diagramMarginY+n;i.setData(O,O,R,R)}else{let O=i.data.stopx!==i.data.startx?i.data.stopx+b.diagramMarginX:i.data.startx,R=i.data.starty;i.setData(O,O,R,R)}i.name=r.alias;let d=l.db.getC4ShapeArray(r.alias),p=l.db.getC4ShapeKeys(r.alias);p.length>0&&De(i,e,d,p),t=r.alias;let E=l.db.getBoundarys(t);E.length>0&&Se(e,t,i,E,l),r.alias!=="global"&&Re(e,r,i),a.data.stopy=Math.max(i.data.stopy+b.c4ShapeMargin,a.data.stopy),a.data.stopx=Math.max(i.data.stopx+b.c4ShapeMargin,a.data.stopx),Ft=Math.max(Ft,a.data.stopx),Vt=Math.max(Vt,a.data.stopy)}}var D0=function(e,t,a,o){b=Ot().c4;let l=Ot().securityLevel,i;l==="sandbox"&&(i=Dt("#i"+t));let s=l==="sandbox"?Dt(i.nodes()[0].contentDocument.body):Dt("body"),r=o.db;o.db.setWrap(b.wrap),Te=r.getC4ShapeInRow(),ne=r.getC4BoundaryInRow(),$t.debug(`C:${JSON.stringify(b,null,2)}`);let n=l==="sandbox"?s.select(`[id="${t}"]`):Dt(`[id="${t}"]`);F.insertComputerIcon(n),F.insertDatabaseIcon(n),F.insertClockIcon(n);let h=new zt(o);h.setData(b.diagramMarginX,b.diagramMarginX,b.diagramMarginY,b.diagramMarginY),h.data.widthLimit=screen.availWidth,Ft=b.diagramMarginX,Vt=b.diagramMarginY;let f=o.db.getTitle(),d=o.db.getBoundarys("");Se(n,"",h,d,o),F.insertArrowHead(n),F.insertArrowEnd(n),F.insertArrowCrossHead(n),F.insertArrowFilledHead(n),R0(n,o.db.getRels(),o.db.getC4Shape,o),h.data.stopx=Ft,h.data.stopy=Vt;let p=h.data,O=p.stopy-p.starty+2*b.diagramMarginY,S=p.stopx-p.startx+2*b.diagramMarginX;f&&n.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*b.diagramMarginX).attr("y",p.starty+b.diagramMarginY),ge(n,O,S,b.useMaxWidth);let N=f?60:0;n.attr("viewBox",p.startx-b.diagramMarginX+" -"+(b.diagramMarginY+N)+" "+S+" "+(O+N)),$t.debug("models:",p)},ve={drawPersonOrSystemArray:De,drawBoundary:Re,setConf:se,draw:D0},S0=e=>`.person { + stroke: ${e.personBorder}; + fill: ${e.personBkg}; + } +`,P0=S0,j0={parser:Ue,db:ie,renderer:ve,styles:P0,init:({c4:e,wrap:t})=>{ve.setConf(e),ie.setWrap(t)}};export{j0 as diagram}; +//# sourceMappingURL=c4Diagram-ae766693-CZAYTAZR.min.js.map diff --git a/public/c4Diagram-ae766693-CZAYTAZR.min.js.map b/public/c4Diagram-ae766693-CZAYTAZR.min.js.map new file mode 100644 index 000000000..b76ce92a5 --- /dev/null +++ b/public/c4Diagram-ae766693-CZAYTAZR.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/mermaid/dist/c4Diagram-ae766693.js"], + "sourcesContent": ["import { s as setAccTitle, g as getAccTitle, a as getAccDescription, b as setAccDescription, c as getConfig, d as sanitizeText, e as common, f as assignWithDepth, h as calculateTextWidth, l as log, i as configureSvgSize, w as wrapLabel, j as calculateTextHeight } from \"./mermaid-6dc72991.js\";\nimport { select } from \"d3\";\nimport { d as drawRect$1, g as getNoteRect } from \"./svgDrawCommon-5e1cfd1d.js\";\nimport { sanitizeUrl } from \"@braintree/sanitize-url\";\nimport \"ts-dedent\";\nimport \"dayjs\";\nimport \"dompurify\";\nimport \"khroma\";\nimport \"lodash-es/memoize.js\";\nimport \"lodash-es/merge.js\";\nimport \"stylis\";\nimport \"lodash-es/isEmpty.js\";\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 24], $V1 = [1, 25], $V2 = [1, 26], $V3 = [1, 27], $V4 = [1, 28], $V5 = [1, 63], $V6 = [1, 64], $V7 = [1, 65], $V8 = [1, 66], $V9 = [1, 67], $Va = [1, 68], $Vb = [1, 69], $Vc = [1, 29], $Vd = [1, 30], $Ve = [1, 31], $Vf = [1, 32], $Vg = [1, 33], $Vh = [1, 34], $Vi = [1, 35], $Vj = [1, 36], $Vk = [1, 37], $Vl = [1, 38], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 43], $Vr = [1, 44], $Vs = [1, 45], $Vt = [1, 46], $Vu = [1, 47], $Vv = [1, 48], $Vw = [1, 50], $Vx = [1, 51], $Vy = [1, 52], $Vz = [1, 53], $VA = [1, 54], $VB = [1, 55], $VC = [1, 56], $VD = [1, 57], $VE = [1, 58], $VF = [1, 59], $VG = [1, 60], $VH = [14, 42], $VI = [14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VJ = [12, 14, 34, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], $VK = [1, 82], $VL = [1, 83], $VM = [1, 84], $VN = [1, 85], $VO = [12, 14, 42], $VP = [12, 14, 33, 42], $VQ = [12, 14, 33, 42, 76, 77, 79, 80], $VR = [12, 33], $VS = [34, 36, 37, 38, 39, 40, 41, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"mermaidDoc\": 4, \"direction\": 5, \"direction_tb\": 6, \"direction_bt\": 7, \"direction_rl\": 8, \"direction_lr\": 9, \"graphConfig\": 10, \"C4_CONTEXT\": 11, \"NEWLINE\": 12, \"statements\": 13, \"EOF\": 14, \"C4_CONTAINER\": 15, \"C4_COMPONENT\": 16, \"C4_DYNAMIC\": 17, \"C4_DEPLOYMENT\": 18, \"otherStatements\": 19, \"diagramStatements\": 20, \"otherStatement\": 21, \"title\": 22, \"accDescription\": 23, \"acc_title\": 24, \"acc_title_value\": 25, \"acc_descr\": 26, \"acc_descr_value\": 27, \"acc_descr_multiline_value\": 28, \"boundaryStatement\": 29, \"boundaryStartStatement\": 30, \"boundaryStopStatement\": 31, \"boundaryStart\": 32, \"LBRACE\": 33, \"ENTERPRISE_BOUNDARY\": 34, \"attributes\": 35, \"SYSTEM_BOUNDARY\": 36, \"BOUNDARY\": 37, \"CONTAINER_BOUNDARY\": 38, \"NODE\": 39, \"NODE_L\": 40, \"NODE_R\": 41, \"RBRACE\": 42, \"diagramStatement\": 43, \"PERSON\": 44, \"PERSON_EXT\": 45, \"SYSTEM\": 46, \"SYSTEM_DB\": 47, \"SYSTEM_QUEUE\": 48, \"SYSTEM_EXT\": 49, \"SYSTEM_EXT_DB\": 50, \"SYSTEM_EXT_QUEUE\": 51, \"CONTAINER\": 52, \"CONTAINER_DB\": 53, \"CONTAINER_QUEUE\": 54, \"CONTAINER_EXT\": 55, \"CONTAINER_EXT_DB\": 56, \"CONTAINER_EXT_QUEUE\": 57, \"COMPONENT\": 58, \"COMPONENT_DB\": 59, \"COMPONENT_QUEUE\": 60, \"COMPONENT_EXT\": 61, \"COMPONENT_EXT_DB\": 62, \"COMPONENT_EXT_QUEUE\": 63, \"REL\": 64, \"BIREL\": 65, \"REL_U\": 66, \"REL_D\": 67, \"REL_L\": 68, \"REL_R\": 69, \"REL_B\": 70, \"REL_INDEX\": 71, \"UPDATE_EL_STYLE\": 72, \"UPDATE_REL_STYLE\": 73, \"UPDATE_LAYOUT_CONFIG\": 74, \"attribute\": 75, \"STR\": 76, \"STR_KEY\": 77, \"STR_VALUE\": 78, \"ATTRIBUTE\": 79, \"ATTRIBUTE_EMPTY\": 80, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 6: \"direction_tb\", 7: \"direction_bt\", 8: \"direction_rl\", 9: \"direction_lr\", 11: \"C4_CONTEXT\", 12: \"NEWLINE\", 14: \"EOF\", 15: \"C4_CONTAINER\", 16: \"C4_COMPONENT\", 17: \"C4_DYNAMIC\", 18: \"C4_DEPLOYMENT\", 22: \"title\", 23: \"accDescription\", 24: \"acc_title\", 25: \"acc_title_value\", 26: \"acc_descr\", 27: \"acc_descr_value\", 28: \"acc_descr_multiline_value\", 33: \"LBRACE\", 34: \"ENTERPRISE_BOUNDARY\", 36: \"SYSTEM_BOUNDARY\", 37: \"BOUNDARY\", 38: \"CONTAINER_BOUNDARY\", 39: \"NODE\", 40: \"NODE_L\", 41: \"NODE_R\", 42: \"RBRACE\", 44: \"PERSON\", 45: \"PERSON_EXT\", 46: \"SYSTEM\", 47: \"SYSTEM_DB\", 48: \"SYSTEM_QUEUE\", 49: \"SYSTEM_EXT\", 50: \"SYSTEM_EXT_DB\", 51: \"SYSTEM_EXT_QUEUE\", 52: \"CONTAINER\", 53: \"CONTAINER_DB\", 54: \"CONTAINER_QUEUE\", 55: \"CONTAINER_EXT\", 56: \"CONTAINER_EXT_DB\", 57: \"CONTAINER_EXT_QUEUE\", 58: \"COMPONENT\", 59: \"COMPONENT_DB\", 60: \"COMPONENT_QUEUE\", 61: \"COMPONENT_EXT\", 62: \"COMPONENT_EXT_DB\", 63: \"COMPONENT_EXT_QUEUE\", 64: \"REL\", 65: \"BIREL\", 66: \"REL_U\", 67: \"REL_D\", 68: \"REL_L\", 69: \"REL_R\", 70: \"REL_B\", 71: \"REL_INDEX\", 72: \"UPDATE_EL_STYLE\", 73: \"UPDATE_REL_STYLE\", 74: \"UPDATE_LAYOUT_CONFIG\", 76: \"STR\", 77: \"STR_KEY\", 78: \"STR_VALUE\", 79: \"ATTRIBUTE\", 80: \"ATTRIBUTE_EMPTY\" },\n productions_: [0, [3, 1], [3, 1], [5, 1], [5, 1], [5, 1], [5, 1], [4, 1], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [13, 1], [13, 1], [13, 2], [19, 1], [19, 2], [19, 3], [21, 1], [21, 1], [21, 2], [21, 2], [21, 1], [29, 3], [30, 3], [30, 3], [30, 4], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [32, 2], [31, 1], [20, 1], [20, 2], [20, 3], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 1], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [43, 2], [35, 1], [35, 2], [75, 1], [75, 2], [75, 1], [75, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 3:\n yy.setDirection(\"TB\");\n break;\n case 4:\n yy.setDirection(\"BT\");\n break;\n case 5:\n yy.setDirection(\"RL\");\n break;\n case 6:\n yy.setDirection(\"LR\");\n break;\n case 8:\n case 9:\n case 10:\n case 11:\n case 12:\n yy.setC4Type($$[$0 - 3]);\n break;\n case 19:\n yy.setTitle($$[$0].substring(6));\n this.$ = $$[$0].substring(6);\n break;\n case 20:\n yy.setAccDescription($$[$0].substring(15));\n this.$ = $$[$0].substring(15);\n break;\n case 21:\n this.$ = $$[$0].trim();\n yy.setTitle(this.$);\n break;\n case 22:\n case 23:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 28:\n case 29:\n $$[$0].splice(2, 0, \"ENTERPRISE\");\n yy.addPersonOrSystemBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 30:\n yy.addPersonOrSystemBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 31:\n $$[$0].splice(2, 0, \"CONTAINER\");\n yy.addContainerBoundary(...$$[$0]);\n this.$ = $$[$0];\n break;\n case 32:\n yy.addDeploymentNode(\"node\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 33:\n yy.addDeploymentNode(\"nodeL\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 34:\n yy.addDeploymentNode(\"nodeR\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 35:\n yy.popBoundaryParseStack();\n break;\n case 39:\n yy.addPersonOrSystem(\"person\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 40:\n yy.addPersonOrSystem(\"external_person\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 41:\n yy.addPersonOrSystem(\"system\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 42:\n yy.addPersonOrSystem(\"system_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 43:\n yy.addPersonOrSystem(\"system_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 44:\n yy.addPersonOrSystem(\"external_system\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 45:\n yy.addPersonOrSystem(\"external_system_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 46:\n yy.addPersonOrSystem(\"external_system_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 47:\n yy.addContainer(\"container\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 48:\n yy.addContainer(\"container_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 49:\n yy.addContainer(\"container_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 50:\n yy.addContainer(\"external_container\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 51:\n yy.addContainer(\"external_container_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 52:\n yy.addContainer(\"external_container_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 53:\n yy.addComponent(\"component\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 54:\n yy.addComponent(\"component_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 55:\n yy.addComponent(\"component_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 56:\n yy.addComponent(\"external_component\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 57:\n yy.addComponent(\"external_component_db\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 58:\n yy.addComponent(\"external_component_queue\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 60:\n yy.addRel(\"rel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 61:\n yy.addRel(\"birel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 62:\n yy.addRel(\"rel_u\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 63:\n yy.addRel(\"rel_d\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 64:\n yy.addRel(\"rel_l\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 65:\n yy.addRel(\"rel_r\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 66:\n yy.addRel(\"rel_b\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 67:\n $$[$0].splice(0, 1);\n yy.addRel(\"rel\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 68:\n yy.updateElStyle(\"update_el_style\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 69:\n yy.updateRelStyle(\"update_rel_style\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 70:\n yy.updateLayoutConfig(\"update_layout_config\", ...$$[$0]);\n this.$ = $$[$0];\n break;\n case 71:\n this.$ = [$$[$0]];\n break;\n case 72:\n $$[$0].unshift($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 73:\n case 75:\n this.$ = $$[$0].trim();\n break;\n case 74:\n let kv = {};\n kv[$$[$0 - 1].trim()] = $$[$0].trim();\n this.$ = kv;\n break;\n case 76:\n this.$ = \"\";\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: 3, 6: [1, 5], 7: [1, 6], 8: [1, 7], 9: [1, 8], 10: 4, 11: [1, 9], 15: [1, 10], 16: [1, 11], 17: [1, 12], 18: [1, 13] }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 7] }, { 1: [2, 3] }, { 1: [2, 4] }, { 1: [2, 5] }, { 1: [2, 6] }, { 12: [1, 14] }, { 12: [1, 15] }, { 12: [1, 16] }, { 12: [1, 17] }, { 12: [1, 18] }, { 13: 19, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 70, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 71, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 72, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 13: 73, 19: 20, 20: 21, 21: 22, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 14: [1, 74] }, o($VH, [2, 13], { 43: 23, 29: 49, 30: 61, 32: 62, 20: 75, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VH, [2, 14]), o($VI, [2, 16], { 12: [1, 76] }), o($VH, [2, 36], { 12: [1, 77] }), o($VJ, [2, 19]), o($VJ, [2, 20]), { 25: [1, 78] }, { 27: [1, 79] }, o($VJ, [2, 23]), { 35: 80, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 86, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 87, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 88, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 89, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 90, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 91, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 92, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 93, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 94, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 95, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 96, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 97, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 98, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 99, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 100, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 101, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 102, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 103, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 104, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, o($VO, [2, 59]), { 35: 105, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 106, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 107, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 108, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 109, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 110, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 111, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 112, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 113, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 114, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 115, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 20: 116, 29: 49, 30: 61, 32: 62, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 43: 23, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }, { 12: [1, 118], 33: [1, 117] }, { 35: 119, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 120, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 121, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 122, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 123, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 124, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 35: 125, 75: 81, 76: $VK, 77: $VL, 79: $VM, 80: $VN }, { 14: [1, 126] }, { 14: [1, 127] }, { 14: [1, 128] }, { 14: [1, 129] }, { 1: [2, 8] }, o($VH, [2, 15]), o($VI, [2, 17], { 21: 22, 19: 130, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4 }), o($VH, [2, 37], { 19: 20, 20: 21, 21: 22, 43: 23, 29: 49, 30: 61, 32: 62, 13: 131, 22: $V0, 23: $V1, 24: $V2, 26: $V3, 28: $V4, 34: $V5, 36: $V6, 37: $V7, 38: $V8, 39: $V9, 40: $Va, 41: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi, 51: $Vj, 52: $Vk, 53: $Vl, 54: $Vm, 55: $Vn, 56: $Vo, 57: $Vp, 58: $Vq, 59: $Vr, 60: $Vs, 61: $Vt, 62: $Vu, 63: $Vv, 64: $Vw, 65: $Vx, 66: $Vy, 67: $Vz, 68: $VA, 69: $VB, 70: $VC, 71: $VD, 72: $VE, 73: $VF, 74: $VG }), o($VJ, [2, 21]), o($VJ, [2, 22]), o($VO, [2, 39]), o($VP, [2, 71], { 75: 81, 35: 132, 76: $VK, 77: $VL, 79: $VM, 80: $VN }), o($VQ, [2, 73]), { 78: [1, 133] }, o($VQ, [2, 75]), o($VQ, [2, 76]), o($VO, [2, 40]), o($VO, [2, 41]), o($VO, [2, 42]), o($VO, [2, 43]), o($VO, [2, 44]), o($VO, [2, 45]), o($VO, [2, 46]), o($VO, [2, 47]), o($VO, [2, 48]), o($VO, [2, 49]), o($VO, [2, 50]), o($VO, [2, 51]), o($VO, [2, 52]), o($VO, [2, 53]), o($VO, [2, 54]), o($VO, [2, 55]), o($VO, [2, 56]), o($VO, [2, 57]), o($VO, [2, 58]), o($VO, [2, 60]), o($VO, [2, 61]), o($VO, [2, 62]), o($VO, [2, 63]), o($VO, [2, 64]), o($VO, [2, 65]), o($VO, [2, 66]), o($VO, [2, 67]), o($VO, [2, 68]), o($VO, [2, 69]), o($VO, [2, 70]), { 31: 134, 42: [1, 135] }, { 12: [1, 136] }, { 33: [1, 137] }, o($VR, [2, 28]), o($VR, [2, 29]), o($VR, [2, 30]), o($VR, [2, 31]), o($VR, [2, 32]), o($VR, [2, 33]), o($VR, [2, 34]), { 1: [2, 9] }, { 1: [2, 10] }, { 1: [2, 11] }, { 1: [2, 12] }, o($VI, [2, 18]), o($VH, [2, 38]), o($VP, [2, 72]), o($VQ, [2, 74]), o($VO, [2, 24]), o($VO, [2, 35]), o($VS, [2, 25]), o($VS, [2, 26], { 12: [1, 138] }), o($VS, [2, 27])],\n defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 7], 5: [2, 3], 6: [2, 4], 7: [2, 5], 8: [2, 6], 74: [2, 8], 126: [2, 9], 127: [2, 10], 128: [2, 11], 129: [2, 12] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c2 = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c2 + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {},\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n return 6;\n case 1:\n return 7;\n case 2:\n return 8;\n case 3:\n return 9;\n case 4:\n return 22;\n case 5:\n return 23;\n case 6:\n this.begin(\"acc_title\");\n return 24;\n case 7:\n this.popState();\n return \"acc_title_value\";\n case 8:\n this.begin(\"acc_descr\");\n return 26;\n case 9:\n this.popState();\n return \"acc_descr_value\";\n case 10:\n this.begin(\"acc_descr_multiline\");\n break;\n case 11:\n this.popState();\n break;\n case 12:\n return \"acc_descr_multiline_value\";\n case 13:\n break;\n case 14:\n c;\n break;\n case 15:\n return 12;\n case 16:\n break;\n case 17:\n return 11;\n case 18:\n return 15;\n case 19:\n return 16;\n case 20:\n return 17;\n case 21:\n return 18;\n case 22:\n this.begin(\"person_ext\");\n return 45;\n case 23:\n this.begin(\"person\");\n return 44;\n case 24:\n this.begin(\"system_ext_queue\");\n return 51;\n case 25:\n this.begin(\"system_ext_db\");\n return 50;\n case 26:\n this.begin(\"system_ext\");\n return 49;\n case 27:\n this.begin(\"system_queue\");\n return 48;\n case 28:\n this.begin(\"system_db\");\n return 47;\n case 29:\n this.begin(\"system\");\n return 46;\n case 30:\n this.begin(\"boundary\");\n return 37;\n case 31:\n this.begin(\"enterprise_boundary\");\n return 34;\n case 32:\n this.begin(\"system_boundary\");\n return 36;\n case 33:\n this.begin(\"container_ext_queue\");\n return 57;\n case 34:\n this.begin(\"container_ext_db\");\n return 56;\n case 35:\n this.begin(\"container_ext\");\n return 55;\n case 36:\n this.begin(\"container_queue\");\n return 54;\n case 37:\n this.begin(\"container_db\");\n return 53;\n case 38:\n this.begin(\"container\");\n return 52;\n case 39:\n this.begin(\"container_boundary\");\n return 38;\n case 40:\n this.begin(\"component_ext_queue\");\n return 63;\n case 41:\n this.begin(\"component_ext_db\");\n return 62;\n case 42:\n this.begin(\"component_ext\");\n return 61;\n case 43:\n this.begin(\"component_queue\");\n return 60;\n case 44:\n this.begin(\"component_db\");\n return 59;\n case 45:\n this.begin(\"component\");\n return 58;\n case 46:\n this.begin(\"node\");\n return 39;\n case 47:\n this.begin(\"node\");\n return 39;\n case 48:\n this.begin(\"node_l\");\n return 40;\n case 49:\n this.begin(\"node_r\");\n return 41;\n case 50:\n this.begin(\"rel\");\n return 64;\n case 51:\n this.begin(\"birel\");\n return 65;\n case 52:\n this.begin(\"rel_u\");\n return 66;\n case 53:\n this.begin(\"rel_u\");\n return 66;\n case 54:\n this.begin(\"rel_d\");\n return 67;\n case 55:\n this.begin(\"rel_d\");\n return 67;\n case 56:\n this.begin(\"rel_l\");\n return 68;\n case 57:\n this.begin(\"rel_l\");\n return 68;\n case 58:\n this.begin(\"rel_r\");\n return 69;\n case 59:\n this.begin(\"rel_r\");\n return 69;\n case 60:\n this.begin(\"rel_b\");\n return 70;\n case 61:\n this.begin(\"rel_index\");\n return 71;\n case 62:\n this.begin(\"update_el_style\");\n return 72;\n case 63:\n this.begin(\"update_rel_style\");\n return 73;\n case 64:\n this.begin(\"update_layout_config\");\n return 74;\n case 65:\n return \"EOF_IN_STRUCT\";\n case 66:\n this.begin(\"attribute\");\n return \"ATTRIBUTE_EMPTY\";\n case 67:\n this.begin(\"attribute\");\n break;\n case 68:\n this.popState();\n this.popState();\n break;\n case 69:\n return 80;\n case 70:\n break;\n case 71:\n return 80;\n case 72:\n this.begin(\"string\");\n break;\n case 73:\n this.popState();\n break;\n case 74:\n return \"STR\";\n case 75:\n this.begin(\"string_kv\");\n break;\n case 76:\n this.begin(\"string_kv_key\");\n return \"STR_KEY\";\n case 77:\n this.popState();\n this.begin(\"string_kv_value\");\n break;\n case 78:\n return \"STR_VALUE\";\n case 79:\n this.popState();\n this.popState();\n break;\n case 80:\n return \"STR\";\n case 81:\n return \"LBRACE\";\n case 82:\n return \"RBRACE\";\n case 83:\n return \"SPACE\";\n case 84:\n return \"EOL\";\n case 85:\n return 14;\n }\n },\n rules: [/^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:title\\s[^#\\n;]+)/, /^(?:accDescription\\s[^#\\n;]+)/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/, /^(?:%%[^\\n]*(\\r?\\n)*)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:C4Context\\b)/, /^(?:C4Container\\b)/, /^(?:C4Component\\b)/, /^(?:C4Dynamic\\b)/, /^(?:C4Deployment\\b)/, /^(?:Person_Ext\\b)/, /^(?:Person\\b)/, /^(?:SystemQueue_Ext\\b)/, /^(?:SystemDb_Ext\\b)/, /^(?:System_Ext\\b)/, /^(?:SystemQueue\\b)/, /^(?:SystemDb\\b)/, /^(?:System\\b)/, /^(?:Boundary\\b)/, /^(?:Enterprise_Boundary\\b)/, /^(?:System_Boundary\\b)/, /^(?:ContainerQueue_Ext\\b)/, /^(?:ContainerDb_Ext\\b)/, /^(?:Container_Ext\\b)/, /^(?:ContainerQueue\\b)/, /^(?:ContainerDb\\b)/, /^(?:Container\\b)/, /^(?:Container_Boundary\\b)/, /^(?:ComponentQueue_Ext\\b)/, /^(?:ComponentDb_Ext\\b)/, /^(?:Component_Ext\\b)/, /^(?:ComponentQueue\\b)/, /^(?:ComponentDb\\b)/, /^(?:Component\\b)/, /^(?:Deployment_Node\\b)/, /^(?:Node\\b)/, /^(?:Node_L\\b)/, /^(?:Node_R\\b)/, /^(?:Rel\\b)/, /^(?:BiRel\\b)/, /^(?:Rel_Up\\b)/, /^(?:Rel_U\\b)/, /^(?:Rel_Down\\b)/, /^(?:Rel_D\\b)/, /^(?:Rel_Left\\b)/, /^(?:Rel_L\\b)/, /^(?:Rel_Right\\b)/, /^(?:Rel_R\\b)/, /^(?:Rel_Back\\b)/, /^(?:RelIndex\\b)/, /^(?:UpdateElementStyle\\b)/, /^(?:UpdateRelStyle\\b)/, /^(?:UpdateLayoutConfig\\b)/, /^(?:$)/, /^(?:[(][ ]*[,])/, /^(?:[(])/, /^(?:[)])/, /^(?:,,)/, /^(?:,)/, /^(?:[ ]*[\"][\"])/, /^(?:[ ]*[\"])/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:[ ]*[\\$])/, /^(?:[^=]*)/, /^(?:[=][ ]*[\"])/, /^(?:[^\"]+)/, /^(?:[\"])/, /^(?:[^,]+)/, /^(?:\\{)/, /^(?:\\})/, /^(?:[\\s]+)/, /^(?:[\\n\\r]+)/, /^(?:$)/],\n conditions: { \"acc_descr_multiline\": { \"rules\": [11, 12], \"inclusive\": false }, \"acc_descr\": { \"rules\": [9], \"inclusive\": false }, \"acc_title\": { \"rules\": [7], \"inclusive\": false }, \"string_kv_value\": { \"rules\": [78, 79], \"inclusive\": false }, \"string_kv_key\": { \"rules\": [77], \"inclusive\": false }, \"string_kv\": { \"rules\": [76], \"inclusive\": false }, \"string\": { \"rules\": [73, 74], \"inclusive\": false }, \"attribute\": { \"rules\": [68, 69, 70, 71, 72, 75, 80], \"inclusive\": false }, \"update_layout_config\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"update_rel_style\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"update_el_style\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_b\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_r\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_l\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_d\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_u\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"rel_bi\": { \"rules\": [], \"inclusive\": false }, \"rel\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"node_r\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"node_l\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"node\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"index\": { \"rules\": [], \"inclusive\": false }, \"rel_index\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_ext_queue\": { \"rules\": [], \"inclusive\": false }, \"component_ext_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"component\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_ext_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_ext_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"container\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"birel\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"enterprise_boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"boundary\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_ext_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_ext_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_queue\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system_db\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"system\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"person_ext\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"person\": { \"rules\": [65, 66, 67, 68], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 81, 82, 83, 84, 85], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nlet c4ShapeArray = [];\nlet boundaryParseStack = [\"\"];\nlet currentBoundaryParse = \"global\";\nlet parentBoundaryParse = \"\";\nlet boundaries = [\n {\n alias: \"global\",\n label: { text: \"global\" },\n type: { text: \"global\" },\n tags: null,\n link: null,\n parentBoundary: \"\"\n }\n];\nlet rels = [];\nlet title = \"\";\nlet wrapEnabled = false;\nlet c4ShapeInRow$1 = 4;\nlet c4BoundaryInRow$1 = 2;\nvar c4Type;\nconst getC4Type = function() {\n return c4Type;\n};\nconst setC4Type = function(c4TypeParam) {\n let sanitizedText = sanitizeText(c4TypeParam, getConfig());\n c4Type = sanitizedText;\n};\nconst addRel = function(type, from, to, label, techn, descr, sprite, tags, link) {\n if (type === void 0 || type === null || from === void 0 || from === null || to === void 0 || to === null || label === void 0 || label === null) {\n return;\n }\n let rel = {};\n const old = rels.find((rel2) => rel2.from === from && rel2.to === to);\n if (old) {\n rel = old;\n } else {\n rels.push(rel);\n }\n rel.type = type;\n rel.from = from;\n rel.to = to;\n rel.label = { text: label };\n if (techn === void 0 || techn === null) {\n rel.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n rel[key] = { text: value };\n } else {\n rel.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n rel.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n rel[key] = { text: value };\n } else {\n rel.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n rel[key] = value;\n } else {\n rel.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n rel[key] = value;\n } else {\n rel.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n rel[key] = value;\n } else {\n rel.link = link;\n }\n rel.wrap = autoWrap();\n};\nconst addPersonOrSystem = function(typeC4Shape, alias, label, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let personOrSystem = {};\n const old = c4ShapeArray.find((personOrSystem2) => personOrSystem2.alias === alias);\n if (old && alias === old.alias) {\n personOrSystem = old;\n } else {\n personOrSystem.alias = alias;\n c4ShapeArray.push(personOrSystem);\n }\n if (label === void 0 || label === null) {\n personOrSystem.label = { text: \"\" };\n } else {\n personOrSystem.label = { text: label };\n }\n if (descr === void 0 || descr === null) {\n personOrSystem.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n personOrSystem[key] = { text: value };\n } else {\n personOrSystem.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.link = link;\n }\n personOrSystem.typeC4Shape = { text: typeC4Shape };\n personOrSystem.parentBoundary = currentBoundaryParse;\n personOrSystem.wrap = autoWrap();\n};\nconst addContainer = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let container = {};\n const old = c4ShapeArray.find((container2) => container2.alias === alias);\n if (old && alias === old.alias) {\n container = old;\n } else {\n container.alias = alias;\n c4ShapeArray.push(container);\n }\n if (label === void 0 || label === null) {\n container.label = { text: \"\" };\n } else {\n container.label = { text: label };\n }\n if (techn === void 0 || techn === null) {\n container.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n container[key] = { text: value };\n } else {\n container.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n container.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n container[key] = { text: value };\n } else {\n container.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n container[key] = value;\n } else {\n container.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n container[key] = value;\n } else {\n container.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n container[key] = value;\n } else {\n container.link = link;\n }\n container.wrap = autoWrap();\n container.typeC4Shape = { text: typeC4Shape };\n container.parentBoundary = currentBoundaryParse;\n};\nconst addComponent = function(typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let component = {};\n const old = c4ShapeArray.find((component2) => component2.alias === alias);\n if (old && alias === old.alias) {\n component = old;\n } else {\n component.alias = alias;\n c4ShapeArray.push(component);\n }\n if (label === void 0 || label === null) {\n component.label = { text: \"\" };\n } else {\n component.label = { text: label };\n }\n if (techn === void 0 || techn === null) {\n component.techn = { text: \"\" };\n } else {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n component[key] = { text: value };\n } else {\n component.techn = { text: techn };\n }\n }\n if (descr === void 0 || descr === null) {\n component.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n component[key] = { text: value };\n } else {\n component.descr = { text: descr };\n }\n }\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n component[key] = value;\n } else {\n component.sprite = sprite;\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n component[key] = value;\n } else {\n component.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n component[key] = value;\n } else {\n component.link = link;\n }\n component.wrap = autoWrap();\n component.typeC4Shape = { text: typeC4Shape };\n component.parentBoundary = currentBoundaryParse;\n};\nconst addPersonOrSystemBoundary = function(alias, label, type, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundaries.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"system\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n};\nconst addContainerBoundary = function(alias, label, type, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundaries.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"container\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n};\nconst addDeploymentNode = function(nodeType, alias, label, type, descr, sprite, tags, link) {\n if (alias === null || label === null) {\n return;\n }\n let boundary = {};\n const old = boundaries.find((boundary2) => boundary2.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n if (label === void 0 || label === null) {\n boundary.label = { text: \"\" };\n } else {\n boundary.label = { text: label };\n }\n if (type === void 0 || type === null) {\n boundary.type = { text: \"node\" };\n } else {\n if (typeof type === \"object\") {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n if (descr === void 0 || descr === null) {\n boundary.descr = { text: \"\" };\n } else {\n if (typeof descr === \"object\") {\n let [key, value] = Object.entries(descr)[0];\n boundary[key] = { text: value };\n } else {\n boundary.descr = { text: descr };\n }\n }\n if (typeof tags === \"object\") {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === \"object\") {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.nodeType = nodeType;\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n};\nconst popBoundaryParseStack = function() {\n currentBoundaryParse = parentBoundaryParse;\n boundaryParseStack.pop();\n parentBoundaryParse = boundaryParseStack.pop();\n boundaryParseStack.push(parentBoundaryParse);\n};\nconst updateElStyle = function(typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite) {\n let old = c4ShapeArray.find((element) => element.alias === elementName);\n if (old === void 0) {\n old = boundaries.find((element) => element.alias === elementName);\n if (old === void 0) {\n return;\n }\n }\n if (bgColor !== void 0 && bgColor !== null) {\n if (typeof bgColor === \"object\") {\n let [key, value] = Object.entries(bgColor)[0];\n old[key] = value;\n } else {\n old.bgColor = bgColor;\n }\n }\n if (fontColor !== void 0 && fontColor !== null) {\n if (typeof fontColor === \"object\") {\n let [key, value] = Object.entries(fontColor)[0];\n old[key] = value;\n } else {\n old.fontColor = fontColor;\n }\n }\n if (borderColor !== void 0 && borderColor !== null) {\n if (typeof borderColor === \"object\") {\n let [key, value] = Object.entries(borderColor)[0];\n old[key] = value;\n } else {\n old.borderColor = borderColor;\n }\n }\n if (shadowing !== void 0 && shadowing !== null) {\n if (typeof shadowing === \"object\") {\n let [key, value] = Object.entries(shadowing)[0];\n old[key] = value;\n } else {\n old.shadowing = shadowing;\n }\n }\n if (shape !== void 0 && shape !== null) {\n if (typeof shape === \"object\") {\n let [key, value] = Object.entries(shape)[0];\n old[key] = value;\n } else {\n old.shape = shape;\n }\n }\n if (sprite !== void 0 && sprite !== null) {\n if (typeof sprite === \"object\") {\n let [key, value] = Object.entries(sprite)[0];\n old[key] = value;\n } else {\n old.sprite = sprite;\n }\n }\n if (techn !== void 0 && techn !== null) {\n if (typeof techn === \"object\") {\n let [key, value] = Object.entries(techn)[0];\n old[key] = value;\n } else {\n old.techn = techn;\n }\n }\n if (legendText !== void 0 && legendText !== null) {\n if (typeof legendText === \"object\") {\n let [key, value] = Object.entries(legendText)[0];\n old[key] = value;\n } else {\n old.legendText = legendText;\n }\n }\n if (legendSprite !== void 0 && legendSprite !== null) {\n if (typeof legendSprite === \"object\") {\n let [key, value] = Object.entries(legendSprite)[0];\n old[key] = value;\n } else {\n old.legendSprite = legendSprite;\n }\n }\n};\nconst updateRelStyle = function(typeC4Shape, from, to, textColor, lineColor, offsetX, offsetY) {\n const old = rels.find((rel) => rel.from === from && rel.to === to);\n if (old === void 0) {\n return;\n }\n if (textColor !== void 0 && textColor !== null) {\n if (typeof textColor === \"object\") {\n let [key, value] = Object.entries(textColor)[0];\n old[key] = value;\n } else {\n old.textColor = textColor;\n }\n }\n if (lineColor !== void 0 && lineColor !== null) {\n if (typeof lineColor === \"object\") {\n let [key, value] = Object.entries(lineColor)[0];\n old[key] = value;\n } else {\n old.lineColor = lineColor;\n }\n }\n if (offsetX !== void 0 && offsetX !== null) {\n if (typeof offsetX === \"object\") {\n let [key, value] = Object.entries(offsetX)[0];\n old[key] = parseInt(value);\n } else {\n old.offsetX = parseInt(offsetX);\n }\n }\n if (offsetY !== void 0 && offsetY !== null) {\n if (typeof offsetY === \"object\") {\n let [key, value] = Object.entries(offsetY)[0];\n old[key] = parseInt(value);\n } else {\n old.offsetY = parseInt(offsetY);\n }\n }\n};\nconst updateLayoutConfig = function(typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) {\n let c4ShapeInRowValue = c4ShapeInRow$1;\n let c4BoundaryInRowValue = c4BoundaryInRow$1;\n if (typeof c4ShapeInRowParam === \"object\") {\n const value = Object.values(c4ShapeInRowParam)[0];\n c4ShapeInRowValue = parseInt(value);\n } else {\n c4ShapeInRowValue = parseInt(c4ShapeInRowParam);\n }\n if (typeof c4BoundaryInRowParam === \"object\") {\n const value = Object.values(c4BoundaryInRowParam)[0];\n c4BoundaryInRowValue = parseInt(value);\n } else {\n c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam);\n }\n if (c4ShapeInRowValue >= 1) {\n c4ShapeInRow$1 = c4ShapeInRowValue;\n }\n if (c4BoundaryInRowValue >= 1) {\n c4BoundaryInRow$1 = c4BoundaryInRowValue;\n }\n};\nconst getC4ShapeInRow = function() {\n return c4ShapeInRow$1;\n};\nconst getC4BoundaryInRow = function() {\n return c4BoundaryInRow$1;\n};\nconst getCurrentBoundaryParse = function() {\n return currentBoundaryParse;\n};\nconst getParentBoundaryParse = function() {\n return parentBoundaryParse;\n};\nconst getC4ShapeArray = function(parentBoundary) {\n if (parentBoundary === void 0 || parentBoundary === null) {\n return c4ShapeArray;\n } else {\n return c4ShapeArray.filter((personOrSystem) => {\n return personOrSystem.parentBoundary === parentBoundary;\n });\n }\n};\nconst getC4Shape = function(alias) {\n return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias);\n};\nconst getC4ShapeKeys = function(parentBoundary) {\n return Object.keys(getC4ShapeArray(parentBoundary));\n};\nconst getBoundaries = function(parentBoundary) {\n if (parentBoundary === void 0 || parentBoundary === null) {\n return boundaries;\n } else {\n return boundaries.filter((boundary) => boundary.parentBoundary === parentBoundary);\n }\n};\nconst getBoundarys = getBoundaries;\nconst getRels = function() {\n return rels;\n};\nconst getTitle = function() {\n return title;\n};\nconst setWrap = function(wrapSetting) {\n wrapEnabled = wrapSetting;\n};\nconst autoWrap = function() {\n return wrapEnabled;\n};\nconst clear = function() {\n c4ShapeArray = [];\n boundaries = [\n {\n alias: \"global\",\n label: { text: \"global\" },\n type: { text: \"global\" },\n tags: null,\n link: null,\n parentBoundary: \"\"\n }\n ];\n parentBoundaryParse = \"\";\n currentBoundaryParse = \"global\";\n boundaryParseStack = [\"\"];\n rels = [];\n boundaryParseStack = [\"\"];\n title = \"\";\n wrapEnabled = false;\n c4ShapeInRow$1 = 4;\n c4BoundaryInRow$1 = 2;\n};\nconst LINETYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21,\n RECT_START: 22,\n RECT_END: 23,\n SOLID_POINT: 24,\n DOTTED_POINT: 25\n};\nconst ARROWTYPE = {\n FILLED: 0,\n OPEN: 1\n};\nconst PLACEMENT = {\n LEFTOF: 0,\n RIGHTOF: 1,\n OVER: 2\n};\nconst setTitle = function(txt) {\n let sanitizedText = sanitizeText(txt, getConfig());\n title = sanitizedText;\n};\nconst db = {\n addPersonOrSystem,\n addPersonOrSystemBoundary,\n addContainer,\n addContainerBoundary,\n addComponent,\n addDeploymentNode,\n popBoundaryParseStack,\n addRel,\n updateElStyle,\n updateRelStyle,\n updateLayoutConfig,\n autoWrap,\n setWrap,\n getC4ShapeArray,\n getC4Shape,\n getC4ShapeKeys,\n getBoundaries,\n getBoundarys,\n getCurrentBoundaryParse,\n getParentBoundaryParse,\n getRels,\n getTitle,\n getC4Type,\n getC4ShapeInRow,\n getC4BoundaryInRow,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n getConfig: () => getConfig().c4,\n clear,\n LINETYPE,\n ARROWTYPE,\n PLACEMENT,\n setTitle,\n setC4Type\n // apply,\n};\nconst drawRect = function(elem, rectData) {\n return drawRect$1(elem, rectData);\n};\nconst drawImage = function(elem, width, height, x, y, link) {\n const imageElem = elem.append(\"image\");\n imageElem.attr(\"width\", width);\n imageElem.attr(\"height\", height);\n imageElem.attr(\"x\", x);\n imageElem.attr(\"y\", y);\n let sanitizedLink = link.startsWith(\"data:image/png;base64\") ? link : sanitizeUrl(link);\n imageElem.attr(\"xlink:href\", sanitizedLink);\n};\nconst drawRels$1 = (elem, rels2, conf2) => {\n const relsElem = elem.append(\"g\");\n let i = 0;\n for (let rel of rels2) {\n let textColor = rel.textColor ? rel.textColor : \"#444444\";\n let strokeColor = rel.lineColor ? rel.lineColor : \"#444444\";\n let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0;\n let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0;\n let url = \"\";\n if (i === 0) {\n let line = relsElem.append(\"line\");\n line.attr(\"x1\", rel.startPoint.x);\n line.attr(\"y1\", rel.startPoint.y);\n line.attr(\"x2\", rel.endPoint.x);\n line.attr(\"y2\", rel.endPoint.y);\n line.attr(\"stroke-width\", \"1\");\n line.attr(\"stroke\", strokeColor);\n line.style(\"fill\", \"none\");\n if (rel.type !== \"rel_b\") {\n line.attr(\"marker-end\", \"url(\" + url + \"#arrowhead)\");\n }\n if (rel.type === \"birel\" || rel.type === \"rel_b\") {\n line.attr(\"marker-start\", \"url(\" + url + \"#arrowend)\");\n }\n i = -1;\n } else {\n let line = relsElem.append(\"path\");\n line.attr(\"fill\", \"none\").attr(\"stroke-width\", \"1\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,starty Qcontrolx,controly stopx,stopy \".replaceAll(\"startx\", rel.startPoint.x).replaceAll(\"starty\", rel.startPoint.y).replaceAll(\n \"controlx\",\n rel.startPoint.x + (rel.endPoint.x - rel.startPoint.x) / 2 - (rel.endPoint.x - rel.startPoint.x) / 4\n ).replaceAll(\"controly\", rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2).replaceAll(\"stopx\", rel.endPoint.x).replaceAll(\"stopy\", rel.endPoint.y)\n );\n if (rel.type !== \"rel_b\") {\n line.attr(\"marker-end\", \"url(\" + url + \"#arrowhead)\");\n }\n if (rel.type === \"birel\" || rel.type === \"rel_b\") {\n line.attr(\"marker-start\", \"url(\" + url + \"#arrowend)\");\n }\n }\n let messageConf = conf2.messageFont();\n _drawTextCandidateFunc(conf2)(\n rel.label.text,\n relsElem,\n Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX,\n Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + offsetY,\n rel.label.width,\n rel.label.height,\n { fill: textColor },\n messageConf\n );\n if (rel.techn && rel.techn.text !== \"\") {\n messageConf = conf2.messageFont();\n _drawTextCandidateFunc(conf2)(\n \"[\" + rel.techn.text + \"]\",\n relsElem,\n Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX,\n Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + conf2.messageFontSize + 5 + offsetY,\n Math.max(rel.label.width, rel.techn.width),\n rel.techn.height,\n { fill: textColor, \"font-style\": \"italic\" },\n messageConf\n );\n }\n }\n};\nconst drawBoundary$1 = function(elem, boundary, conf2) {\n const boundaryElem = elem.append(\"g\");\n let fillColor = boundary.bgColor ? boundary.bgColor : \"none\";\n let strokeColor = boundary.borderColor ? boundary.borderColor : \"#444444\";\n let fontColor = boundary.fontColor ? boundary.fontColor : \"black\";\n let attrsValue = { \"stroke-width\": 1, \"stroke-dasharray\": \"7.0,7.0\" };\n if (boundary.nodeType) {\n attrsValue = { \"stroke-width\": 1 };\n }\n let rectData = {\n x: boundary.x,\n y: boundary.y,\n fill: fillColor,\n stroke: strokeColor,\n width: boundary.width,\n height: boundary.height,\n rx: 2.5,\n ry: 2.5,\n attrs: attrsValue\n };\n drawRect(boundaryElem, rectData);\n let boundaryConf = conf2.boundaryFont();\n boundaryConf.fontWeight = \"bold\";\n boundaryConf.fontSize = boundaryConf.fontSize + 2;\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.label.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.label.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n if (boundary.type && boundary.type.text !== \"\") {\n boundaryConf = conf2.boundaryFont();\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.type.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.type.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n }\n if (boundary.descr && boundary.descr.text !== \"\") {\n boundaryConf = conf2.boundaryFont();\n boundaryConf.fontSize = boundaryConf.fontSize - 2;\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n boundary.descr.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.descr.Y,\n boundary.width,\n boundary.height,\n { fill: \"#444444\" },\n boundaryConf\n );\n }\n};\nconst drawC4Shape = function(elem, c4Shape, conf2) {\n var _a;\n let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf2[c4Shape.typeC4Shape.text + \"_bg_color\"];\n let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf2[c4Shape.typeC4Shape.text + \"_border_color\"];\n let fontColor = c4Shape.fontColor ? c4Shape.fontColor : \"#FFFFFF\";\n let personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=\";\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=\";\n break;\n case \"external_person\":\n personImg = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=\";\n break;\n }\n const c4ShapeElem = elem.append(\"g\");\n c4ShapeElem.attr(\"class\", \"person-man\");\n const rect = getNoteRect();\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n case \"system\":\n case \"external_system\":\n case \"container\":\n case \"external_container\":\n case \"component\":\n case \"external_component\":\n rect.x = c4Shape.x;\n rect.y = c4Shape.y;\n rect.fill = fillColor;\n rect.width = c4Shape.width;\n rect.height = c4Shape.height;\n rect.stroke = strokeColor;\n rect.rx = 2.5;\n rect.ry = 2.5;\n rect.attrs = { \"stroke-width\": 0.5 };\n drawRect(c4ShapeElem, rect);\n break;\n case \"system_db\":\n case \"external_system_db\":\n case \"container_db\":\n case \"external_container_db\":\n case \"component_db\":\n case \"external_component_db\":\n c4ShapeElem.append(\"path\").attr(\"fill\", fillColor).attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.width / 2).replaceAll(\"height\", c4Shape.height)\n );\n c4ShapeElem.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.width / 2)\n );\n break;\n case \"system_queue\":\n case \"external_system_queue\":\n case \"container_queue\":\n case \"external_container_queue\":\n case \"component_queue\":\n case \"external_component_queue\":\n c4ShapeElem.append(\"path\").attr(\"fill\", fillColor).attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half\".replaceAll(\"startx\", c4Shape.x).replaceAll(\"starty\", c4Shape.y).replaceAll(\"width\", c4Shape.width).replaceAll(\"half\", c4Shape.height / 2)\n );\n c4ShapeElem.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke-width\", \"0.5\").attr(\"stroke\", strokeColor).attr(\n \"d\",\n \"Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half\".replaceAll(\"startx\", c4Shape.x + c4Shape.width).replaceAll(\"starty\", c4Shape.y).replaceAll(\"half\", c4Shape.height / 2)\n );\n break;\n }\n let c4ShapeFontConf = getC4ShapeFont(conf2, c4Shape.typeC4Shape.text);\n c4ShapeElem.append(\"text\").attr(\"fill\", fontColor).attr(\"font-family\", c4ShapeFontConf.fontFamily).attr(\"font-size\", c4ShapeFontConf.fontSize - 2).attr(\"font-style\", \"italic\").attr(\"lengthAdjust\", \"spacing\").attr(\"textLength\", c4Shape.typeC4Shape.width).attr(\"x\", c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2).attr(\"y\", c4Shape.y + c4Shape.typeC4Shape.Y).text(\"<<\" + c4Shape.typeC4Shape.text + \">>\");\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n drawImage(\n c4ShapeElem,\n 48,\n 48,\n c4Shape.x + c4Shape.width / 2 - 24,\n c4Shape.y + c4Shape.image.Y,\n personImg\n );\n break;\n }\n let textFontConf = conf2[c4Shape.typeC4Shape.text + \"Font\"]();\n textFontConf.fontWeight = \"bold\";\n textFontConf.fontSize = textFontConf.fontSize + 2;\n textFontConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n c4Shape.label.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.label.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor },\n textFontConf\n );\n textFontConf = conf2[c4Shape.typeC4Shape.text + \"Font\"]();\n textFontConf.fontColor = fontColor;\n if (c4Shape.techn && ((_a = c4Shape.techn) == null ? void 0 : _a.text) !== \"\") {\n _drawTextCandidateFunc(conf2)(\n c4Shape.techn.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.techn.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor, \"font-style\": \"italic\" },\n textFontConf\n );\n } else if (c4Shape.type && c4Shape.type.text !== \"\") {\n _drawTextCandidateFunc(conf2)(\n c4Shape.type.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.type.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor, \"font-style\": \"italic\" },\n textFontConf\n );\n }\n if (c4Shape.descr && c4Shape.descr.text !== \"\") {\n textFontConf = conf2.personFont();\n textFontConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf2)(\n c4Shape.descr.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.descr.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor },\n textFontConf\n );\n }\n return c4Shape.height;\n};\nconst insertDatabaseIcon = function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"database\").attr(\"fill-rule\", \"evenodd\").attr(\"clip-rule\", \"evenodd\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"\n );\n};\nconst insertComputerIcon = function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"computer\").attr(\"width\", \"24\").attr(\"height\", \"24\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"\n );\n};\nconst insertClockIcon = function(elem) {\n elem.append(\"defs\").append(\"symbol\").attr(\"id\", \"clock\").attr(\"width\", \"24\").attr(\"height\", \"24\").append(\"path\").attr(\"transform\", \"scale(.5)\").attr(\n \"d\",\n \"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"\n );\n};\nconst insertArrowHead = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"arrowhead\").attr(\"refX\", 9).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\");\n};\nconst insertArrowEnd = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"arrowend\").attr(\"refX\", 1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 10 0 L 0 5 L 10 10 z\");\n};\nconst insertArrowFilledHead = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"filled-head\").attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n};\nconst insertDynamicNumber = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"sequencenumber\").attr(\"refX\", 15).attr(\"refY\", 15).attr(\"markerWidth\", 60).attr(\"markerHeight\", 40).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", 15).attr(\"cy\", 15).attr(\"r\", 6);\n};\nconst insertArrowCrossHead = function(elem) {\n const defs = elem.append(\"defs\");\n const marker = defs.append(\"marker\").attr(\"id\", \"crosshead\").attr(\"markerWidth\", 15).attr(\"markerHeight\", 8).attr(\"orient\", \"auto\").attr(\"refX\", 16).attr(\"refY\", 4);\n marker.append(\"path\").attr(\"fill\", \"black\").attr(\"stroke\", \"#000000\").style(\"stroke-dasharray\", \"0, 0\").attr(\"stroke-width\", \"1px\").attr(\"d\", \"M 9,2 V 6 L16,4 Z\");\n marker.append(\"path\").attr(\"fill\", \"none\").attr(\"stroke\", \"#000000\").style(\"stroke-dasharray\", \"0, 0\").attr(\"stroke-width\", \"1px\").attr(\"d\", \"M 0,1 L 6,7 M 6,1 L 0,7\");\n};\nconst getC4ShapeFont = (cnf, typeC4Shape) => {\n return {\n fontFamily: cnf[typeC4Shape + \"FontFamily\"],\n fontSize: cnf[typeC4Shape + \"FontSize\"],\n fontWeight: cnf[typeC4Shape + \"FontWeight\"]\n };\n};\nconst _drawTextCandidateFunc = function() {\n function byText(content, g, x, y, width, height, textAttrs) {\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y + height / 2 + 5).style(\"text-anchor\", \"middle\").text(content);\n _setTextAttrs(text, textAttrs);\n }\n function byTspan(content, g, x, y, width, height, textAttrs, conf2) {\n const { fontSize, fontFamily, fontWeight } = conf2;\n const lines = content.split(common.lineBreakRegex);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * fontSize - fontSize * (lines.length - 1) / 2;\n const text = g.append(\"text\").attr(\"x\", x + width / 2).attr(\"y\", y).style(\"text-anchor\", \"middle\").attr(\"dominant-baseline\", \"middle\").style(\"font-size\", fontSize).style(\"font-weight\", fontWeight).style(\"font-family\", fontFamily);\n text.append(\"tspan\").attr(\"dy\", dy).text(lines[i]).attr(\"alignment-baseline\", \"mathematical\");\n _setTextAttrs(text, textAttrs);\n }\n }\n function byFo(content, g, x, y, width, height, textAttrs, conf2) {\n const s = g.append(\"switch\");\n const f = s.append(\"foreignObject\").attr(\"x\", x).attr(\"y\", y).attr(\"width\", width).attr(\"height\", height);\n const text = f.append(\"xhtml:div\").style(\"display\", \"table\").style(\"height\", \"100%\").style(\"width\", \"100%\");\n text.append(\"div\").style(\"display\", \"table-cell\").style(\"text-align\", \"center\").style(\"vertical-align\", \"middle\").text(content);\n byTspan(content, s, x, y, width, height, textAttrs, conf2);\n _setTextAttrs(text, textAttrs);\n }\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n return function(conf2) {\n return conf2.textPlacement === \"fo\" ? byFo : conf2.textPlacement === \"old\" ? byText : byTspan;\n };\n}();\nconst svgDraw = {\n drawRect,\n drawBoundary: drawBoundary$1,\n drawC4Shape,\n drawRels: drawRels$1,\n drawImage,\n insertArrowHead,\n insertArrowEnd,\n insertArrowFilledHead,\n insertDynamicNumber,\n insertArrowCrossHead,\n insertDatabaseIcon,\n insertComputerIcon,\n insertClockIcon\n};\nlet globalBoundaryMaxX = 0, globalBoundaryMaxY = 0;\nlet c4ShapeInRow = 4;\nlet c4BoundaryInRow = 2;\nparser.yy = db;\nlet conf = {};\nclass Bounds {\n constructor(diagObj) {\n this.name = \"\";\n this.data = {};\n this.data.startx = void 0;\n this.data.stopx = void 0;\n this.data.starty = void 0;\n this.data.stopy = void 0;\n this.data.widthLimit = void 0;\n this.nextData = {};\n this.nextData.startx = void 0;\n this.nextData.stopx = void 0;\n this.nextData.starty = void 0;\n this.nextData.stopy = void 0;\n this.nextData.cnt = 0;\n setConf(diagObj.db.getConfig());\n }\n setData(startx, stopx, starty, stopy) {\n this.nextData.startx = this.data.startx = startx;\n this.nextData.stopx = this.data.stopx = stopx;\n this.nextData.starty = this.data.starty = starty;\n this.nextData.stopy = this.data.stopy = stopy;\n }\n updateVal(obj, key, val, fun) {\n if (obj[key] === void 0) {\n obj[key] = val;\n } else {\n obj[key] = fun(val, obj[key]);\n }\n }\n insert(c4Shape) {\n this.nextData.cnt = this.nextData.cnt + 1;\n let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2;\n let _stopx = _startx + c4Shape.width;\n let _starty = this.nextData.starty + c4Shape.margin * 2;\n let _stopy = _starty + c4Shape.height;\n if (_startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow) {\n _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX;\n _starty = this.nextData.stopy + c4Shape.margin * 2;\n this.nextData.stopx = _stopx = _startx + c4Shape.width;\n this.nextData.starty = this.nextData.stopy;\n this.nextData.stopy = _stopy = _starty + c4Shape.height;\n this.nextData.cnt = 1;\n }\n c4Shape.x = _startx;\n c4Shape.y = _starty;\n this.updateVal(this.data, \"startx\", _startx, Math.min);\n this.updateVal(this.data, \"starty\", _starty, Math.min);\n this.updateVal(this.data, \"stopx\", _stopx, Math.max);\n this.updateVal(this.data, \"stopy\", _stopy, Math.max);\n this.updateVal(this.nextData, \"startx\", _startx, Math.min);\n this.updateVal(this.nextData, \"starty\", _starty, Math.min);\n this.updateVal(this.nextData, \"stopx\", _stopx, Math.max);\n this.updateVal(this.nextData, \"stopy\", _stopy, Math.max);\n }\n init(diagObj) {\n this.name = \"\";\n this.data = {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0,\n widthLimit: void 0\n };\n this.nextData = {\n startx: void 0,\n stopx: void 0,\n starty: void 0,\n stopy: void 0,\n cnt: 0\n };\n setConf(diagObj.db.getConfig());\n }\n bumpLastMargin(margin) {\n this.data.stopx += margin;\n this.data.stopy += margin;\n }\n}\nconst setConf = function(cnf) {\n assignWithDepth(conf, cnf);\n if (cnf.fontFamily) {\n conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily;\n }\n if (cnf.fontSize) {\n conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize;\n }\n if (cnf.fontWeight) {\n conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight;\n }\n};\nconst c4ShapeFont = (cnf, typeC4Shape) => {\n return {\n fontFamily: cnf[typeC4Shape + \"FontFamily\"],\n fontSize: cnf[typeC4Shape + \"FontSize\"],\n fontWeight: cnf[typeC4Shape + \"FontWeight\"]\n };\n};\nconst boundaryFont = (cnf) => {\n return {\n fontFamily: cnf.boundaryFontFamily,\n fontSize: cnf.boundaryFontSize,\n fontWeight: cnf.boundaryFontWeight\n };\n};\nconst messageFont = (cnf) => {\n return {\n fontFamily: cnf.messageFontFamily,\n fontSize: cnf.messageFontSize,\n fontWeight: cnf.messageFontWeight\n };\n};\nfunction calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) {\n if (!c4Shape[textType].width) {\n if (c4ShapeTextWrap) {\n c4Shape[textType].text = wrapLabel(c4Shape[textType].text, textLimitWidth, textConf);\n c4Shape[textType].textLines = c4Shape[textType].text.split(common.lineBreakRegex).length;\n c4Shape[textType].width = textLimitWidth;\n c4Shape[textType].height = calculateTextHeight(c4Shape[textType].text, textConf);\n } else {\n let lines = c4Shape[textType].text.split(common.lineBreakRegex);\n c4Shape[textType].textLines = lines.length;\n let lineHeight = 0;\n c4Shape[textType].height = 0;\n c4Shape[textType].width = 0;\n for (const line of lines) {\n c4Shape[textType].width = Math.max(\n calculateTextWidth(line, textConf),\n c4Shape[textType].width\n );\n lineHeight = calculateTextHeight(line, textConf);\n c4Shape[textType].height = c4Shape[textType].height + lineHeight;\n }\n }\n }\n}\nconst drawBoundary = function(diagram2, boundary, bounds) {\n boundary.x = bounds.data.startx;\n boundary.y = bounds.data.starty;\n boundary.width = bounds.data.stopx - bounds.data.startx;\n boundary.height = bounds.data.stopy - bounds.data.starty;\n boundary.label.y = conf.c4ShapeMargin - 35;\n let boundaryTextWrap = boundary.wrap && conf.wrap;\n let boundaryLabelConf = boundaryFont(conf);\n boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2;\n boundaryLabelConf.fontWeight = \"bold\";\n let textLimitWidth = calculateTextWidth(boundary.label.text, boundaryLabelConf);\n calcC4ShapeTextWH(\"label\", boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth);\n svgDraw.drawBoundary(diagram2, boundary, conf);\n};\nconst drawC4ShapeArray = function(currentBounds, diagram2, c4ShapeArray2, c4ShapeKeys) {\n let Y = 0;\n for (const c4ShapeKey of c4ShapeKeys) {\n Y = 0;\n const c4Shape = c4ShapeArray2[c4ShapeKey];\n let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2;\n c4Shape.typeC4Shape.width = calculateTextWidth(\n \"\u00AB\" + c4Shape.typeC4Shape.text + \"\u00BB\",\n c4ShapeTypeConf\n );\n c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2;\n c4Shape.typeC4Shape.Y = conf.c4ShapePadding;\n Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4;\n c4Shape.image = { width: 0, height: 0, Y: 0 };\n switch (c4Shape.typeC4Shape.text) {\n case \"person\":\n case \"external_person\":\n c4Shape.image.width = 48;\n c4Shape.image.height = 48;\n c4Shape.image.Y = Y;\n Y = c4Shape.image.Y + c4Shape.image.height;\n break;\n }\n if (c4Shape.sprite) {\n c4Shape.image.width = 48;\n c4Shape.image.height = 48;\n c4Shape.image.Y = Y;\n Y = c4Shape.image.Y + c4Shape.image.height;\n }\n let c4ShapeTextWrap = c4Shape.wrap && conf.wrap;\n let textLimitWidth = conf.width - conf.c4ShapePadding * 2;\n let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2;\n c4ShapeLabelConf.fontWeight = \"bold\";\n calcC4ShapeTextWH(\"label\", c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth);\n c4Shape[\"label\"].Y = Y + 8;\n Y = c4Shape[\"label\"].Y + c4Shape[\"label\"].height;\n if (c4Shape.type && c4Shape.type.text !== \"\") {\n c4Shape.type.text = \"[\" + c4Shape.type.text + \"]\";\n let c4ShapeTypeConf2 = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n calcC4ShapeTextWH(\"type\", c4Shape, c4ShapeTextWrap, c4ShapeTypeConf2, textLimitWidth);\n c4Shape[\"type\"].Y = Y + 5;\n Y = c4Shape[\"type\"].Y + c4Shape[\"type\"].height;\n } else if (c4Shape.techn && c4Shape.techn.text !== \"\") {\n c4Shape.techn.text = \"[\" + c4Shape.techn.text + \"]\";\n let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text);\n calcC4ShapeTextWH(\"techn\", c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth);\n c4Shape[\"techn\"].Y = Y + 5;\n Y = c4Shape[\"techn\"].Y + c4Shape[\"techn\"].height;\n }\n let rectHeight = Y;\n let rectWidth = c4Shape.label.width;\n if (c4Shape.descr && c4Shape.descr.text !== \"\") {\n let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n calcC4ShapeTextWH(\"descr\", c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth);\n c4Shape[\"descr\"].Y = Y + 20;\n Y = c4Shape[\"descr\"].Y + c4Shape[\"descr\"].height;\n rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width);\n rectHeight = Y - c4Shape[\"descr\"].textLines * 5;\n }\n rectWidth = rectWidth + conf.c4ShapePadding;\n c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width);\n c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height);\n c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin;\n currentBounds.insert(c4Shape);\n svgDraw.drawC4Shape(diagram2, c4Shape, conf);\n }\n currentBounds.bumpLastMargin(conf.c4ShapeMargin);\n};\nclass Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n}\nlet getIntersectPoint = function(fromNode, endPoint) {\n let x1 = fromNode.x;\n let y1 = fromNode.y;\n let x2 = endPoint.x;\n let y2 = endPoint.y;\n let fromCenterX = x1 + fromNode.width / 2;\n let fromCenterY = y1 + fromNode.height / 2;\n let dx = Math.abs(x1 - x2);\n let dy = Math.abs(y1 - y2);\n let tanDYX = dy / dx;\n let fromDYX = fromNode.height / fromNode.width;\n let returnPoint = null;\n if (y1 == y2 && x1 < x2) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY);\n } else if (y1 == y2 && x1 > x2) {\n returnPoint = new Point(x1, fromCenterY);\n } else if (x1 == x2 && y1 < y2) {\n returnPoint = new Point(fromCenterX, y1 + fromNode.height);\n } else if (x1 == x2 && y1 > y2) {\n returnPoint = new Point(fromCenterX, y1);\n }\n if (x1 > x2 && y1 < y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1, fromCenterY + tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(\n fromCenterX - dx / dy * fromNode.height / 2,\n y1 + fromNode.height\n );\n }\n } else if (x1 < x2 && y1 < y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY + tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(\n fromCenterX + dx / dy * fromNode.height / 2,\n y1 + fromNode.height\n );\n }\n } else if (x1 < x2 && y1 > y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY - tanDYX * fromNode.width / 2);\n } else {\n returnPoint = new Point(fromCenterX + fromNode.height / 2 * dx / dy, y1);\n }\n } else if (x1 > x2 && y1 > y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1, fromCenterY - fromNode.width / 2 * tanDYX);\n } else {\n returnPoint = new Point(fromCenterX - fromNode.height / 2 * dx / dy, y1);\n }\n }\n return returnPoint;\n};\nlet getIntersectPoints = function(fromNode, endNode) {\n let endIntersectPoint = { x: 0, y: 0 };\n endIntersectPoint.x = endNode.x + endNode.width / 2;\n endIntersectPoint.y = endNode.y + endNode.height / 2;\n let startPoint = getIntersectPoint(fromNode, endIntersectPoint);\n endIntersectPoint.x = fromNode.x + fromNode.width / 2;\n endIntersectPoint.y = fromNode.y + fromNode.height / 2;\n let endPoint = getIntersectPoint(endNode, endIntersectPoint);\n return { startPoint, endPoint };\n};\nconst drawRels = function(diagram2, rels2, getC4ShapeObj, diagObj) {\n let i = 0;\n for (let rel of rels2) {\n i = i + 1;\n let relTextWrap = rel.wrap && conf.wrap;\n let relConf = messageFont(conf);\n let diagramType = diagObj.db.getC4Type();\n if (diagramType === \"C4Dynamic\") {\n rel.label.text = i + \": \" + rel.label.text;\n }\n let textLimitWidth = calculateTextWidth(rel.label.text, relConf);\n calcC4ShapeTextWH(\"label\", rel, relTextWrap, relConf, textLimitWidth);\n if (rel.techn && rel.techn.text !== \"\") {\n textLimitWidth = calculateTextWidth(rel.techn.text, relConf);\n calcC4ShapeTextWH(\"techn\", rel, relTextWrap, relConf, textLimitWidth);\n }\n if (rel.descr && rel.descr.text !== \"\") {\n textLimitWidth = calculateTextWidth(rel.descr.text, relConf);\n calcC4ShapeTextWH(\"descr\", rel, relTextWrap, relConf, textLimitWidth);\n }\n let fromNode = getC4ShapeObj(rel.from);\n let endNode = getC4ShapeObj(rel.to);\n let points = getIntersectPoints(fromNode, endNode);\n rel.startPoint = points.startPoint;\n rel.endPoint = points.endPoint;\n }\n svgDraw.drawRels(diagram2, rels2, conf);\n};\nfunction drawInsideBoundary(diagram2, parentBoundaryAlias, parentBounds, currentBoundaries, diagObj) {\n let currentBounds = new Bounds(diagObj);\n currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow, currentBoundaries.length);\n for (let [i, currentBoundary] of currentBoundaries.entries()) {\n let Y = 0;\n currentBoundary.image = { width: 0, height: 0, Y: 0 };\n if (currentBoundary.sprite) {\n currentBoundary.image.width = 48;\n currentBoundary.image.height = 48;\n currentBoundary.image.Y = Y;\n Y = currentBoundary.image.Y + currentBoundary.image.height;\n }\n let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap;\n let currentBoundaryLabelConf = boundaryFont(conf);\n currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2;\n currentBoundaryLabelConf.fontWeight = \"bold\";\n calcC4ShapeTextWH(\n \"label\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryLabelConf,\n currentBounds.data.widthLimit\n );\n currentBoundary[\"label\"].Y = Y + 8;\n Y = currentBoundary[\"label\"].Y + currentBoundary[\"label\"].height;\n if (currentBoundary.type && currentBoundary.type.text !== \"\") {\n currentBoundary.type.text = \"[\" + currentBoundary.type.text + \"]\";\n let currentBoundaryTypeConf = boundaryFont(conf);\n calcC4ShapeTextWH(\n \"type\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryTypeConf,\n currentBounds.data.widthLimit\n );\n currentBoundary[\"type\"].Y = Y + 5;\n Y = currentBoundary[\"type\"].Y + currentBoundary[\"type\"].height;\n }\n if (currentBoundary.descr && currentBoundary.descr.text !== \"\") {\n let currentBoundaryDescrConf = boundaryFont(conf);\n currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2;\n calcC4ShapeTextWH(\n \"descr\",\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryDescrConf,\n currentBounds.data.widthLimit\n );\n currentBoundary[\"descr\"].Y = Y + 20;\n Y = currentBoundary[\"descr\"].Y + currentBoundary[\"descr\"].height;\n }\n if (i == 0 || i % c4BoundaryInRow === 0) {\n let _x = parentBounds.data.startx + conf.diagramMarginX;\n let _y = parentBounds.data.stopy + conf.diagramMarginY + Y;\n currentBounds.setData(_x, _x, _y, _y);\n } else {\n let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf.diagramMarginX : currentBounds.data.startx;\n let _y = currentBounds.data.starty;\n currentBounds.setData(_x, _x, _y, _y);\n }\n currentBounds.name = currentBoundary.alias;\n let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias);\n let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias);\n if (currentPersonOrSystemKeys.length > 0) {\n drawC4ShapeArray(\n currentBounds,\n diagram2,\n currentPersonOrSystemArray,\n currentPersonOrSystemKeys\n );\n }\n parentBoundaryAlias = currentBoundary.alias;\n let nextCurrentBoundaries = diagObj.db.getBoundarys(parentBoundaryAlias);\n if (nextCurrentBoundaries.length > 0) {\n drawInsideBoundary(\n diagram2,\n parentBoundaryAlias,\n currentBounds,\n nextCurrentBoundaries,\n diagObj\n );\n }\n if (currentBoundary.alias !== \"global\") {\n drawBoundary(diagram2, currentBoundary, currentBounds);\n }\n parentBounds.data.stopy = Math.max(\n currentBounds.data.stopy + conf.c4ShapeMargin,\n parentBounds.data.stopy\n );\n parentBounds.data.stopx = Math.max(\n currentBounds.data.stopx + conf.c4ShapeMargin,\n parentBounds.data.stopx\n );\n globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx);\n globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy);\n }\n}\nconst draw = function(_text, id, _version, diagObj) {\n conf = getConfig().c4;\n const securityLevel = getConfig().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n let db2 = diagObj.db;\n diagObj.db.setWrap(conf.wrap);\n c4ShapeInRow = db2.getC4ShapeInRow();\n c4BoundaryInRow = db2.getC4BoundaryInRow();\n log.debug(`C:${JSON.stringify(conf, null, 2)}`);\n const diagram2 = securityLevel === \"sandbox\" ? root.select(`[id=\"${id}\"]`) : select(`[id=\"${id}\"]`);\n svgDraw.insertComputerIcon(diagram2);\n svgDraw.insertDatabaseIcon(diagram2);\n svgDraw.insertClockIcon(diagram2);\n let screenBounds = new Bounds(diagObj);\n screenBounds.setData(\n conf.diagramMarginX,\n conf.diagramMarginX,\n conf.diagramMarginY,\n conf.diagramMarginY\n );\n screenBounds.data.widthLimit = screen.availWidth;\n globalBoundaryMaxX = conf.diagramMarginX;\n globalBoundaryMaxY = conf.diagramMarginY;\n const title2 = diagObj.db.getTitle();\n let currentBoundaries = diagObj.db.getBoundarys(\"\");\n drawInsideBoundary(diagram2, \"\", screenBounds, currentBoundaries, diagObj);\n svgDraw.insertArrowHead(diagram2);\n svgDraw.insertArrowEnd(diagram2);\n svgDraw.insertArrowCrossHead(diagram2);\n svgDraw.insertArrowFilledHead(diagram2);\n drawRels(diagram2, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj);\n screenBounds.data.stopx = globalBoundaryMaxX;\n screenBounds.data.stopy = globalBoundaryMaxY;\n const box = screenBounds.data;\n let boxHeight = box.stopy - box.starty;\n let height = boxHeight + 2 * conf.diagramMarginY;\n let boxWidth = box.stopx - box.startx;\n const width = boxWidth + 2 * conf.diagramMarginX;\n if (title2) {\n diagram2.append(\"text\").text(title2).attr(\"x\", (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX).attr(\"y\", box.starty + conf.diagramMarginY);\n }\n configureSvgSize(diagram2, height, width, conf.useMaxWidth);\n const extraVertForTitle = title2 ? 60 : 0;\n diagram2.attr(\n \"viewBox\",\n box.startx - conf.diagramMarginX + \" -\" + (conf.diagramMarginY + extraVertForTitle) + \" \" + width + \" \" + (height + extraVertForTitle)\n );\n log.debug(`models:`, box);\n};\nconst renderer = {\n drawPersonOrSystemArray: drawC4ShapeArray,\n drawBoundary,\n setConf,\n draw\n};\nconst getStyles = (options) => `.person {\n stroke: ${options.personBorder};\n fill: ${options.personBkg};\n }\n`;\nconst styles = getStyles;\nconst diagram = {\n parser: parser$1,\n db,\n renderer,\n styles,\n init: ({ c4, wrap }) => {\n renderer.setConf(c4);\n db.setWrap(wrap);\n }\n};\nexport {\n diagram\n};\n"], + "mappings": "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AAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAI,EAAG,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAI,EAAG,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAI,EAAG,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,GAAK,GAAIC,EAAI,EAAG,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI1C,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,GAAI,GAAI,GAAIC,EAAK,GAAIC,EAAK,GAAIC,EAAK,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", + "names": ["import_sanitize_url", "import_dayjs", "import_dompurify", "parser", "o", "k", "v", "o2", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "$VG", "$VH", "$VI", "$VJ", "$VK", "$VL", "$VM", "$VN", "$VO", "$VP", "$VQ", "$VR", "$VS", "parser2", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "kv", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "TERROR", "EOF", "args", "lexer2", "sharedState", "yyloc", "ranges", "lex", "token", "symbol", "state", "action", "r", "yyval", "p", "len", "newState", "expected", "errStr", "lexer", "ch", "lines", "oldLines", "n", "past", "next", "pre", "c2", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "Parser", "parser$1", "c4ShapeArray", "boundaryParseStack", "currentBoundaryParse", "parentBoundaryParse", "boundaries", "rels", "title", "wrapEnabled", "c4ShapeInRow$1", "c4BoundaryInRow$1", "c4Type", "getC4Type", "setC4Type", "c4TypeParam", "sanitizeText$2", "getConfig", "addRel", "type", "from", "to", "label", "techn", "descr", "sprite", "tags", "link", "rel", "old", "rel2", "key", "value", "autoWrap", "addPersonOrSystem", "typeC4Shape", "alias", "personOrSystem", "personOrSystem2", "addContainer", "container", "container2", "addComponent", "component", "component2", "addPersonOrSystemBoundary", "boundary", "boundary2", "addContainerBoundary", "addDeploymentNode", "nodeType", "popBoundaryParseStack", "updateElStyle", "elementName", "bgColor", "fontColor", "borderColor", "shadowing", "shape", "legendText", "legendSprite", "element", "updateRelStyle", "textColor", "lineColor", "offsetX", "offsetY", "updateLayoutConfig", "c4ShapeInRowParam", "c4BoundaryInRowParam", "c4ShapeInRowValue", "c4BoundaryInRowValue", "getC4ShapeInRow", "getC4BoundaryInRow", "getCurrentBoundaryParse", "getParentBoundaryParse", "getC4ShapeArray", "parentBoundary", "getC4Shape", "getC4ShapeKeys", "getBoundaries", "getBoundarys", "getRels", "getTitle", "setWrap", "wrapSetting", "clear", "LINETYPE", "ARROWTYPE", "PLACEMENT", "setTitle", "txt", "db", "setAccTitle", "getAccTitle", "getAccDescription", "setAccDescription", "drawRect", "elem", "rectData", "drawImage", "width", "height", "x", "y", "imageElem", "sanitizedLink", "drawRels$1", "rels2", "conf2", "relsElem", "strokeColor", "url", "line", "messageConf", "_drawTextCandidateFunc", "drawBoundary$1", "boundaryElem", "fillColor", "attrsValue", "boundaryConf", "drawC4Shape", "c4Shape", "_a", "personImg", "c4ShapeElem", "rect", "getNoteRect", "c4ShapeFontConf", "getC4ShapeFont", "textFontConf", "insertDatabaseIcon", "insertComputerIcon", "insertClockIcon", "insertArrowHead", "insertArrowEnd", "insertArrowFilledHead", "insertDynamicNumber", "insertArrowCrossHead", "marker", "cnf", "byText", "content", "g", "textAttrs", "text", "_setTextAttrs", "byTspan", "fontSize", "fontFamily", "fontWeight", "common$1", "dy", "byFo", "s", "toText", "fromTextAttrsDict", "svgDraw", "globalBoundaryMaxX", "globalBoundaryMaxY", "c4ShapeInRow", "c4BoundaryInRow", "conf", "Bounds", "diagObj", "setConf", "startx", "stopx", "starty", "stopy", "obj", "val", "fun", "_startx", "_stopx", "_starty", "_stopy", "margin", "assignWithDepth$1", "c4ShapeFont", "boundaryFont", "messageFont", "calcC4ShapeTextWH", "textType", "c4ShapeTextWrap", "textConf", "textLimitWidth", "wrapLabel", "calculateTextHeight", "lineHeight", "calculateTextWidth", "drawBoundary", "diagram2", "bounds", "boundaryTextWrap", "boundaryLabelConf", "drawC4ShapeArray", "currentBounds", "c4ShapeArray2", "c4ShapeKeys", "Y", "c4ShapeKey", "c4ShapeTypeConf", "c4ShapeLabelConf", "c4ShapeTypeConf2", "c4ShapeTechnConf", "rectHeight", "rectWidth", "c4ShapeDescrConf", "Point", "getIntersectPoint", "fromNode", "endPoint", "x1", "y1", "x2", "y2", "fromCenterX", "fromCenterY", "dx", "tanDYX", "fromDYX", "returnPoint", "getIntersectPoints", "endNode", "endIntersectPoint", "startPoint", "drawRels", "getC4ShapeObj", "relTextWrap", "relConf", "points", "drawInsideBoundary", "parentBoundaryAlias", "parentBounds", "currentBoundaries", "currentBoundary", "currentBoundaryTextWrap", "currentBoundaryLabelConf", "currentBoundaryTypeConf", "currentBoundaryDescrConf", "_x", "_y", "currentPersonOrSystemArray", "currentPersonOrSystemKeys", "nextCurrentBoundaries", "draw", "_text", "id", "_version", "securityLevel", "sandboxElement", "select_default", "root", "db2", "log$1", "screenBounds", "title2", "box", "configureSvgSize", "extraVertForTitle", "renderer", "getStyles", "options", "styles", "diagram", "c4", "wrap"] +} diff --git a/public/chunk-5FWMXAFW.min.js b/public/chunk-5FWMXAFW.min.js new file mode 100644 index 000000000..ef23d8959 --- /dev/null +++ b/public/chunk-5FWMXAFW.min.js @@ -0,0 +1,2 @@ +import{a as $,b as P,d as F,e as N,f as M,g as U,h as j,i as R,j as S,m as A,n as H,o as V,p as W}from"./chunk-N4EFGQ5G.min.js";import{b as G}from"./chunk-LXB37CFX.min.js";import{a as k}from"./chunk-RNO6SWHZ.min.js";import{A as L,b as _,j as O,o as p}from"./chunk-K2MRC2FE.min.js";import{Ga as s,Ja as C,h as T,nb as B}from"./chunk-YEACHCAA.min.js";function m(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:tt(e),edges:et(e)};return p(e.graph())||(t.value=_(e.graph())),t}function tt(e){return O(e.nodes(),function(t){var n=e.node(t),r=e.parent(t),i={v:t};return p(n)||(i.value=n),p(r)||(i.parent=r),i})}function et(e){return O(e.edges(),function(t){var n=e.edge(t),r={v:t.v,w:t.w};return p(t.name)||(r.name=t.name),p(n)||(r.value=n),r})}var l={},g={},q={},it=()=>{g={},q={},l={}},J=(e,t)=>(s.trace("In isDescendant",t," ",e," = ",g[t].includes(e)),!!g[t].includes(e)),st=(e,t)=>(s.info("Descendants of ",t," is ",g[t]),s.info("Edge is ",e),e.v===t||e.w===t?!1:g[t]?g[t].includes(e.v)||J(e.v,t)||J(e.w,t)||g[t].includes(e.w):(s.debug("Tilt, ",t,",not in descendants"),!1)),z=(e,t,n,r)=>{s.warn("Copying children of ",e,"root",r,"data",t.node(e),r);let i=t.children(e)||[];e!==r&&i.push(e),s.warn("Copying (nodes) clusterId",e,"nodes",i),i.forEach(a=>{if(t.children(a).length>0)z(a,t,n,r);else{let d=t.node(a);s.info("cp ",a," to ",r," with parent ",e),n.setNode(a,d),r!==t.parent(a)&&(s.warn("Setting parent",a,t.parent(a)),n.setParent(a,t.parent(a))),e!==r&&a!==e?(s.debug("Setting parent",a,e),n.setParent(a,e)):(s.info("In copy ",e,"root",r,"data",t.node(e),r),s.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==r,"node!==clusterId",a!==e));let h=t.edges(a);s.debug("Copying Edges",h),h.forEach(f=>{s.info("Edge",f);let u=t.edge(f.v,f.w,f.name);s.info("Edge data",u,r);try{st(f,r)?(s.info("Copying as ",f.v,f.w,u,f.name),n.setEdge(f.v,f.w,u,f.name),s.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):s.info("Skipping copy of edge ",f.v,"-->",f.w," rootId: ",r," clusterId:",e)}catch(w){s.error(w)}})}s.debug("Removing node",a),t.removeNode(a)})},K=(e,t)=>{let n=t.children(e),r=[...n];for(let i of n)q[i]=e,r=[...r,...K(i,t)];return r},X=(e,t)=>{s.trace("Searching",e);let n=t.children(e);if(s.trace("Searching children of id ",e,n),n.length<1)return s.trace("This is a valid node",e),e;for(let r of n){let i=X(r,t);if(i)return s.trace("Found replacement for",e," => ",i),i}},D=e=>!l[e]||!l[e].externalConnections?e:l[e]?l[e].id:e,rt=(e,t)=>{if(!e||t>10){s.debug("Opting out, no graph ");return}else s.debug("Opting in, graph ");e.nodes().forEach(function(n){e.children(n).length>0&&(s.warn("Cluster identified",n," Replacement id in edges: ",X(n,e)),g[n]=K(n,e),l[n]={id:X(n,e),clusterData:e.node(n)})}),e.nodes().forEach(function(n){let r=e.children(n),i=e.edges();r.length>0?(s.debug("Cluster identified",n,g),i.forEach(a=>{if(a.v!==n&&a.w!==n){let d=J(a.v,n),h=J(a.w,n);d^h&&(s.warn("Edge: ",a," leaves cluster ",n),s.warn("Descendants of XXX ",n,": ",g[n]),l[n].externalConnections=!0)}})):s.debug("Not a cluster ",n,g)});for(let n of Object.keys(l)){let r=l[n].id,i=e.parent(r);i!==n&&l[i]&&!l[i].externalConnections&&(l[n].id=i)}e.edges().forEach(function(n){let r=e.edge(n);s.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(n)),s.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(e.edge(n)));let i=n.v,a=n.w;if(s.warn("Fix XXX",l,"ids:",n.v,n.w,"Translating: ",l[n.v]," --- ",l[n.w]),l[n.v]&&l[n.w]&&l[n.v]===l[n.w]){s.warn("Fixing and trixing link to self - removing XXX",n.v,n.w,n.name),s.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),i=D(n.v),a=D(n.w),e.removeEdge(n.v,n.w,n.name);let d=n.w+"---"+n.v;e.setNode(d,{domId:d,id:d,labelStyle:"",labelText:r.label,padding:0,shape:"labelRect",style:""});let h=structuredClone(r),f=structuredClone(r);h.label="",h.arrowTypeEnd="none",f.label="",h.fromCluster=n.v,f.toCluster=n.v,e.setEdge(i,d,h,n.name+"-cyclic-special"),e.setEdge(d,a,f,n.name+"-cyclic-special")}else if(l[n.v]||l[n.w]){if(s.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),i=D(n.v),a=D(n.w),e.removeEdge(n.v,n.w,n.name),i!==n.v){let d=e.parent(i);l[d].externalConnections=!0,r.fromCluster=n.v}if(a!==n.w){let d=e.parent(a);l[d].externalConnections=!0,r.toCluster=n.w}s.warn("Fix Replacing with XXX",i,a,n.name),e.setEdge(i,a,r,n.name)}}),s.warn("Adjusted Graph",m(e)),Q(e,0),s.trace(l)},Q=(e,t)=>{if(s.warn("extractor - ",t,m(e),e.children("D")),t>10){s.error("Bailing out");return}let n=e.nodes(),r=!1;for(let i of n){let a=e.children(i);r=r||a.length>0}if(!r){s.debug("Done, no node has children",e.nodes());return}s.debug("Nodes = ",n,t);for(let i of n)if(s.debug("Extracting node",i,l,l[i]&&!l[i].externalConnections,!e.parent(i),e.node(i),e.children("D")," Depth ",t),!l[i])s.debug("Not a cluster",i,t);else if(!l[i].externalConnections&&e.children(i)&&e.children(i).length>0){s.warn("Cluster without external connections, without a parent and with children",i,t);let d=e.graph().rankdir==="TB"?"LR":"TB";l[i]&&l[i].clusterData&&l[i].clusterData.dir&&(d=l[i].clusterData.dir,s.warn("Fixing dir",l[i].clusterData.dir,d));let h=new L({multigraph:!0,compound:!0}).setGraph({rankdir:d,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});s.warn("Old graph before copy",m(e)),z(i,e,h,i),e.setNode(i,{clusterNode:!0,id:i,clusterData:l[i].clusterData,labelText:l[i].labelText,graph:h}),s.warn("New graph after copy node: (",i,")",m(h)),s.debug("Old graph after copy",m(e))}else s.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!l[i].externalConnections," no parent: ",!e.parent(i)," children ",e.children(i)&&e.children(i).length>0,e.children("D"),t),s.debug(l);n=e.nodes(),s.warn("New list of nodes",n);for(let i of n){let a=e.node(i);s.warn(" Now next level",i,a),a.clusterNode&&Q(a.graph,t+1)}},Y=(e,t)=>{if(t.length===0)return[];let n=Object.assign(t);return t.forEach(r=>{let i=e.children(r),a=Y(e,i);n=[...n,...a]}),n},at=e=>Y(e,e.children()),ct=(e,t)=>{s.info("Creating subgraph rect for ",t.id,t);let n=B(),r=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),i=r.insert("rect",":first-child"),a=C(n.flowchart.htmlLabels),d=r.insert("g").attr("class","cluster-label"),h=t.labelType==="markdown"?G(d,t.labelText,{style:t.labelStyle,useHtmlLabels:a}):d.node().appendChild(P(t.labelText,t.labelStyle,void 0,!0)),f=h.getBBox();if(C(n.flowchart.htmlLabels)){let c=h.children[0],o=T(h);f=c.getBoundingClientRect(),o.attr("width",f.width),o.attr("height",f.height)}let u=0*t.padding,w=u/2,b=t.width<=f.width+u?f.width+u:t.width;t.width<=f.width+u?t.diff=(f.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,s.trace("Data ",t,JSON.stringify(t)),i.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-b/2).attr("y",t.y-t.height/2-w).attr("width",b).attr("height",t.height+u);let{subGraphTitleTopMargin:y}=S(n);a?d.attr("transform",`translate(${t.x-f.width/2}, ${t.y-t.height/2+y})`):d.attr("transform",`translate(${t.x}, ${t.y-t.height/2+y})`);let v=i.node().getBBox();return t.width=v.width,t.height=v.height,t.intersect=function(c){return N(t,c)},r},ot=(e,t)=>{let n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,a=i/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-a).attr("y",t.y-t.height/2-a).attr("width",t.width+i).attr("height",t.height+i).attr("fill","none");let d=r.node().getBBox();return t.width=d.width,t.height=d.height,t.intersect=function(h){return N(t,h)},n},lt=(e,t)=>{let n=B(),r=e.insert("g").attr("class",t.classes).attr("id",t.id),i=r.insert("rect",":first-child"),a=r.insert("g").attr("class","cluster-label"),d=r.append("rect"),h=a.node().appendChild(P(t.labelText,t.labelStyle,void 0,!0)),f=h.getBBox();if(C(n.flowchart.htmlLabels)){let c=h.children[0],o=T(h);f=c.getBoundingClientRect(),o.attr("width",f.width),o.attr("height",f.height)}f=h.getBBox();let u=0*t.padding,w=u/2,b=t.width<=f.width+t.padding?f.width+t.padding:t.width;t.width<=f.width+t.padding?t.diff=(f.width+t.padding*0-t.width)/2:t.diff=-t.padding/2,i.attr("class","outer").attr("x",t.x-b/2-w).attr("y",t.y-t.height/2-w).attr("width",b+u).attr("height",t.height+u),d.attr("class","inner").attr("x",t.x-b/2-w).attr("y",t.y-t.height/2-w+f.height-1).attr("width",b+u).attr("height",t.height+u-f.height-3);let{subGraphTitleTopMargin:y}=S(n);a.attr("transform",`translate(${t.x-f.width/2}, ${t.y-t.height/2-t.padding/3+(C(n.flowchart.htmlLabels)?5:3)+y})`);let v=i.node().getBBox();return t.height=v.height,t.intersect=function(c){return N(t,c)},r},ft=(e,t)=>{let n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,a=i/2;r.attr("class","divider").attr("x",t.x-t.width/2-a).attr("y",t.y-t.height/2).attr("width",t.width+i).attr("height",t.height+i);let d=r.node().getBBox();return t.width=d.width,t.height=d.height,t.diff=-t.padding/2,t.intersect=function(h){return N(t,h)},n},dt={rect:ct,roundedWithTitle:lt,noteGroup:ot,divider:ft},Z={},ht=(e,t)=>{s.trace("Inserting cluster");let n=t.shape||"rect";Z[t.id]=dt[n](e,t)},ut=()=>{Z={}},I=async(e,t,n,r,i,a)=>{s.info("Graph in recursive render: XXX",m(t),i);let d=t.graph().rankdir;s.trace("Dir in recursive render - dir:",d);let h=e.insert("g").attr("class","root");t.nodes()?s.info("Recursive render XXX",t.nodes()):s.info("No nodes found for",t),t.edges().length>0&&s.trace("Recursive edges",t.edge(t.edges()[0]));let f=h.insert("g").attr("class","clusters"),u=h.insert("g").attr("class","edgePaths"),w=h.insert("g").attr("class","edgeLabels"),b=h.insert("g").attr("class","nodes");await Promise.all(t.nodes().map(async function(c){let o=t.node(c);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));s.info("Setting data for cluster XXX (",c,") ",x,i),t.setNode(i.id,x),t.parent(c)||(s.trace("Setting parent",c,i.id),t.setParent(c,i.id,x))}if(s.info("(Insert) Node XXX"+c+": "+JSON.stringify(t.node(c))),o&&o.clusterNode){s.info("Cluster identified",c,o.width,t.node(c));let x=await I(b,o.graph,n,r,t.node(c),a),E=x.elem;F(o,E),o.diff=x.diff||0,s.info("Node bounds (abc123)",c,o,o.width,o.x,o.y),U(E,o),s.warn("Recursive render complete ",E,o)}else t.children(c).length>0?(s.info("Cluster - the non recursive path XXX",c,o.id,o,t),s.info(X(o.id,t)),l[o.id]={id:X(o.id,t),node:o}):(s.info("Node - the non recursive path",c,o.id,o),await M(b,t.node(c),d))})),t.edges().forEach(function(c){let o=t.edge(c.v,c.w,c.name);s.info("Edge "+c.v+" -> "+c.w+": "+JSON.stringify(c)),s.info("Edge "+c.v+" -> "+c.w+": ",c," ",JSON.stringify(t.edge(c))),s.info("Fix",l,"ids:",c.v,c.w,"Translating: ",l[c.v],l[c.w]),H(w,o)}),t.edges().forEach(function(c){s.info("Edge "+c.v+" -> "+c.w+": "+JSON.stringify(c))}),s.info("#############################################"),s.info("### Layout ###"),s.info("#############################################"),s.info(t),k(t),s.info("Graph after layout:",m(t));let y=0,{subGraphTitleTotalMargin:v}=S(a);return at(t).forEach(function(c){let o=t.node(c);s.info("Position "+c+": "+JSON.stringify(t.node(c))),s.info("Position "+c+": ("+o.x,","+o.y,") width: ",o.width," height: ",o.height),o&&o.clusterNode?(o.y+=v,R(o)):t.children(c).length>0?(o.height+=v,ht(f,o),l[o.id].node=o):(o.y+=v/2,R(o))}),t.edges().forEach(function(c){let o=t.edge(c);s.info("Edge "+c.v+" -> "+c.w+": "+JSON.stringify(o),o),o.points.forEach(E=>E.y+=v/2);let x=W(u,c,o,l,n,t,r);V(o,x)}),t.nodes().forEach(function(c){let o=t.node(c);s.info(c,o.type,o.diff),o.type==="group"&&(y=o.diff)}),{elem:h,diff:y}},Nt=async(e,t,n,r,i)=>{$(e,n,r,i),j(),A(),ut(),it(),s.warn("Graph at first:",JSON.stringify(m(t))),rt(t),s.warn("Graph after:",JSON.stringify(m(t)));let a=B();await I(e,t,r,i,void 0,a)};export{Nt as a}; +//# sourceMappingURL=chunk-5FWMXAFW.min.js.map diff --git a/public/chunk-5FWMXAFW.min.js.map b/public/chunk-5FWMXAFW.min.js.map new file mode 100644 index 000000000..c5426079e --- /dev/null +++ b/public/chunk-5FWMXAFW.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/dagre-d3-es/src/graphlib/json.js", "../../node_modules/mermaid/dist/index-01f381cb.js"], + "sourcesContent": ["import * as _ from 'lodash-es';\nimport { Graph } from './graph.js';\n\nexport { write, read };\n\nfunction write(g) {\n var json = {\n options: {\n directed: g.isDirected(),\n multigraph: g.isMultigraph(),\n compound: g.isCompound(),\n },\n nodes: writeNodes(g),\n edges: writeEdges(g),\n };\n if (!_.isUndefined(g.graph())) {\n json.value = _.clone(g.graph());\n }\n return json;\n}\n\nfunction writeNodes(g) {\n return _.map(g.nodes(), function (v) {\n var nodeValue = g.node(v);\n var parent = g.parent(v);\n var node = { v: v };\n if (!_.isUndefined(nodeValue)) {\n node.value = nodeValue;\n }\n if (!_.isUndefined(parent)) {\n node.parent = parent;\n }\n return node;\n });\n}\n\nfunction writeEdges(g) {\n return _.map(g.edges(), function (e) {\n var edgeValue = g.edge(e);\n var edge = { v: e.v, w: e.w };\n if (!_.isUndefined(e.name)) {\n edge.name = e.name;\n }\n if (!_.isUndefined(edgeValue)) {\n edge.value = edgeValue;\n }\n return edge;\n });\n}\n\nfunction read(json) {\n var g = new Graph(json.options).setGraph(json.value);\n _.each(json.nodes, function (entry) {\n g.setNode(entry.v, entry.value);\n if (entry.parent) {\n g.setParent(entry.v, entry.parent);\n }\n });\n _.each(json.edges, function (entry) {\n g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);\n });\n return g;\n}\n", "import { layout } from \"dagre-d3-es/src/dagre/index.js\";\nimport * as graphlibJson from \"dagre-d3-es/src/graphlib/json.js\";\nimport { c as createLabel, g as getSubGraphTitleMargins, i as intersectRect, a as insertMarkers, b as clear$2, d as clear$3, u as updateNodeBounds, s as setNodeElem, e as insertNode, f as insertEdgeLabel, p as positionNode, h as insertEdge, j as positionEdgeLabel } from \"./edges-066a5561.js\";\nimport { l as log, c as getConfig, m as evaluate } from \"./mermaid-6dc72991.js\";\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nimport { a as createText } from \"./createText-ca0c5216.js\";\nimport { select } from \"d3\";\nlet clusterDb = {};\nlet descendants = {};\nlet parents = {};\nconst clear$1 = () => {\n descendants = {};\n parents = {};\n clusterDb = {};\n};\nconst isDescendant = (id, ancestorId) => {\n log.trace(\"In isDescendant\", ancestorId, \" \", id, \" = \", descendants[ancestorId].includes(id));\n if (descendants[ancestorId].includes(id)) {\n return true;\n }\n return false;\n};\nconst edgeInCluster = (edge, clusterId) => {\n log.info(\"Descendants of \", clusterId, \" is \", descendants[clusterId]);\n log.info(\"Edge is \", edge);\n if (edge.v === clusterId) {\n return false;\n }\n if (edge.w === clusterId) {\n return false;\n }\n if (!descendants[clusterId]) {\n log.debug(\"Tilt, \", clusterId, \",not in descendants\");\n return false;\n }\n return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w);\n};\nconst copy = (clusterId, graph, newGraph, rootId) => {\n log.warn(\n \"Copying children of \",\n clusterId,\n \"root\",\n rootId,\n \"data\",\n graph.node(clusterId),\n rootId\n );\n const nodes = graph.children(clusterId) || [];\n if (clusterId !== rootId) {\n nodes.push(clusterId);\n }\n log.warn(\"Copying (nodes) clusterId\", clusterId, \"nodes\", nodes);\n nodes.forEach((node) => {\n if (graph.children(node).length > 0) {\n copy(node, graph, newGraph, rootId);\n } else {\n const data = graph.node(node);\n log.info(\"cp \", node, \" to \", rootId, \" with parent \", clusterId);\n newGraph.setNode(node, data);\n if (rootId !== graph.parent(node)) {\n log.warn(\"Setting parent\", node, graph.parent(node));\n newGraph.setParent(node, graph.parent(node));\n }\n if (clusterId !== rootId && node !== clusterId) {\n log.debug(\"Setting parent\", node, clusterId);\n newGraph.setParent(node, clusterId);\n } else {\n log.info(\"In copy \", clusterId, \"root\", rootId, \"data\", graph.node(clusterId), rootId);\n log.debug(\n \"Not Setting parent for node=\",\n node,\n \"cluster!==rootId\",\n clusterId !== rootId,\n \"node!==clusterId\",\n node !== clusterId\n );\n }\n const edges = graph.edges(node);\n log.debug(\"Copying Edges\", edges);\n edges.forEach((edge) => {\n log.info(\"Edge\", edge);\n const data2 = graph.edge(edge.v, edge.w, edge.name);\n log.info(\"Edge data\", data2, rootId);\n try {\n if (edgeInCluster(edge, rootId)) {\n log.info(\"Copying as \", edge.v, edge.w, data2, edge.name);\n newGraph.setEdge(edge.v, edge.w, data2, edge.name);\n log.info(\"newGraph edges \", newGraph.edges(), newGraph.edge(newGraph.edges()[0]));\n } else {\n log.info(\n \"Skipping copy of edge \",\n edge.v,\n \"-->\",\n edge.w,\n \" rootId: \",\n rootId,\n \" clusterId:\",\n clusterId\n );\n }\n } catch (e) {\n log.error(e);\n }\n });\n }\n log.debug(\"Removing node\", node);\n graph.removeNode(node);\n });\n};\nconst extractDescendants = (id, graph) => {\n const children = graph.children(id);\n let res = [...children];\n for (const child of children) {\n parents[child] = id;\n res = [...res, ...extractDescendants(child, graph)];\n }\n return res;\n};\nconst findNonClusterChild = (id, graph) => {\n log.trace(\"Searching\", id);\n const children = graph.children(id);\n log.trace(\"Searching children of id \", id, children);\n if (children.length < 1) {\n log.trace(\"This is a valid node\", id);\n return id;\n }\n for (const child of children) {\n const _id = findNonClusterChild(child, graph);\n if (_id) {\n log.trace(\"Found replacement for\", id, \" => \", _id);\n return _id;\n }\n }\n};\nconst getAnchorId = (id) => {\n if (!clusterDb[id]) {\n return id;\n }\n if (!clusterDb[id].externalConnections) {\n return id;\n }\n if (clusterDb[id]) {\n return clusterDb[id].id;\n }\n return id;\n};\nconst adjustClustersAndEdges = (graph, depth) => {\n if (!graph || depth > 10) {\n log.debug(\"Opting out, no graph \");\n return;\n } else {\n log.debug(\"Opting in, graph \");\n }\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n if (children.length > 0) {\n log.warn(\n \"Cluster identified\",\n id,\n \" Replacement id in edges: \",\n findNonClusterChild(id, graph)\n );\n descendants[id] = extractDescendants(id, graph);\n clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) };\n }\n });\n graph.nodes().forEach(function(id) {\n const children = graph.children(id);\n const edges = graph.edges();\n if (children.length > 0) {\n log.debug(\"Cluster identified\", id, descendants);\n edges.forEach((edge) => {\n if (edge.v !== id && edge.w !== id) {\n const d1 = isDescendant(edge.v, id);\n const d2 = isDescendant(edge.w, id);\n if (d1 ^ d2) {\n log.warn(\"Edge: \", edge, \" leaves cluster \", id);\n log.warn(\"Descendants of XXX \", id, \": \", descendants[id]);\n clusterDb[id].externalConnections = true;\n }\n }\n });\n } else {\n log.debug(\"Not a cluster \", id, descendants);\n }\n });\n for (let id of Object.keys(clusterDb)) {\n const nonClusterChild = clusterDb[id].id;\n const parent = graph.parent(nonClusterChild);\n if (parent !== id && clusterDb[parent] && !clusterDb[parent].externalConnections) {\n clusterDb[id].id = parent;\n }\n }\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n log.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n log.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(graph.edge(e)));\n let v = e.v;\n let w = e.w;\n log.warn(\n \"Fix XXX\",\n clusterDb,\n \"ids:\",\n e.v,\n e.w,\n \"Translating: \",\n clusterDb[e.v],\n \" --- \",\n clusterDb[e.w]\n );\n if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) {\n log.warn(\"Fixing and trixing link to self - removing XXX\", e.v, e.w, e.name);\n log.warn(\"Fixing and trixing - removing XXX\", e.v, e.w, e.name);\n v = getAnchorId(e.v);\n w = getAnchorId(e.w);\n graph.removeEdge(e.v, e.w, e.name);\n const specialId = e.w + \"---\" + e.v;\n graph.setNode(specialId, {\n domId: specialId,\n id: specialId,\n labelStyle: \"\",\n labelText: edge.label,\n padding: 0,\n shape: \"labelRect\",\n style: \"\"\n });\n const edge1 = structuredClone(edge);\n const edge2 = structuredClone(edge);\n edge1.label = \"\";\n edge1.arrowTypeEnd = \"none\";\n edge2.label = \"\";\n edge1.fromCluster = e.v;\n edge2.toCluster = e.v;\n graph.setEdge(v, specialId, edge1, e.name + \"-cyclic-special\");\n graph.setEdge(specialId, w, edge2, e.name + \"-cyclic-special\");\n } else if (clusterDb[e.v] || clusterDb[e.w]) {\n log.warn(\"Fixing and trixing - removing XXX\", e.v, e.w, e.name);\n v = getAnchorId(e.v);\n w = getAnchorId(e.w);\n graph.removeEdge(e.v, e.w, e.name);\n if (v !== e.v) {\n const parent = graph.parent(v);\n clusterDb[parent].externalConnections = true;\n edge.fromCluster = e.v;\n }\n if (w !== e.w) {\n const parent = graph.parent(w);\n clusterDb[parent].externalConnections = true;\n edge.toCluster = e.w;\n }\n log.warn(\"Fix Replacing with XXX\", v, w, e.name);\n graph.setEdge(v, w, edge, e.name);\n }\n });\n log.warn(\"Adjusted Graph\", graphlibJson.write(graph));\n extractor(graph, 0);\n log.trace(clusterDb);\n};\nconst extractor = (graph, depth) => {\n log.warn(\"extractor - \", depth, graphlibJson.write(graph), graph.children(\"D\"));\n if (depth > 10) {\n log.error(\"Bailing out\");\n return;\n }\n let nodes = graph.nodes();\n let hasChildren = false;\n for (const node of nodes) {\n const children = graph.children(node);\n hasChildren = hasChildren || children.length > 0;\n }\n if (!hasChildren) {\n log.debug(\"Done, no node has children\", graph.nodes());\n return;\n }\n log.debug(\"Nodes = \", nodes, depth);\n for (const node of nodes) {\n log.debug(\n \"Extracting node\",\n node,\n clusterDb,\n clusterDb[node] && !clusterDb[node].externalConnections,\n !graph.parent(node),\n graph.node(node),\n graph.children(\"D\"),\n \" Depth \",\n depth\n );\n if (!clusterDb[node]) {\n log.debug(\"Not a cluster\", node, depth);\n } else if (!clusterDb[node].externalConnections && // !graph.parent(node) &&\n graph.children(node) && graph.children(node).length > 0) {\n log.warn(\n \"Cluster without external connections, without a parent and with children\",\n node,\n depth\n );\n const graphSettings = graph.graph();\n let dir = graphSettings.rankdir === \"TB\" ? \"LR\" : \"TB\";\n if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) {\n dir = clusterDb[node].clusterData.dir;\n log.warn(\"Fixing dir\", clusterDb[node].clusterData.dir, dir);\n }\n const clusterGraph = new graphlib.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: dir,\n // Todo: set proper spacing\n nodesep: 50,\n ranksep: 50,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n log.warn(\"Old graph before copy\", graphlibJson.write(graph));\n copy(node, graph, clusterGraph, node);\n graph.setNode(node, {\n clusterNode: true,\n id: node,\n clusterData: clusterDb[node].clusterData,\n labelText: clusterDb[node].labelText,\n graph: clusterGraph\n });\n log.warn(\"New graph after copy node: (\", node, \")\", graphlibJson.write(clusterGraph));\n log.debug(\"Old graph after copy\", graphlibJson.write(graph));\n } else {\n log.warn(\n \"Cluster ** \",\n node,\n \" **not meeting the criteria !externalConnections:\",\n !clusterDb[node].externalConnections,\n \" no parent: \",\n !graph.parent(node),\n \" children \",\n graph.children(node) && graph.children(node).length > 0,\n graph.children(\"D\"),\n depth\n );\n log.debug(clusterDb);\n }\n }\n nodes = graph.nodes();\n log.warn(\"New list of nodes\", nodes);\n for (const node of nodes) {\n const data = graph.node(node);\n log.warn(\" Now next level\", node, data);\n if (data.clusterNode) {\n extractor(data.graph, depth + 1);\n }\n }\n};\nconst sorter = (graph, nodes) => {\n if (nodes.length === 0) {\n return [];\n }\n let result = Object.assign(nodes);\n nodes.forEach((node) => {\n const children = graph.children(node);\n const sorted = sorter(graph, children);\n result = [...result, ...sorted];\n });\n return result;\n};\nconst sortNodesByHierarchy = (graph) => sorter(graph, graph.children());\nconst rect = (parent, node) => {\n log.info(\"Creating subgraph rect for \", node.id, node);\n const siteConfig = getConfig();\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"cluster\" + (node.class ? \" \" + node.class : \"\")).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n const text = node.labelType === \"markdown\" ? createText(label, node.labelText, { style: node.labelStyle, useHtmlLabels }) : label.node().appendChild(createLabel(node.labelText, node.labelStyle, void 0, true));\n let bbox = text.getBBox();\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width;\n if (node.width <= bbox.width + padding) {\n node.diff = (bbox.width - node.width) / 2 - node.padding / 2;\n } else {\n node.diff = -node.padding / 2;\n }\n log.trace(\"Data \", node, JSON.stringify(node));\n rect2.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - width / 2).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", width).attr(\"height\", node.height + padding);\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n if (useHtmlLabels) {\n label.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n } else {\n label.attr(\n \"transform\",\n // This puts the label on top of the box instead of inside it\n `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n }\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return intersectRect(node, point);\n };\n return shapeSvg;\n};\nconst noteGroup = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"note-cluster\").attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding).attr(\"fill\", \"none\");\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.intersect = function(point) {\n return intersectRect(node, point);\n };\n return shapeSvg;\n};\nconst roundedWithTitle = (parent, node) => {\n const siteConfig = getConfig();\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.classes).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"cluster-label\");\n const innerRect = shapeSvg.append(\"rect\");\n const text = label.node().appendChild(createLabel(node.labelText, node.labelStyle, void 0, true));\n let bbox = text.getBBox();\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n bbox = text.getBBox();\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (bbox.width + node.padding * 0 - node.width) / 2;\n } else {\n node.diff = -node.padding / 2;\n }\n rect2.attr(\"class\", \"outer\").attr(\"x\", node.x - width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding).attr(\"width\", width + padding).attr(\"height\", node.height + padding);\n innerRect.attr(\"class\", \"inner\").attr(\"x\", node.x - width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr(\"width\", width + padding).attr(\"height\", node.height + padding - bbox.height - 3);\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n label.attr(\n \"transform\",\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 - node.padding / 3 + (evaluate(siteConfig.flowchart.htmlLabels) ? 5 : 3) + subGraphTitleTopMargin})`\n );\n const rectBox = rect2.node().getBBox();\n node.height = rectBox.height;\n node.intersect = function(point) {\n return intersectRect(node, point);\n };\n return shapeSvg;\n};\nconst divider = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", node.classes).attr(\"id\", node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n rect2.attr(\"class\", \"divider\").attr(\"x\", node.x - node.width / 2 - halfPadding).attr(\"y\", node.y - node.height / 2).attr(\"width\", node.width + padding).attr(\"height\", node.height + padding);\n const rectBox = rect2.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n node.diff = -node.padding / 2;\n node.intersect = function(point) {\n return intersectRect(node, point);\n };\n return shapeSvg;\n};\nconst shapes = { rect, roundedWithTitle, noteGroup, divider };\nlet clusterElems = {};\nconst insertCluster = (elem, node) => {\n log.trace(\"Inserting cluster\");\n const shape = node.shape || \"rect\";\n clusterElems[node.id] = shapes[shape](elem, node);\n};\nconst clear = () => {\n clusterElems = {};\n};\nconst recursiveRender = async (_elem, graph, diagramType, id, parentCluster, siteConfig) => {\n log.info(\"Graph in recursive render: XXX\", graphlibJson.write(graph), parentCluster);\n const dir = graph.graph().rankdir;\n log.trace(\"Dir in recursive render - dir:\", dir);\n const elem = _elem.insert(\"g\").attr(\"class\", \"root\");\n if (!graph.nodes()) {\n log.info(\"No nodes found for\", graph);\n } else {\n log.info(\"Recursive render XXX\", graph.nodes());\n }\n if (graph.edges().length > 0) {\n log.trace(\"Recursive edges\", graph.edge(graph.edges()[0]));\n }\n const clusters = elem.insert(\"g\").attr(\"class\", \"clusters\");\n const edgePaths = elem.insert(\"g\").attr(\"class\", \"edgePaths\");\n const edgeLabels = elem.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodes = elem.insert(\"g\").attr(\"class\", \"nodes\");\n await Promise.all(\n graph.nodes().map(async function(v) {\n const node = graph.node(v);\n if (parentCluster !== void 0) {\n const data = JSON.parse(JSON.stringify(parentCluster.clusterData));\n log.info(\"Setting data for cluster XXX (\", v, \") \", data, parentCluster);\n graph.setNode(parentCluster.id, data);\n if (!graph.parent(v)) {\n log.trace(\"Setting parent\", v, parentCluster.id);\n graph.setParent(v, parentCluster.id, data);\n }\n }\n log.info(\"(Insert) Node XXX\" + v + \": \" + JSON.stringify(graph.node(v)));\n if (node && node.clusterNode) {\n log.info(\"Cluster identified\", v, node.width, graph.node(v));\n const o = await recursiveRender(\n nodes,\n node.graph,\n diagramType,\n id,\n graph.node(v),\n siteConfig\n );\n const newEl = o.elem;\n updateNodeBounds(node, newEl);\n node.diff = o.diff || 0;\n log.info(\"Node bounds (abc123)\", v, node, node.width, node.x, node.y);\n setNodeElem(newEl, node);\n log.warn(\"Recursive render complete \", newEl, node);\n } else {\n if (graph.children(v).length > 0) {\n log.info(\"Cluster - the non recursive path XXX\", v, node.id, node, graph);\n log.info(findNonClusterChild(node.id, graph));\n clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node };\n } else {\n log.info(\"Node - the non recursive path\", v, node.id, node);\n await insertNode(nodes, graph.node(v), dir);\n }\n }\n })\n );\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e.v, e.w, e.name);\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \", e, \" \", JSON.stringify(graph.edge(e)));\n log.info(\"Fix\", clusterDb, \"ids:\", e.v, e.w, \"Translating: \", clusterDb[e.v], clusterDb[e.w]);\n insertEdgeLabel(edgeLabels, edge);\n });\n graph.edges().forEach(function(e) {\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n });\n log.info(\"#############################################\");\n log.info(\"### Layout ###\");\n log.info(\"#############################################\");\n log.info(graph);\n layout(graph);\n log.info(\"Graph after layout:\", graphlibJson.write(graph));\n let diff = 0;\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n sortNodesByHierarchy(graph).forEach(function(v) {\n const node = graph.node(v);\n log.info(\"Position \" + v + \": \" + JSON.stringify(graph.node(v)));\n log.info(\n \"Position \" + v + \": (\" + node.x,\n \",\" + node.y,\n \") width: \",\n node.width,\n \" height: \",\n node.height\n );\n if (node && node.clusterNode) {\n node.y += subGraphTitleTotalMargin;\n positionNode(node);\n } else {\n if (graph.children(v).length > 0) {\n node.height += subGraphTitleTotalMargin;\n insertCluster(clusters, node);\n clusterDb[node.id].node = node;\n } else {\n node.y += subGraphTitleTotalMargin / 2;\n positionNode(node);\n }\n }\n });\n graph.edges().forEach(function(e) {\n const edge = graph.edge(e);\n log.info(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(edge), edge);\n edge.points.forEach((point) => point.y += subGraphTitleTotalMargin / 2);\n const paths = insertEdge(edgePaths, e, edge, clusterDb, diagramType, graph, id);\n positionEdgeLabel(edge, paths);\n });\n graph.nodes().forEach(function(v) {\n const n = graph.node(v);\n log.info(v, n.type, n.diff);\n if (n.type === \"group\") {\n diff = n.diff;\n }\n });\n return { elem, diff };\n};\nconst render = async (elem, graph, markers, diagramType, id) => {\n insertMarkers(elem, markers, diagramType, id);\n clear$2();\n clear$3();\n clear();\n clear$1();\n log.warn(\"Graph at first:\", JSON.stringify(graphlibJson.write(graph)));\n adjustClustersAndEdges(graph);\n log.warn(\"Graph after:\", JSON.stringify(graphlibJson.write(graph)));\n const siteConfig = getConfig();\n await recursiveRender(elem, graph, diagramType, id, void 0, siteConfig);\n};\nexport {\n render as r\n};\n"], + "mappings": "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", + "names": ["write", "g", "json", "writeNodes", "writeEdges", "isUndefined_default", "clone_default", "map_default", "v", "nodeValue", "parent", "node", "e", "edgeValue", "edge", "clusterDb", "descendants", "parents", "clear$1", "isDescendant", "id", "ancestorId", "log$1", "edgeInCluster", "edge", "clusterId", "copy", "graph", "newGraph", "rootId", "nodes", "node", "data", "edges", "data2", "e", "extractDescendants", "children", "res", "child", "findNonClusterChild", "_id", "getAnchorId", "adjustClustersAndEdges", "depth", "d1", "d2", "nonClusterChild", "parent", "v", "w", "specialId", "edge1", "edge2", "write", "extractor", "hasChildren", "dir", "clusterGraph", "Graph", "sorter", "result", "sorted", "sortNodesByHierarchy", "rect", "siteConfig", "getConfig", "shapeSvg", "rect2", "useHtmlLabels", "evaluate", "label", "text", "createText", "createLabel$1", "bbox", "div", "dv", "select_default", "padding", "halfPadding", "width", "subGraphTitleTopMargin", "getSubGraphTitleMargins", "rectBox", "point", "intersectRect$1", "noteGroup", "roundedWithTitle", "innerRect", "divider", "shapes", "clusterElems", "insertCluster", "elem", "shape", "clear", "recursiveRender", "_elem", "diagramType", "parentCluster", "clusters", "edgePaths", "edgeLabels", "o", "newEl", "updateNodeBounds", "setNodeElem", "insertNode", "insertEdgeLabel", "layout", "diff", "subGraphTitleTotalMargin", "positionNode", "paths", "insertEdge", "positionEdgeLabel", "n", "render", "markers", "insertMarkers$1"] +} diff --git a/public/chunk-CA32PY7O.min.js b/public/chunk-CA32PY7O.min.js new file mode 100644 index 000000000..a177e2026 --- /dev/null +++ b/public/chunk-CA32PY7O.min.js @@ -0,0 +1,11 @@ +import{Ga as O1,Oa as Xt,ab as $1,fb as Ht,gb as qt,h as V1,hb as Wt,ib as Qt,jb as Zt,kb as Jt,lb as $t,nb as P1,pb as te}from"./chunk-YEACHCAA.min.js";var At=function(){var e=function(f1,a,o,f){for(o=o||{},f=f1.length;f--;o[f1[f]]=a);return o},u=[1,4],i=[1,3],n=[1,5],c=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],l=[2,2],h=[1,13],U=[1,14],F=[1,15],w=[1,16],X=[1,23],o1=[1,25],p1=[1,26],A1=[1,27],C=[1,49],k=[1,48],l1=[1,29],M1=[1,30],K1=[1,31],Y1=[1,32],j1=[1,33],x=[1,44],B=[1,46],m=[1,42],y=[1,47],v=[1,43],V=[1,50],L=[1,45],I=[1,51],R=[1,52],z1=[1,34],X1=[1,35],H1=[1,36],q1=[1,37],R1=[1,57],b=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],W=[1,61],Q=[1,60],Z=[1,62],W1=[8,9,11,73,75],k1=[1,88],b1=[1,93],g1=[1,92],D1=[1,89],F1=[1,85],T1=[1,91],S1=[1,87],C1=[1,94],_1=[1,90],x1=[1,95],B1=[1,86],Q1=[8,9,10,11,73,75],N=[8,9,10,11,44,73,75],M=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],Et=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],N1=[42,58,86,99,102,103,106,108,111,112,113],kt=[1,121],bt=[1,120],gt=[1,128],Dt=[1,142],Ft=[1,143],Tt=[1,144],St=[1,145],Ct=[1,130],_t=[1,132],xt=[1,136],Bt=[1,137],mt=[1,138],yt=[1,139],vt=[1,140],Vt=[1,141],Lt=[1,146],It=[1,147],Rt=[1,126],Nt=[1,127],wt=[1,134],Ot=[1,129],Pt=[1,133],Ut=[1,131],at=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Gt=[1,149],T=[8,9,11],K=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],p=[1,169],O=[1,165],P=[1,166],A=[1,170],d=[1,167],E=[1,168],m1=[75,113,116],g=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],Mt=[10,103],h1=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],J=[1,235],$=[1,233],t1=[1,237],e1=[1,231],s1=[1,232],u1=[1,234],i1=[1,236],r1=[1,238],y1=[1,255],Kt=[8,9,11,103],q=[8,9,10,11,58,81,102,103,106,107,108,109],ct={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(a,o,f,r,S,t,w1){var s=t.length-1;switch(S){case 2:this.$=[];break;case 3:(!Array.isArray(t[s])||t[s].length>0)&&t[s-1].push(t[s]),this.$=t[s-1];break;case 4:case 176:this.$=t[s];break;case 11:r.setDirection("TB"),this.$="TB";break;case 12:r.setDirection(t[s-1]),this.$=t[s-1];break;case 27:this.$=t[s-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=r.addSubGraph(t[s-6],t[s-1],t[s-4]);break;case 34:this.$=r.addSubGraph(t[s-3],t[s-1],t[s-3]);break;case 35:this.$=r.addSubGraph(void 0,t[s-1],void 0);break;case 37:this.$=t[s].trim(),r.setAccTitle(this.$);break;case 38:case 39:this.$=t[s].trim(),r.setAccDescription(this.$);break;case 43:r.addLink(t[s-2].stmt,t[s],t[s-1]),this.$={stmt:t[s],nodes:t[s].concat(t[s-2].nodes)};break;case 44:r.addLink(t[s-3].stmt,t[s-1],t[s-2]),this.$={stmt:t[s-1],nodes:t[s-1].concat(t[s-3].nodes)};break;case 45:this.$={stmt:t[s-1],nodes:t[s-1]};break;case 46:this.$={stmt:t[s],nodes:t[s]};break;case 47:this.$=[t[s]];break;case 48:this.$=t[s-4].concat(t[s]);break;case 49:this.$=t[s];break;case 50:this.$=t[s-2],r.setClass(t[s-2],t[s]);break;case 51:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"square");break;case 52:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"doublecircle");break;case 53:this.$=t[s-5],r.addVertex(t[s-5],t[s-2],"circle");break;case 54:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"ellipse");break;case 55:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"stadium");break;case 56:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"subroutine");break;case 57:this.$=t[s-7],r.addVertex(t[s-7],t[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[t[s-5],t[s-3]]]));break;case 58:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"cylinder");break;case 59:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"round");break;case 60:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"diamond");break;case 61:this.$=t[s-5],r.addVertex(t[s-5],t[s-2],"hexagon");break;case 62:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"odd");break;case 63:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"trapezoid");break;case 64:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"inv_trapezoid");break;case 65:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"lean_right");break;case 66:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"lean_left");break;case 67:this.$=t[s],r.addVertex(t[s]);break;case 68:t[s-1].text=t[s],this.$=t[s-1];break;case 69:case 70:t[s-2].text=t[s-1],this.$=t[s-2];break;case 71:this.$=t[s];break;case 72:var Y=r.destructLink(t[s],t[s-2]);this.$={type:Y.type,stroke:Y.stroke,length:Y.length,text:t[s-1]};break;case 73:this.$={text:t[s],type:"text"};break;case 74:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 75:this.$={text:t[s],type:"string"};break;case 76:this.$={text:t[s],type:"markdown"};break;case 77:var Y=r.destructLink(t[s]);this.$={type:Y.type,stroke:Y.stroke,length:Y.length};break;case 78:this.$=t[s-1];break;case 79:this.$={text:t[s],type:"text"};break;case 80:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 81:this.$={text:t[s],type:"string"};break;case 82:case 97:this.$={text:t[s],type:"markdown"};break;case 94:this.$={text:t[s],type:"text"};break;case 95:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 96:this.$={text:t[s],type:"text"};break;case 98:this.$=t[s-4],r.addClass(t[s-2],t[s]);break;case 99:this.$=t[s-4],r.setClass(t[s-2],t[s]);break;case 100:case 108:this.$=t[s-1],r.setClickEvent(t[s-1],t[s]);break;case 101:case 109:this.$=t[s-3],r.setClickEvent(t[s-3],t[s-2]),r.setTooltip(t[s-3],t[s]);break;case 102:this.$=t[s-2],r.setClickEvent(t[s-2],t[s-1],t[s]);break;case 103:this.$=t[s-4],r.setClickEvent(t[s-4],t[s-3],t[s-2]),r.setTooltip(t[s-4],t[s]);break;case 104:this.$=t[s-2],r.setLink(t[s-2],t[s]);break;case 105:this.$=t[s-4],r.setLink(t[s-4],t[s-2]),r.setTooltip(t[s-4],t[s]);break;case 106:this.$=t[s-4],r.setLink(t[s-4],t[s-2],t[s]);break;case 107:this.$=t[s-6],r.setLink(t[s-6],t[s-4],t[s]),r.setTooltip(t[s-6],t[s-2]);break;case 110:this.$=t[s-1],r.setLink(t[s-1],t[s]);break;case 111:this.$=t[s-3],r.setLink(t[s-3],t[s-2]),r.setTooltip(t[s-3],t[s]);break;case 112:this.$=t[s-3],r.setLink(t[s-3],t[s-2],t[s]);break;case 113:this.$=t[s-5],r.setLink(t[s-5],t[s-4],t[s]),r.setTooltip(t[s-5],t[s-2]);break;case 114:this.$=t[s-4],r.addVertex(t[s-2],void 0,void 0,t[s]);break;case 115:this.$=t[s-4],r.updateLink([t[s-2]],t[s]);break;case 116:this.$=t[s-4],r.updateLink(t[s-2],t[s]);break;case 117:this.$=t[s-8],r.updateLinkInterpolate([t[s-6]],t[s-2]),r.updateLink([t[s-6]],t[s]);break;case 118:this.$=t[s-8],r.updateLinkInterpolate(t[s-6],t[s-2]),r.updateLink(t[s-6],t[s]);break;case 119:this.$=t[s-6],r.updateLinkInterpolate([t[s-4]],t[s]);break;case 120:this.$=t[s-6],r.updateLinkInterpolate(t[s-4],t[s]);break;case 121:case 123:this.$=[t[s]];break;case 122:case 124:t[s-2].push(t[s]),this.$=t[s-2];break;case 126:this.$=t[s-1]+t[s];break;case 174:this.$=t[s];break;case 175:this.$=t[s-1]+""+t[s];break;case 177:this.$=t[s-1]+""+t[s];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,9:u,10:i,12:n},{1:[3]},e(c,l,{5:6}),{4:7,9:u,10:i,12:n},{4:8,9:u,10:i,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:h,9:U,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:M1,83:K1,84:Y1,85:j1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:z1,119:X1,120:H1,121:q1},e(c,[2,9]),e(c,[2,10]),e(c,[2,11]),{8:[1,54],9:[1,55],10:R1,15:53,18:56},e(b,[2,3]),e(b,[2,4]),e(b,[2,5]),e(b,[2,6]),e(b,[2,7]),e(b,[2,8]),{8:W,9:Q,11:Z,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:W,9:Q,11:Z,21:66},{8:W,9:Q,11:Z,21:67},{8:W,9:Q,11:Z,21:68},{8:W,9:Q,11:Z,21:69},{8:W,9:Q,11:Z,21:70},{8:W,9:Q,10:[1,71],11:Z,21:72},e(b,[2,36]),{35:[1,73]},{37:[1,74]},e(b,[2,39]),e(W1,[2,46],{18:75,10:R1}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:k1,42:b1,58:g1,77:[1,83],86:D1,92:[1,80],94:[1,81],98:82,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1,117:84},e(b,[2,178]),e(b,[2,179]),e(b,[2,180]),e(b,[2,181]),e(Q1,[2,47]),e(Q1,[2,49],{44:[1,96]}),e(N,[2,67],{110:109,29:[1,97],42:C,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:k,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:x,99:B,102:m,103:y,106:v,108:V,111:L,112:I,113:R}),e(M,[2,174]),e(M,[2,135]),e(M,[2,136]),e(M,[2,137]),e(M,[2,138]),e(M,[2,139]),e(M,[2,140]),e(M,[2,141]),e(M,[2,142]),e(M,[2,143]),e(M,[2,144]),e(M,[2,145]),e(c,[2,12]),e(c,[2,18]),e(c,[2,19]),{9:[1,110]},e(Et,[2,26],{18:111,10:R1}),e(b,[2,27]),{40:112,41:38,42:C,43:39,45:40,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},e(b,[2,40]),e(b,[2,41]),e(b,[2,42]),e(N1,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:kt,116:bt},e([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),e(b,[2,28]),e(b,[2,29]),e(b,[2,30]),e(b,[2,31]),e(b,[2,32]),{10:gt,12:Dt,14:Ft,27:Tt,28:122,32:St,42:Ct,58:_t,73:xt,77:[1,124],78:[1,125],80:135,81:Bt,82:mt,83:yt,84:vt,85:Vt,86:Lt,87:It,88:123,102:Rt,106:Nt,108:wt,111:Ot,112:Pt,113:Ut},e(at,l,{5:148}),e(b,[2,37]),e(b,[2,38]),e(W1,[2,45],{42:Gt}),{42:C,45:150,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{99:[1,151],100:152,102:[1,153]},{42:C,45:154,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{42:C,45:155,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},e(T,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},e(T,[2,108],{117:160,10:[1,159],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1}),e(T,[2,110],{10:[1,161]}),e(K,[2,176]),e(K,[2,163]),e(K,[2,164]),e(K,[2,165]),e(K,[2,166]),e(K,[2,167]),e(K,[2,168]),e(K,[2,169]),e(K,[2,170]),e(K,[2,171]),e(K,[2,172]),e(K,[2,173]),{42:C,45:162,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{30:163,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:171,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:173,48:[1,172],65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:174,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:175,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:176,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{106:[1,177]},{30:178,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:179,63:[1,180],65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:181,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:182,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:183,65:p,77:O,78:P,79:164,113:A,114:d,115:E},e(M,[2,175]),e(c,[2,20]),e(Et,[2,25]),e(W1,[2,43],{18:184,10:R1}),e(N1,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{75:[1,188],76:189,113:kt,116:bt},e(m1,[2,73]),e(m1,[2,75]),e(m1,[2,76]),e(m1,[2,161]),e(m1,[2,162]),{8:W,9:Q,10:gt,11:Z,12:Dt,14:Ft,21:191,27:Tt,29:[1,190],32:St,42:Ct,58:_t,73:xt,80:135,81:Bt,82:mt,83:yt,84:vt,85:Vt,86:Lt,87:It,88:192,102:Rt,106:Nt,108:wt,111:Ot,112:Pt,113:Ut},e(g,[2,94]),e(g,[2,96]),e(g,[2,97]),e(g,[2,150]),e(g,[2,151]),e(g,[2,152]),e(g,[2,153]),e(g,[2,154]),e(g,[2,155]),e(g,[2,156]),e(g,[2,157]),e(g,[2,158]),e(g,[2,159]),e(g,[2,160]),e(g,[2,83]),e(g,[2,84]),e(g,[2,85]),e(g,[2,86]),e(g,[2,87]),e(g,[2,88]),e(g,[2,89]),e(g,[2,90]),e(g,[2,91]),e(g,[2,92]),e(g,[2,93]),{6:11,7:12,8:h,9:U,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,32:[1,193],33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:M1,83:K1,84:Y1,85:j1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:z1,119:X1,120:H1,121:q1},{10:R1,18:194},{10:[1,195],42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:109,111:L,112:I,113:R},{10:[1,196]},{10:[1,197],103:[1,198]},e(Mt,[2,121]),{10:[1,199],42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:109,111:L,112:I,113:R},{10:[1,200],42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:109,111:L,112:I,113:R},{77:[1,201]},e(T,[2,102],{10:[1,202]}),e(T,[2,104],{10:[1,203]}),{77:[1,204]},e(K,[2,177]),{77:[1,205],95:[1,206]},e(Q1,[2,50],{110:109,42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,111:L,112:I,113:R}),{31:[1,207],65:p,79:208,113:A,114:d,115:E},e(h1,[2,79]),e(h1,[2,81]),e(h1,[2,82]),e(h1,[2,146]),e(h1,[2,147]),e(h1,[2,148]),e(h1,[2,149]),{47:[1,209],65:p,79:208,113:A,114:d,115:E},{30:210,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{49:[1,211],65:p,79:208,113:A,114:d,115:E},{51:[1,212],65:p,79:208,113:A,114:d,115:E},{53:[1,213],65:p,79:208,113:A,114:d,115:E},{55:[1,214],65:p,79:208,113:A,114:d,115:E},{58:[1,215]},{62:[1,216],65:p,79:208,113:A,114:d,115:E},{64:[1,217],65:p,79:208,113:A,114:d,115:E},{30:218,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{31:[1,219],65:p,79:208,113:A,114:d,115:E},{65:p,67:[1,220],69:[1,221],79:208,113:A,114:d,115:E},{65:p,67:[1,223],69:[1,222],79:208,113:A,114:d,115:E},e(W1,[2,44],{42:Gt}),e(N1,[2,70]),e(N1,[2,69]),{60:[1,224],65:p,79:208,113:A,114:d,115:E},e(N1,[2,72]),e(m1,[2,74]),{30:225,65:p,77:O,78:P,79:164,113:A,114:d,115:E},e(at,l,{5:226}),e(g,[2,95]),e(b,[2,35]),{41:227,42:C,43:39,45:40,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{10:J,58:$,81:t1,89:228,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{10:J,58:$,81:t1,89:239,101:[1,240],102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{10:J,58:$,81:t1,89:241,101:[1,242],102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{102:[1,243]},{10:J,58:$,81:t1,89:244,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{42:C,45:245,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},e(T,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},e(T,[2,109]),e(T,[2,111],{10:[1,249]}),e(T,[2,112]),e(N,[2,51]),e(h1,[2,80]),e(N,[2,52]),{49:[1,250],65:p,79:208,113:A,114:d,115:E},e(N,[2,59]),e(N,[2,54]),e(N,[2,55]),e(N,[2,56]),{106:[1,251]},e(N,[2,58]),e(N,[2,60]),{64:[1,252],65:p,79:208,113:A,114:d,115:E},e(N,[2,62]),e(N,[2,63]),e(N,[2,65]),e(N,[2,64]),e(N,[2,66]),e([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:p,79:208,113:A,114:d,115:E},{6:11,7:12,8:h,9:U,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,32:[1,254],33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:M1,83:K1,84:Y1,85:j1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:z1,119:X1,120:H1,121:q1},e(Q1,[2,48]),e(T,[2,114],{103:y1}),e(Kt,[2,123],{105:256,10:J,58:$,81:t1,102:e1,106:s1,107:u1,108:i1,109:r1}),e(q,[2,125]),e(q,[2,127]),e(q,[2,128]),e(q,[2,129]),e(q,[2,130]),e(q,[2,131]),e(q,[2,132]),e(q,[2,133]),e(q,[2,134]),e(T,[2,115],{103:y1}),{10:[1,257]},e(T,[2,116],{103:y1}),{10:[1,258]},e(Mt,[2,122]),e(T,[2,98],{103:y1}),e(T,[2,99],{110:109,42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,111:L,112:I,113:R}),e(T,[2,103]),e(T,[2,105],{10:[1,259]}),e(T,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:W,9:Q,11:Z,21:264},e(b,[2,34]),{10:J,58:$,81:t1,102:e1,104:265,105:230,106:s1,107:u1,108:i1,109:r1},e(q,[2,126]),{14:k1,42:b1,58:g1,86:D1,98:266,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1,117:84},{14:k1,42:b1,58:g1,86:D1,98:267,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1,117:84},{95:[1,268]},e(T,[2,113]),e(N,[2,53]),{30:269,65:p,77:O,78:P,79:164,113:A,114:d,115:E},e(N,[2,61]),e(at,l,{5:270}),e(Kt,[2,124],{105:256,10:J,58:$,81:t1,102:e1,106:s1,107:u1,108:i1,109:r1}),e(T,[2,119],{117:160,10:[1,271],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1}),e(T,[2,120],{117:160,10:[1,272],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1}),e(T,[2,107]),{31:[1,273],65:p,79:208,113:A,114:d,115:E},{6:11,7:12,8:h,9:U,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,32:[1,274],33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:M1,83:K1,84:Y1,85:j1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:z1,119:X1,120:H1,121:q1},{10:J,58:$,81:t1,89:275,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{10:J,58:$,81:t1,89:276,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},e(N,[2,57]),e(b,[2,33]),e(T,[2,117],{103:y1}),e(T,[2,118],{103:y1})],defaultActions:{},parseError:function(a,o){if(o.recoverable)this.trace(a);else{var f=new Error(a);throw f.hash=o,f}},parse:function(a){var o=this,f=[0],r=[],S=[null],t=[],w1=this.table,s="",Y=0,Yt=0,Ie=2,jt=1,Re=t.slice.call(arguments,1),_=Object.create(this.lexer),d1={yy:{}};for(var lt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,lt)&&(d1.yy[lt]=this.yy[lt]);_.setInput(a,d1.yy),d1.yy.lexer=_,d1.yy.parser=this,typeof _.yylloc>"u"&&(_.yylloc={});var ht=_.yylloc;t.push(ht);var Ne=_.options&&_.options.ranges;typeof d1.yy.parseError=="function"?this.parseError=d1.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function we(){var a1;return a1=r.pop()||_.lex()||jt,typeof a1!="number"&&(a1 instanceof Array&&(r=a1,a1=r.pop()),a1=o.symbols_[a1]||a1),a1}for(var G,E1,j,ft,v1={},Z1,n1,zt,J1;;){if(E1=f[f.length-1],this.defaultActions[E1]?j=this.defaultActions[E1]:((G===null||typeof G>"u")&&(G=we()),j=w1[E1]&&w1[E1][G]),typeof j>"u"||!j.length||!j[0]){var pt="";J1=[];for(Z1 in w1[E1])this.terminals_[Z1]&&Z1>Ie&&J1.push("'"+this.terminals_[Z1]+"'");_.showPosition?pt="Parse error on line "+(Y+1)+`: +`+_.showPosition()+` +Expecting `+J1.join(", ")+", got '"+(this.terminals_[G]||G)+"'":pt="Parse error on line "+(Y+1)+": Unexpected "+(G==jt?"end of input":"'"+(this.terminals_[G]||G)+"'"),this.parseError(pt,{text:_.match,token:this.terminals_[G]||G,line:_.yylineno,loc:ht,expected:J1})}if(j[0]instanceof Array&&j.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E1+", token: "+G);switch(j[0]){case 1:f.push(G),S.push(_.yytext),t.push(_.yylloc),f.push(j[1]),G=null,Yt=_.yyleng,s=_.yytext,Y=_.yylineno,ht=_.yylloc;break;case 2:if(n1=this.productions_[j[1]][1],v1.$=S[S.length-n1],v1._$={first_line:t[t.length-(n1||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(n1||1)].first_column,last_column:t[t.length-1].last_column},Ne&&(v1._$.range=[t[t.length-(n1||1)].range[0],t[t.length-1].range[1]]),ft=this.performAction.apply(v1,[s,Yt,Y,d1.yy,j[1],S,t].concat(Re)),typeof ft<"u")return ft;n1&&(f=f.slice(0,-1*n1*2),S=S.slice(0,-1*n1),t=t.slice(0,-1*n1)),f.push(this.productions_[j[1]][0]),S.push(v1.$),t.push(v1._$),zt=w1[f[f.length-2]][f[f.length-1]],f.push(zt);break;case 3:return!0}}return!0}},Le=function(){var f1={EOF:1,parseError:function(o,f){if(this.yy.parser)this.yy.parser.parseError(o,f);else throw new Error(o)},setInput:function(a,o){return this.yy=o||this.yy||{},this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var o=a.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var o=a.length,f=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o),this.offset-=o;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===r.length?this.yylloc.first_column:0)+r[r.length-f.length].length-f[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-o]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),o=new Array(a.length+1).join("-");return a+this.upcomingInput()+` +`+o+"^"},test_match:function(a,o){var f,r,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),r=a[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+a[0].length},this.yytext+=a[0],this.match+=a[0],this.matches=a,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(a[0].length),this.matched+=a[0],f=this.performAction.call(this,this.yy,this,o,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var t in S)this[t]=S[t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,o,f,r;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),t=0;to[0].length)){if(o=f,r=t,this.options.backtrack_lexer){if(a=this.test_match(f,S[t]),a!==!1)return a;if(this._backtrack){o=!1;continue}else return!1}else if(!this.options.flex)break}return o?(a=this.test_match(o,S[r]),a!==!1?a:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var o=this.next();return o||this.lex()},begin:function(o){this.conditionStack.push(o)},popState:function(){var o=this.conditionStack.length-1;return o>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(o){return o=this.conditionStack.length-1-Math.abs(o||0),o>=0?this.conditionStack[o]:"INITIAL"},pushState:function(o){this.begin(o)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(o,f,r,S){switch(r){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 8:this.popState();break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 11:this.popState();break;case 12:return 93;case 13:return"MD_STR";case 14:this.popState();break;case 15:this.begin("md_string");break;case 16:return"STR";case 17:this.popState();break;case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 27:this.popState();break;case 28:return 85;case 29:return o.lex.firstGraph()&&this.begin("dir"),12;case 30:return o.lex.firstGraph()&&this.begin("dir"),12;case 31:return o.lex.firstGraph()&&this.begin("dir"),12;case 32:return 27;case 33:return 32;case 34:return 95;case 35:return 95;case 36:return 95;case 37:return 95;case 38:return this.popState(),13;case 39:return this.popState(),14;case 40:return this.popState(),14;case 41:return this.popState(),14;case 42:return this.popState(),14;case 43:return this.popState(),14;case 44:return this.popState(),14;case 45:return this.popState(),14;case 46:return this.popState(),14;case 47:return this.popState(),14;case 48:return this.popState(),14;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:return 108;case 55:return 44;case 56:return 58;case 57:return 42;case 58:return 8;case 59:return 103;case 60:return 112;case 61:return this.popState(),75;case 62:return this.pushState("edgeText"),73;case 63:return 116;case 64:return this.popState(),75;case 65:return this.pushState("thickEdgeText"),73;case 66:return 116;case 67:return this.popState(),75;case 68:return this.pushState("dottedEdgeText"),73;case 69:return 116;case 70:return 75;case 71:return this.popState(),51;case 72:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 94:return 112;case 95:return 108;case 96:return 42;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 108:return"TEXT";case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};return f1}();ct.lexer=Le;function ot(){this.yy={}}return ot.prototype=ct,ct.Parser=ot,new ot}();At.parser=At;var He=At,Oe="flowchart-",ee=0,I1=P1(),D={},H=[],L1={},c1=[],et={},st={},tt=0,dt=!0,z,ut,it=[],rt=e=>Xt.sanitizeText(e,I1),G1=function(e){let u=Object.keys(D);for(let i of u)if(D[i].id===e)return D[i].domId;return e},se=function(e,u,i,n,c,l,h={}){let U,F=e;F!==void 0&&F.trim().length!==0&&(D[F]===void 0&&(D[F]={id:F,labelType:"text",domId:Oe+F+"-"+ee,styles:[],classes:[]}),ee++,u!==void 0?(I1=P1(),U=rt(u.text.trim()),D[F].labelType=u.type,U[0]==='"'&&U[U.length-1]==='"'&&(U=U.substring(1,U.length-1)),D[F].text=U):D[F].text===void 0&&(D[F].text=e),i!==void 0&&(D[F].type=i),n?.forEach(function(w){D[F].styles.push(w)}),c?.forEach(function(w){D[F].classes.push(w)}),l!==void 0&&(D[F].dir=l),D[F].props===void 0?D[F].props=h:h!==void 0&&Object.assign(D[F].props,h))},ue=function(e,u,i){let l={start:e,end:u,type:void 0,text:"",labelType:"text"};O1.info("abc78 Got edge...",l);let h=i.text;if(h!==void 0&&(l.text=rt(h.text.trim()),l.text[0]==='"'&&l.text[l.text.length-1]==='"'&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=h.type),i!==void 0&&(l.type=i.type,l.stroke=i.stroke,l.length=i.length),l?.length>10&&(l.length=10),H.length<(I1.maxEdges??500))O1.info("abc78 pushing edge..."),H.push(l);else throw new Error(`Edge limit exceeded. ${H.length} edges found, but the limit is ${I1.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.`)},ie=function(e,u,i){O1.info("addLink (abc78)",e,u,i);let n,c;for(n=0;n=H.length)throw new Error(`The index ${i} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${H.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);i==="default"?H.defaultStyle=u:($1.isSubstringInArray("fill",u)===-1&&u.push("fill:none"),H[i].style=u)})},ae=function(e,u){e.split(",").forEach(function(i){L1[i]===void 0&&(L1[i]={id:i,styles:[],textStyles:[]}),u?.forEach(function(n){if(n.match("color")){let c=n.replace("fill","bgFill").replace("color","fill");L1[i].textStyles.push(c)}L1[i].styles.push(n)})})},ce=function(e){z=e,z.match(/.*/)&&(z="LR"),z.match(/.*v/)&&(z="TB"),z==="TD"&&(z="TB")},nt=function(e,u){e.split(",").forEach(function(i){let n=i;D[n]!==void 0&&D[n].classes.push(u),et[n]!==void 0&&et[n].classes.push(u)})},Pe=function(e,u){e.split(",").forEach(function(i){u!==void 0&&(st[ut==="gen-1"?G1(i):i]=rt(u))})},Ue=function(e,u,i){let n=G1(e);if(P1().securityLevel!=="loose"||u===void 0)return;let c=[];if(typeof i=="string"){c=i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let l=0;l")),c.classed("hover",!0)}).on("mouseout",function(){u.transition().duration(500).style("opacity",0),V1(this).classed("hover",!1)})};it.push(ke);var be=function(e="gen-1"){D={},L1={},H=[],it=[ke],c1=[],et={},tt=0,st={},dt=!0,ut=e,I1=P1(),Ht()},ge=e=>{ut=e||"gen-2"},De=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},Fe=function(e,u,i){let n=e.text.trim(),c=i.text;e===i&&i.text.match(/\s/)&&(n=void 0);function l(X){let o1={boolean:{},number:{},string:{}},p1=[],A1;return{nodeList:X.filter(function(k){let l1=typeof k;return k.stmt&&k.stmt==="dir"?(A1=k.value,!1):k.trim()===""?!1:l1 in o1?o1[l1].hasOwnProperty(k)?!1:o1[l1][k]=!0:p1.includes(k)?!1:p1.push(k)}),dir:A1}}let h=[],{nodeList:U,dir:F}=l(h.concat.apply(h,u));if(h=U,ut==="gen-1")for(let X=0;X2e3)return;if(Te[U1]=u,c1[u].id===e)return{result:!0,count:0};let n=0,c=1;for(;n=0){let h=Se(e,l);if(h.result)return{result:!0,count:c+h.count};c=c+h.count}n=n+1}return{result:!1,count:c}},Ce=function(e){return Te[e]},_e=function(){U1=-1,c1.length>0&&Se("none",c1.length-1)},xe=function(){return c1},Be=()=>dt?(dt=!1,!0):!1,Me=e=>{let u=e.trim(),i="arrow_open";switch(u[0]){case"<":i="arrow_point",u=u.slice(1);break;case"x":i="arrow_cross",u=u.slice(1);break;case"o":i="arrow_circle",u=u.slice(1);break}let n="normal";return u.includes("=")&&(n="thick"),u.includes(".")&&(n="dotted"),{type:i,stroke:n}},Ke=(e,u)=>{let i=u.length,n=0;for(let c=0;c{let u=e.trim(),i=u.slice(0,-1),n="arrow_open";switch(u.slice(-1)){case"x":n="arrow_cross",u[0]==="x"&&(n="double_"+n,i=i.slice(1));break;case">":n="arrow_point",u[0]==="<"&&(n="double_"+n,i=i.slice(1));break;case"o":n="arrow_circle",u[0]==="o"&&(n="double_"+n,i=i.slice(1));break}let c="normal",l=i.length-1;i[0]==="="&&(c="thick"),i[0]==="~"&&(c="invisible");let h=Ke(".",i);return h&&(c="dotted",l=h),{type:n,stroke:c,length:l}},me=(e,u)=>{let i=Ye(e),n;if(u){if(n=Me(u),n.stroke!==i.stroke)return{type:"INVALID",stroke:"INVALID"};if(n.type==="arrow_open")n.type=i.type;else{if(n.type!==i.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return n.type==="double_arrow"&&(n.type="double_arrow_point"),n.length=i.length,n}return i},ye=(e,u)=>{let i=!1;return e.forEach(n=>{n.nodes.indexOf(u)>=0&&(i=!0)}),i},ve=(e,u)=>{let i=[];return e.nodes.forEach((n,c)=>{ye(u,n)||i.push(e.nodes[c])}),{nodes:i}},Ve={firstGraph:Be},je={defaultConfig:()=>te.flowchart,setAccTitle:qt,getAccTitle:Wt,getAccDescription:Zt,setAccDescription:Qt,addVertex:se,lookUpDomId:G1,addLink:ie,updateLinkInterpolate:re,updateLink:ne,addClass:ae,setDirection:ce,setClass:nt,setTooltip:Pe,getTooltip:le,setClickEvent:he,setLink:oe,bindFunctions:fe,getDirection:pe,getVertices:Ae,getEdges:de,getClasses:Ee,clear:be,setGen:ge,defaultStyle:De,addSubGraph:Fe,getDepthFirstPos:Ce,indexNodes:_e,getSubGraphs:xe,destructLink:me,lex:Ve,exists:ye,makeUniq:ve,setDiagramTitle:Jt,getDiagramTitle:$t},qe=Object.freeze(Object.defineProperty({__proto__:null,addClass:ae,addLink:ie,addSingleLink:ue,addSubGraph:Fe,addVertex:se,bindFunctions:fe,clear:be,default:je,defaultStyle:De,destructLink:me,firstGraph:Be,getClasses:Ee,getDepthFirstPos:Ce,getDirection:pe,getEdges:de,getSubGraphs:xe,getTooltip:le,getVertices:Ae,indexNodes:_e,lex:Ve,lookUpDomId:G1,setClass:nt,setClickEvent:he,setDirection:ce,setGen:ge,setLink:oe,updateLink:ne,updateLinkInterpolate:re},Symbol.toStringTag,{value:"Module"}));export{He as a,je as b,qe as c}; +//# sourceMappingURL=chunk-CA32PY7O.min.js.map diff --git a/public/chunk-CA32PY7O.min.js.map b/public/chunk-CA32PY7O.min.js.map new file mode 100644 index 000000000..1f097d415 --- /dev/null +++ b/public/chunk-CA32PY7O.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/mermaid/dist/flowDb-c1833063.js"], + "sourcesContent": ["import { select } from \"d3\";\nimport { K as defaultConfig, s as setAccTitle, g as getAccTitle, a as getAccDescription, b as setAccDescription, q as setDiagramTitle, t as getDiagramTitle, c as getConfig, l as log, u as utils, v as clear$1, e as common } from \"./mermaid-6dc72991.js\";\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 4], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 8, 9, 10, 11, 27, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $V4 = [2, 2], $V5 = [1, 13], $V6 = [1, 14], $V7 = [1, 15], $V8 = [1, 16], $V9 = [1, 23], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 73, 75], $VD = [1, 88], $VE = [1, 93], $VF = [1, 92], $VG = [1, 89], $VH = [1, 85], $VI = [1, 91], $VJ = [1, 87], $VK = [1, 94], $VL = [1, 90], $VM = [1, 95], $VN = [1, 86], $VO = [8, 9, 10, 11, 73, 75], $VP = [8, 9, 10, 11, 44, 73, 75], $VQ = [8, 9, 10, 11, 29, 42, 44, 46, 48, 50, 52, 54, 56, 58, 61, 63, 65, 66, 68, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VR = [8, 9, 11, 42, 58, 73, 75, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VS = [42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], $VT = [1, 121], $VU = [1, 120], $VV = [1, 128], $VW = [1, 142], $VX = [1, 143], $VY = [1, 144], $VZ = [1, 145], $V_ = [1, 130], $V$ = [1, 132], $V01 = [1, 136], $V11 = [1, 137], $V21 = [1, 138], $V31 = [1, 139], $V41 = [1, 140], $V51 = [1, 141], $V61 = [1, 146], $V71 = [1, 147], $V81 = [1, 126], $V91 = [1, 127], $Va1 = [1, 134], $Vb1 = [1, 129], $Vc1 = [1, 133], $Vd1 = [1, 131], $Ve1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 42, 58, 81, 82, 83, 84, 85, 86, 99, 102, 103, 106, 108, 111, 112, 113, 118, 119, 120, 121], $Vf1 = [1, 149], $Vg1 = [8, 9, 11], $Vh1 = [8, 9, 10, 11, 14, 42, 58, 86, 102, 103, 106, 108, 111, 112, 113], $Vi1 = [1, 169], $Vj1 = [1, 165], $Vk1 = [1, 166], $Vl1 = [1, 170], $Vm1 = [1, 167], $Vn1 = [1, 168], $Vo1 = [75, 113, 116], $Vp1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 42, 58, 73, 81, 82, 83, 84, 85, 86, 87, 102, 106, 108, 111, 112, 113], $Vq1 = [10, 103], $Vr1 = [31, 47, 49, 51, 53, 55, 60, 62, 64, 65, 67, 69, 113, 114, 115], $Vs1 = [1, 235], $Vt1 = [1, 233], $Vu1 = [1, 237], $Vv1 = [1, 231], $Vw1 = [1, 232], $Vx1 = [1, 234], $Vy1 = [1, 236], $Vz1 = [1, 238], $VA1 = [1, 255], $VB1 = [8, 9, 11, 103], $VC1 = [8, 9, 10, 11, 58, 81, 102, 103, 106, 107, 108, 109];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"graphConfig\": 4, \"document\": 5, \"line\": 6, \"statement\": 7, \"SEMI\": 8, \"NEWLINE\": 9, \"SPACE\": 10, \"EOF\": 11, \"GRAPH\": 12, \"NODIR\": 13, \"DIR\": 14, \"FirstStmtSeparator\": 15, \"ending\": 16, \"endToken\": 17, \"spaceList\": 18, \"spaceListNewline\": 19, \"vertexStatement\": 20, \"separator\": 21, \"styleStatement\": 22, \"linkStyleStatement\": 23, \"classDefStatement\": 24, \"classStatement\": 25, \"clickStatement\": 26, \"subgraph\": 27, \"textNoTags\": 28, \"SQS\": 29, \"text\": 30, \"SQE\": 31, \"end\": 32, \"direction\": 33, \"acc_title\": 34, \"acc_title_value\": 35, \"acc_descr\": 36, \"acc_descr_value\": 37, \"acc_descr_multiline_value\": 38, \"link\": 39, \"node\": 40, \"styledVertex\": 41, \"AMP\": 42, \"vertex\": 43, \"STYLE_SEPARATOR\": 44, \"idString\": 45, \"DOUBLECIRCLESTART\": 46, \"DOUBLECIRCLEEND\": 47, \"PS\": 48, \"PE\": 49, \"(-\": 50, \"-)\": 51, \"STADIUMSTART\": 52, \"STADIUMEND\": 53, \"SUBROUTINESTART\": 54, \"SUBROUTINEEND\": 55, \"VERTEX_WITH_PROPS_START\": 56, \"NODE_STRING[field]\": 57, \"COLON\": 58, \"NODE_STRING[value]\": 59, \"PIPE\": 60, \"CYLINDERSTART\": 61, \"CYLINDEREND\": 62, \"DIAMOND_START\": 63, \"DIAMOND_STOP\": 64, \"TAGEND\": 65, \"TRAPSTART\": 66, \"TRAPEND\": 67, \"INVTRAPSTART\": 68, \"INVTRAPEND\": 69, \"linkStatement\": 70, \"arrowText\": 71, \"TESTSTR\": 72, \"START_LINK\": 73, \"edgeText\": 74, \"LINK\": 75, \"edgeTextToken\": 76, \"STR\": 77, \"MD_STR\": 78, \"textToken\": 79, \"keywords\": 80, \"STYLE\": 81, \"LINKSTYLE\": 82, \"CLASSDEF\": 83, \"CLASS\": 84, \"CLICK\": 85, \"DOWN\": 86, \"UP\": 87, \"textNoTagsToken\": 88, \"stylesOpt\": 89, \"idString[vertex]\": 90, \"idString[class]\": 91, \"CALLBACKNAME\": 92, \"CALLBACKARGS\": 93, \"HREF\": 94, \"LINK_TARGET\": 95, \"STR[link]\": 96, \"STR[tooltip]\": 97, \"alphaNum\": 98, \"DEFAULT\": 99, \"numList\": 100, \"INTERPOLATE\": 101, \"NUM\": 102, \"COMMA\": 103, \"style\": 104, \"styleComponent\": 105, \"NODE_STRING\": 106, \"UNIT\": 107, \"BRKT\": 108, \"PCT\": 109, \"idStringToken\": 110, \"MINUS\": 111, \"MULT\": 112, \"UNICODE_TEXT\": 113, \"TEXT\": 114, \"TAGSTART\": 115, \"EDGE_TEXT\": 116, \"alphaNumToken\": 117, \"direction_tb\": 118, \"direction_bt\": 119, \"direction_rl\": 120, \"direction_lr\": 121, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 8: \"SEMI\", 9: \"NEWLINE\", 10: \"SPACE\", 11: \"EOF\", 12: \"GRAPH\", 13: \"NODIR\", 14: \"DIR\", 27: \"subgraph\", 29: \"SQS\", 31: \"SQE\", 32: \"end\", 34: \"acc_title\", 35: \"acc_title_value\", 36: \"acc_descr\", 37: \"acc_descr_value\", 38: \"acc_descr_multiline_value\", 42: \"AMP\", 44: \"STYLE_SEPARATOR\", 46: \"DOUBLECIRCLESTART\", 47: \"DOUBLECIRCLEEND\", 48: \"PS\", 49: \"PE\", 50: \"(-\", 51: \"-)\", 52: \"STADIUMSTART\", 53: \"STADIUMEND\", 54: \"SUBROUTINESTART\", 55: \"SUBROUTINEEND\", 56: \"VERTEX_WITH_PROPS_START\", 57: \"NODE_STRING[field]\", 58: \"COLON\", 59: \"NODE_STRING[value]\", 60: \"PIPE\", 61: \"CYLINDERSTART\", 62: \"CYLINDEREND\", 63: \"DIAMOND_START\", 64: \"DIAMOND_STOP\", 65: \"TAGEND\", 66: \"TRAPSTART\", 67: \"TRAPEND\", 68: \"INVTRAPSTART\", 69: \"INVTRAPEND\", 72: \"TESTSTR\", 73: \"START_LINK\", 75: \"LINK\", 77: \"STR\", 78: \"MD_STR\", 81: \"STYLE\", 82: \"LINKSTYLE\", 83: \"CLASSDEF\", 84: \"CLASS\", 85: \"CLICK\", 86: \"DOWN\", 87: \"UP\", 90: \"idString[vertex]\", 91: \"idString[class]\", 92: \"CALLBACKNAME\", 93: \"CALLBACKARGS\", 94: \"HREF\", 95: \"LINK_TARGET\", 96: \"STR[link]\", 97: \"STR[tooltip]\", 99: \"DEFAULT\", 101: \"INTERPOLATE\", 102: \"NUM\", 103: \"COMMA\", 106: \"NODE_STRING\", 107: \"UNIT\", 108: \"BRKT\", 109: \"PCT\", 111: \"MINUS\", 112: \"MULT\", 113: \"UNICODE_TEXT\", 114: \"TEXT\", 115: \"TAGSTART\", 116: \"EDGE_TEXT\", 118: \"direction_tb\", 119: \"direction_bt\", 120: \"direction_rl\", 121: \"direction_lr\" },\n productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [20, 3], [20, 4], [20, 2], [20, 1], [40, 1], [40, 5], [41, 1], [41, 3], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 8], [43, 4], [43, 4], [43, 4], [43, 6], [43, 4], [43, 4], [43, 4], [43, 4], [43, 4], [43, 1], [39, 2], [39, 3], [39, 3], [39, 1], [39, 3], [74, 1], [74, 2], [74, 1], [74, 1], [70, 1], [71, 3], [30, 1], [30, 2], [30, 1], [30, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [80, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [100, 1], [100, 3], [89, 1], [89, 3], [104, 1], [104, 2], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [105, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [110, 1], [79, 1], [79, 1], [79, 1], [79, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [76, 1], [76, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [117, 1], [45, 1], [45, 2], [98, 1], [98, 2], [33, 1], [33, 1], [33, 1], [33, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 2:\n this.$ = [];\n break;\n case 3:\n if (!Array.isArray($$[$0]) || $$[$0].length > 0) {\n $$[$0 - 1].push($$[$0]);\n }\n this.$ = $$[$0 - 1];\n break;\n case 4:\n case 176:\n this.$ = $$[$0];\n break;\n case 11:\n yy.setDirection(\"TB\");\n this.$ = \"TB\";\n break;\n case 12:\n yy.setDirection($$[$0 - 1]);\n this.$ = $$[$0 - 1];\n break;\n case 27:\n this.$ = $$[$0 - 1].nodes;\n break;\n case 28:\n case 29:\n case 30:\n case 31:\n case 32:\n this.$ = [];\n break;\n case 33:\n this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]);\n break;\n case 34:\n this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]);\n break;\n case 35:\n this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0);\n break;\n case 37:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 38:\n case 39:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 43:\n yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]);\n this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) };\n break;\n case 44:\n yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]);\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) };\n break;\n case 45:\n this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] };\n break;\n case 46:\n this.$ = { stmt: $$[$0], nodes: $$[$0] };\n break;\n case 47:\n this.$ = [$$[$0]];\n break;\n case 48:\n this.$ = $$[$0 - 4].concat($$[$0]);\n break;\n case 49:\n this.$ = $$[$0];\n break;\n case 50:\n this.$ = $$[$0 - 2];\n yy.setClass($$[$0 - 2], $$[$0]);\n break;\n case 51:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"square\");\n break;\n case 52:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"doublecircle\");\n break;\n case 53:\n this.$ = $$[$0 - 5];\n yy.addVertex($$[$0 - 5], $$[$0 - 2], \"circle\");\n break;\n case 54:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"ellipse\");\n break;\n case 55:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"stadium\");\n break;\n case 56:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"subroutine\");\n break;\n case 57:\n this.$ = $$[$0 - 7];\n yy.addVertex($$[$0 - 7], $$[$0 - 1], \"rect\", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]]));\n break;\n case 58:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"cylinder\");\n break;\n case 59:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"round\");\n break;\n case 60:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"diamond\");\n break;\n case 61:\n this.$ = $$[$0 - 5];\n yy.addVertex($$[$0 - 5], $$[$0 - 2], \"hexagon\");\n break;\n case 62:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"odd\");\n break;\n case 63:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"trapezoid\");\n break;\n case 64:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"inv_trapezoid\");\n break;\n case 65:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"lean_right\");\n break;\n case 66:\n this.$ = $$[$0 - 3];\n yy.addVertex($$[$0 - 3], $$[$0 - 1], \"lean_left\");\n break;\n case 67:\n this.$ = $$[$0];\n yy.addVertex($$[$0]);\n break;\n case 68:\n $$[$0 - 1].text = $$[$0];\n this.$ = $$[$0 - 1];\n break;\n case 69:\n case 70:\n $$[$0 - 2].text = $$[$0 - 1];\n this.$ = $$[$0 - 2];\n break;\n case 71:\n this.$ = $$[$0];\n break;\n case 72:\n var inf = yy.destructLink($$[$0], $$[$0 - 2]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length, \"text\": $$[$0 - 1] };\n break;\n case 73:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 74:\n this.$ = { text: $$[$0 - 1].text + \"\" + $$[$0], type: $$[$0 - 1].type };\n break;\n case 75:\n this.$ = { text: $$[$0], type: \"string\" };\n break;\n case 76:\n this.$ = { text: $$[$0], type: \"markdown\" };\n break;\n case 77:\n var inf = yy.destructLink($$[$0]);\n this.$ = { \"type\": inf.type, \"stroke\": inf.stroke, \"length\": inf.length };\n break;\n case 78:\n this.$ = $$[$0 - 1];\n break;\n case 79:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 80:\n this.$ = { text: $$[$0 - 1].text + \"\" + $$[$0], type: $$[$0 - 1].type };\n break;\n case 81:\n this.$ = { text: $$[$0], type: \"string\" };\n break;\n case 82:\n case 97:\n this.$ = { text: $$[$0], type: \"markdown\" };\n break;\n case 94:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 95:\n this.$ = { text: $$[$0 - 1].text + \"\" + $$[$0], type: $$[$0 - 1].type };\n break;\n case 96:\n this.$ = { text: $$[$0], type: \"text\" };\n break;\n case 98:\n this.$ = $$[$0 - 4];\n yy.addClass($$[$0 - 2], $$[$0]);\n break;\n case 99:\n this.$ = $$[$0 - 4];\n yy.setClass($$[$0 - 2], $$[$0]);\n break;\n case 100:\n case 108:\n this.$ = $$[$0 - 1];\n yy.setClickEvent($$[$0 - 1], $$[$0]);\n break;\n case 101:\n case 109:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 102:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 103:\n this.$ = $$[$0 - 4];\n yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 4], $$[$0]);\n break;\n case 104:\n this.$ = $$[$0 - 2];\n yy.setLink($$[$0 - 2], $$[$0]);\n break;\n case 105:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 4], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 4], $$[$0]);\n break;\n case 106:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]);\n break;\n case 107:\n this.$ = $$[$0 - 6];\n yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]);\n yy.setTooltip($$[$0 - 6], $$[$0 - 2]);\n break;\n case 110:\n this.$ = $$[$0 - 1];\n yy.setLink($$[$0 - 1], $$[$0]);\n break;\n case 111:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 3], $$[$0 - 2]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 112:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);\n break;\n case 113:\n this.$ = $$[$0 - 5];\n yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]);\n yy.setTooltip($$[$0 - 5], $$[$0 - 2]);\n break;\n case 114:\n this.$ = $$[$0 - 4];\n yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]);\n break;\n case 115:\n this.$ = $$[$0 - 4];\n yy.updateLink([$$[$0 - 2]], $$[$0]);\n break;\n case 116:\n this.$ = $$[$0 - 4];\n yy.updateLink($$[$0 - 2], $$[$0]);\n break;\n case 117:\n this.$ = $$[$0 - 8];\n yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]);\n yy.updateLink([$$[$0 - 6]], $$[$0]);\n break;\n case 118:\n this.$ = $$[$0 - 8];\n yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]);\n yy.updateLink($$[$0 - 6], $$[$0]);\n break;\n case 119:\n this.$ = $$[$0 - 6];\n yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]);\n break;\n case 120:\n this.$ = $$[$0 - 6];\n yy.updateLinkInterpolate($$[$0 - 4], $$[$0]);\n break;\n case 121:\n case 123:\n this.$ = [$$[$0]];\n break;\n case 122:\n case 124:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 126:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 174:\n this.$ = $$[$0];\n break;\n case 175:\n this.$ = $$[$0 - 1] + \"\" + $$[$0];\n break;\n case 177:\n this.$ = $$[$0 - 1] + \"\" + $$[$0];\n break;\n case 178:\n this.$ = { stmt: \"dir\", value: \"TB\" };\n break;\n case 179:\n this.$ = { stmt: \"dir\", value: \"BT\" };\n break;\n case 180:\n this.$ = { stmt: \"dir\", value: \"RL\" };\n break;\n case 181:\n this.$ = { stmt: \"dir\", value: \"LR\" };\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 9: $V0, 10: $V1, 12: $V2 }, { 1: [3] }, o($V3, $V4, { 5: 6 }), { 4: 7, 9: $V0, 10: $V1, 12: $V2 }, { 4: 8, 9: $V0, 10: $V1, 12: $V2 }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($V3, [2, 9]), o($V3, [2, 10]), o($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o($Vy, [2, 3]), o($Vy, [2, 4]), o($Vy, [2, 5]), o($Vy, [2, 6]), o($Vy, [2, 7]), o($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 39: 59, 70: 63, 73: [1, 64], 75: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 66 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 10: [1, 71], 11: $VB, 21: 72 }, o($Vy, [2, 36]), { 35: [1, 73] }, { 37: [1, 74] }, o($Vy, [2, 39]), o($VC, [2, 46], { 18: 75, 10: $Vx }), { 10: [1, 76] }, { 10: [1, 77] }, { 10: [1, 78] }, { 10: [1, 79] }, { 14: $VD, 42: $VE, 58: $VF, 77: [1, 83], 86: $VG, 92: [1, 80], 94: [1, 81], 98: 82, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, o($Vy, [2, 178]), o($Vy, [2, 179]), o($Vy, [2, 180]), o($Vy, [2, 181]), o($VO, [2, 47]), o($VO, [2, 49], { 44: [1, 96] }), o($VP, [2, 67], { 110: 109, 29: [1, 97], 42: $Vd, 46: [1, 98], 48: [1, 99], 50: [1, 100], 52: [1, 101], 54: [1, 102], 56: [1, 103], 58: $Ve, 61: [1, 104], 63: [1, 105], 65: [1, 106], 66: [1, 107], 68: [1, 108], 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($VQ, [2, 174]), o($VQ, [2, 135]), o($VQ, [2, 136]), o($VQ, [2, 137]), o($VQ, [2, 138]), o($VQ, [2, 139]), o($VQ, [2, 140]), o($VQ, [2, 141]), o($VQ, [2, 142]), o($VQ, [2, 143]), o($VQ, [2, 144]), o($VQ, [2, 145]), o($V3, [2, 12]), o($V3, [2, 18]), o($V3, [2, 19]), { 9: [1, 110] }, o($VR, [2, 26], { 18: 111, 10: $Vx }), o($Vy, [2, 27]), { 40: 112, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vy, [2, 40]), o($Vy, [2, 41]), o($Vy, [2, 42]), o($VS, [2, 71], { 71: 113, 60: [1, 115], 72: [1, 114] }), { 74: 116, 76: 117, 77: [1, 118], 78: [1, 119], 113: $VT, 116: $VU }, o([42, 58, 60, 72, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 77]), o($Vy, [2, 28]), o($Vy, [2, 29]), o($Vy, [2, 30]), o($Vy, [2, 31]), o($Vy, [2, 32]), { 10: $VV, 12: $VW, 14: $VX, 27: $VY, 28: 122, 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 77: [1, 124], 78: [1, 125], 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 123, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Ve1, $V4, { 5: 148 }), o($Vy, [2, 37]), o($Vy, [2, 38]), o($VC, [2, 45], { 42: $Vf1 }), { 42: $Vd, 45: 150, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 99: [1, 151], 100: 152, 102: [1, 153] }, { 42: $Vd, 45: 154, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 42: $Vd, 45: 155, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 100], { 10: [1, 156], 93: [1, 157] }), { 77: [1, 158] }, o($Vg1, [2, 108], { 117: 160, 10: [1, 159], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 110], { 10: [1, 161] }), o($Vh1, [2, 176]), o($Vh1, [2, 163]), o($Vh1, [2, 164]), o($Vh1, [2, 165]), o($Vh1, [2, 166]), o($Vh1, [2, 167]), o($Vh1, [2, 168]), o($Vh1, [2, 169]), o($Vh1, [2, 170]), o($Vh1, [2, 171]), o($Vh1, [2, 172]), o($Vh1, [2, 173]), { 42: $Vd, 45: 162, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 30: 163, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 171, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 173, 48: [1, 172], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 174, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 175, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 176, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 106: [1, 177] }, { 30: 178, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 179, 63: [1, 180], 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 181, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 182, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 183, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VQ, [2, 175]), o($V3, [2, 20]), o($VR, [2, 25]), o($VC, [2, 43], { 18: 184, 10: $Vx }), o($VS, [2, 68], { 10: [1, 185] }), { 10: [1, 186] }, { 30: 187, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 75: [1, 188], 76: 189, 113: $VT, 116: $VU }, o($Vo1, [2, 73]), o($Vo1, [2, 75]), o($Vo1, [2, 76]), o($Vo1, [2, 161]), o($Vo1, [2, 162]), { 8: $Vz, 9: $VA, 10: $VV, 11: $VB, 12: $VW, 14: $VX, 21: 191, 27: $VY, 29: [1, 190], 32: $VZ, 42: $V_, 58: $V$, 73: $V01, 80: 135, 81: $V11, 82: $V21, 83: $V31, 84: $V41, 85: $V51, 86: $V61, 87: $V71, 88: 192, 102: $V81, 106: $V91, 108: $Va1, 111: $Vb1, 112: $Vc1, 113: $Vd1 }, o($Vp1, [2, 94]), o($Vp1, [2, 96]), o($Vp1, [2, 97]), o($Vp1, [2, 150]), o($Vp1, [2, 151]), o($Vp1, [2, 152]), o($Vp1, [2, 153]), o($Vp1, [2, 154]), o($Vp1, [2, 155]), o($Vp1, [2, 156]), o($Vp1, [2, 157]), o($Vp1, [2, 158]), o($Vp1, [2, 159]), o($Vp1, [2, 160]), o($Vp1, [2, 83]), o($Vp1, [2, 84]), o($Vp1, [2, 85]), o($Vp1, [2, 86]), o($Vp1, [2, 87]), o($Vp1, [2, 88]), o($Vp1, [2, 89]), o($Vp1, [2, 90]), o($Vp1, [2, 91]), o($Vp1, [2, 92]), o($Vp1, [2, 93]), { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 193], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vx, 18: 194 }, { 10: [1, 195], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 196] }, { 10: [1, 197], 103: [1, 198] }, o($Vq1, [2, 121]), { 10: [1, 199], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: [1, 200], 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 109, 111: $Vq, 112: $Vr, 113: $Vs }, { 77: [1, 201] }, o($Vg1, [2, 102], { 10: [1, 202] }), o($Vg1, [2, 104], { 10: [1, 203] }), { 77: [1, 204] }, o($Vh1, [2, 177]), { 77: [1, 205], 95: [1, 206] }, o($VO, [2, 50], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), { 31: [1, 207], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Vr1, [2, 79]), o($Vr1, [2, 81]), o($Vr1, [2, 82]), o($Vr1, [2, 146]), o($Vr1, [2, 147]), o($Vr1, [2, 148]), o($Vr1, [2, 149]), { 47: [1, 209], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 210, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 49: [1, 211], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 51: [1, 212], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 53: [1, 213], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 55: [1, 214], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 58: [1, 215] }, { 62: [1, 216], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 64: [1, 217], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 30: 218, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 31: [1, 219], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 220], 69: [1, 221], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 65: $Vi1, 67: [1, 223], 69: [1, 222], 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VC, [2, 44], { 42: $Vf1 }), o($VS, [2, 70]), o($VS, [2, 69]), { 60: [1, 224], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VS, [2, 72]), o($Vo1, [2, 74]), { 30: 225, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($Ve1, $V4, { 5: 226 }), o($Vp1, [2, 95]), o($Vy, [2, 35]), { 41: 227, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 228, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 239, 101: [1, 240], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 241, 101: [1, 242], 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 102: [1, 243] }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 244, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 42: $Vd, 45: 245, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs }, o($Vg1, [2, 101]), { 77: [1, 246] }, { 77: [1, 247], 95: [1, 248] }, o($Vg1, [2, 109]), o($Vg1, [2, 111], { 10: [1, 249] }), o($Vg1, [2, 112]), o($VP, [2, 51]), o($Vr1, [2, 80]), o($VP, [2, 52]), { 49: [1, 250], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 59]), o($VP, [2, 54]), o($VP, [2, 55]), o($VP, [2, 56]), { 106: [1, 251] }, o($VP, [2, 58]), o($VP, [2, 60]), { 64: [1, 252], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 62]), o($VP, [2, 63]), o($VP, [2, 65]), o($VP, [2, 64]), o($VP, [2, 66]), o([10, 42, 58, 86, 99, 102, 103, 106, 108, 111, 112, 113], [2, 78]), { 31: [1, 253], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 254], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, o($VO, [2, 48]), o($Vg1, [2, 114], { 103: $VA1 }), o($VB1, [2, 123], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($VC1, [2, 125]), o($VC1, [2, 127]), o($VC1, [2, 128]), o($VC1, [2, 129]), o($VC1, [2, 130]), o($VC1, [2, 131]), o($VC1, [2, 132]), o($VC1, [2, 133]), o($VC1, [2, 134]), o($Vg1, [2, 115], { 103: $VA1 }), { 10: [1, 257] }, o($Vg1, [2, 116], { 103: $VA1 }), { 10: [1, 258] }, o($Vq1, [2, 122]), o($Vg1, [2, 98], { 103: $VA1 }), o($Vg1, [2, 99], { 110: 109, 42: $Vd, 58: $Ve, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 111: $Vq, 112: $Vr, 113: $Vs }), o($Vg1, [2, 103]), o($Vg1, [2, 105], { 10: [1, 259] }), o($Vg1, [2, 106]), { 95: [1, 260] }, { 49: [1, 261] }, { 60: [1, 262] }, { 64: [1, 263] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 264 }, o($Vy, [2, 34]), { 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 104: 265, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VC1, [2, 126]), { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 266, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 14: $VD, 42: $VE, 58: $VF, 86: $VG, 98: 267, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN, 117: 84 }, { 95: [1, 268] }, o($Vg1, [2, 113]), o($VP, [2, 53]), { 30: 269, 65: $Vi1, 77: $Vj1, 78: $Vk1, 79: 164, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, o($VP, [2, 61]), o($Ve1, $V4, { 5: 270 }), o($VB1, [2, 124], { 105: 256, 10: $Vs1, 58: $Vt1, 81: $Vu1, 102: $Vv1, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }), o($Vg1, [2, 119], { 117: 160, 10: [1, 271], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 120], { 117: 160, 10: [1, 272], 14: $VD, 42: $VE, 58: $VF, 86: $VG, 102: $VH, 103: $VI, 106: $VJ, 108: $VK, 111: $VL, 112: $VM, 113: $VN }), o($Vg1, [2, 107]), { 31: [1, 273], 65: $Vi1, 79: 208, 113: $Vl1, 114: $Vm1, 115: $Vn1 }, { 6: 11, 7: 12, 8: $V5, 9: $V6, 10: $V7, 11: $V8, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: $V9, 32: [1, 274], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 40: 28, 41: 38, 42: $Vd, 43: 39, 45: 40, 58: $Ve, 81: $Vf, 82: $Vg, 83: $Vh, 84: $Vi, 85: $Vj, 86: $Vk, 99: $Vl, 102: $Vm, 103: $Vn, 106: $Vo, 108: $Vp, 110: 41, 111: $Vq, 112: $Vr, 113: $Vs, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 275, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, { 10: $Vs1, 58: $Vt1, 81: $Vu1, 89: 276, 102: $Vv1, 104: 229, 105: 230, 106: $Vw1, 107: $Vx1, 108: $Vy1, 109: $Vz1 }, o($VP, [2, 57]), o($Vy, [2, 33]), o($Vg1, [2, 117], { 103: $VA1 }), o($Vg1, [2, 118], { 103: $VA1 })],\n defaultActions: {},\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex2() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex2();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex2() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {},\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin(\"acc_title\");\n return 34;\n case 1:\n this.popState();\n return \"acc_title_value\";\n case 2:\n this.begin(\"acc_descr\");\n return 36;\n case 3:\n this.popState();\n return \"acc_descr_value\";\n case 4:\n this.begin(\"acc_descr_multiline\");\n break;\n case 5:\n this.popState();\n break;\n case 6:\n return \"acc_descr_multiline_value\";\n case 7:\n this.begin(\"callbackname\");\n break;\n case 8:\n this.popState();\n break;\n case 9:\n this.popState();\n this.begin(\"callbackargs\");\n break;\n case 10:\n return 92;\n case 11:\n this.popState();\n break;\n case 12:\n return 93;\n case 13:\n return \"MD_STR\";\n case 14:\n this.popState();\n break;\n case 15:\n this.begin(\"md_string\");\n break;\n case 16:\n return \"STR\";\n case 17:\n this.popState();\n break;\n case 18:\n this.pushState(\"string\");\n break;\n case 19:\n return 81;\n case 20:\n return 99;\n case 21:\n return 82;\n case 22:\n return 101;\n case 23:\n return 83;\n case 24:\n return 84;\n case 25:\n return 94;\n case 26:\n this.begin(\"click\");\n break;\n case 27:\n this.popState();\n break;\n case 28:\n return 85;\n case 29:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 12;\n case 30:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 12;\n case 31:\n if (yy.lex.firstGraph()) {\n this.begin(\"dir\");\n }\n return 12;\n case 32:\n return 27;\n case 33:\n return 32;\n case 34:\n return 95;\n case 35:\n return 95;\n case 36:\n return 95;\n case 37:\n return 95;\n case 38:\n this.popState();\n return 13;\n case 39:\n this.popState();\n return 14;\n case 40:\n this.popState();\n return 14;\n case 41:\n this.popState();\n return 14;\n case 42:\n this.popState();\n return 14;\n case 43:\n this.popState();\n return 14;\n case 44:\n this.popState();\n return 14;\n case 45:\n this.popState();\n return 14;\n case 46:\n this.popState();\n return 14;\n case 47:\n this.popState();\n return 14;\n case 48:\n this.popState();\n return 14;\n case 49:\n return 118;\n case 50:\n return 119;\n case 51:\n return 120;\n case 52:\n return 121;\n case 53:\n return 102;\n case 54:\n return 108;\n case 55:\n return 44;\n case 56:\n return 58;\n case 57:\n return 42;\n case 58:\n return 8;\n case 59:\n return 103;\n case 60:\n return 112;\n case 61:\n this.popState();\n return 75;\n case 62:\n this.pushState(\"edgeText\");\n return 73;\n case 63:\n return 116;\n case 64:\n this.popState();\n return 75;\n case 65:\n this.pushState(\"thickEdgeText\");\n return 73;\n case 66:\n return 116;\n case 67:\n this.popState();\n return 75;\n case 68:\n this.pushState(\"dottedEdgeText\");\n return 73;\n case 69:\n return 116;\n case 70:\n return 75;\n case 71:\n this.popState();\n return 51;\n case 72:\n return \"TEXT\";\n case 73:\n this.pushState(\"ellipseText\");\n return 50;\n case 74:\n this.popState();\n return 53;\n case 75:\n this.pushState(\"text\");\n return 52;\n case 76:\n this.popState();\n return 55;\n case 77:\n this.pushState(\"text\");\n return 54;\n case 78:\n return 56;\n case 79:\n this.pushState(\"text\");\n return 65;\n case 80:\n this.popState();\n return 62;\n case 81:\n this.pushState(\"text\");\n return 61;\n case 82:\n this.popState();\n return 47;\n case 83:\n this.pushState(\"text\");\n return 46;\n case 84:\n this.popState();\n return 67;\n case 85:\n this.popState();\n return 69;\n case 86:\n return 114;\n case 87:\n this.pushState(\"trapText\");\n return 66;\n case 88:\n this.pushState(\"trapText\");\n return 68;\n case 89:\n return 115;\n case 90:\n return 65;\n case 91:\n return 87;\n case 92:\n return \"SEP\";\n case 93:\n return 86;\n case 94:\n return 112;\n case 95:\n return 108;\n case 96:\n return 42;\n case 97:\n return 106;\n case 98:\n return 111;\n case 99:\n return 113;\n case 100:\n this.popState();\n return 60;\n case 101:\n this.pushState(\"text\");\n return 60;\n case 102:\n this.popState();\n return 49;\n case 103:\n this.pushState(\"text\");\n return 48;\n case 104:\n this.popState();\n return 31;\n case 105:\n this.pushState(\"text\");\n return 29;\n case 106:\n this.popState();\n return 64;\n case 107:\n this.pushState(\"text\");\n return 63;\n case 108:\n return \"TEXT\";\n case 109:\n return \"QUOTE\";\n case 110:\n return 9;\n case 111:\n return 10;\n case 112:\n return 11;\n }\n },\n rules: [/^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:call[\\s]+)/, /^(?:\\([\\s]*\\))/, /^(?:\\()/, /^(?:[^(]*)/, /^(?:\\))/, /^(?:[^)]*)/, /^(?:[^`\"]+)/, /^(?:[`][\"])/, /^(?:[\"][`])/, /^(?:[^\"]+)/, /^(?:[\"])/, /^(?:[\"])/, /^(?:style\\b)/, /^(?:default\\b)/, /^(?:linkStyle\\b)/, /^(?:interpolate\\b)/, /^(?:classDef\\b)/, /^(?:class\\b)/, /^(?:href[\\s])/, /^(?:click[\\s]+)/, /^(?:[\\s\\n])/, /^(?:[^\\s\\n]*)/, /^(?:flowchart-elk\\b)/, /^(?:graph\\b)/, /^(?:flowchart\\b)/, /^(?:subgraph\\b)/, /^(?:end\\b\\s*)/, /^(?:_self\\b)/, /^(?:_blank\\b)/, /^(?:_parent\\b)/, /^(?:_top\\b)/, /^(?:(\\r?\\n)*\\s*\\n)/, /^(?:\\s*LR\\b)/, /^(?:\\s*RL\\b)/, /^(?:\\s*TB\\b)/, /^(?:\\s*BT\\b)/, /^(?:\\s*TD\\b)/, /^(?:\\s*BR\\b)/, /^(?:\\s*<)/, /^(?:\\s*>)/, /^(?:\\s*\\^)/, /^(?:\\s*v\\b)/, /^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\\*)/, /^(?:\\s*[xo<]?--+[-xo>]\\s*)/, /^(?:\\s*[xo<]?--\\s*)/, /^(?:[^-]|-(?!-)+)/, /^(?:\\s*[xo<]?==+[=xo>]\\s*)/, /^(?:\\s*[xo<]?==\\s*)/, /^(?:[^=]|=(?!))/, /^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/, /^(?:\\s*[xo<]?-\\.\\s*)/, /^(?:[^\\.]|\\.(?!))/, /^(?:\\s*~~[\\~]+\\s*)/, /^(?:[-/\\)][\\)])/, /^(?:[^\\(\\)\\[\\]\\{\\}]|!\\)+)/, /^(?:\\(-)/, /^(?:\\]\\))/, /^(?:\\(\\[)/, /^(?:\\]\\])/, /^(?:\\[\\[)/, /^(?:\\[\\|)/, /^(?:>)/, /^(?:\\)\\])/, /^(?:\\[\\()/, /^(?:\\)\\)\\))/, /^(?:\\(\\(\\()/, /^(?:[\\\\(?=\\])][\\]])/, /^(?:\\/(?=\\])\\])/, /^(?:\\/(?!\\])|\\\\(?!\\])|[^\\\\\\[\\]\\(\\)\\{\\}\\/]+)/, /^(?:\\[\\/)/, /^(?:\\[\\\\)/, /^(?:<)/, /^(?:>)/, /^(?:\\^)/, /^(?:\\\\\\|)/, /^(?:v\\b)/, /^(?:\\*)/, /^(?:#)/, /^(?:&)/, /^(?:([A-Za-z0-9!\"\\#$%&'*+\\.`?\\\\_\\/]|-(?=[^\\>\\-\\.])|(?!))+)/, /^(?:-)/, /^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/, /^(?:\\|)/, /^(?:\\|)/, /^(?:\\))/, /^(?:\\()/, /^(?:\\])/, /^(?:\\[)/, /^(?:(\\}))/, /^(?:\\{)/, /^(?:[^\\[\\]\\(\\)\\{\\}\\|\\\"]+)/, /^(?:\")/, /^(?:(\\r?\\n)+)/, /^(?:\\s)/, /^(?:$)/],\n conditions: { \"callbackargs\": { \"rules\": [11, 12, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"callbackname\": { \"rules\": [8, 9, 10, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"href\": { \"rules\": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"click\": { \"rules\": [15, 18, 27, 28, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"dottedEdgeText\": { \"rules\": [15, 18, 67, 69, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"thickEdgeText\": { \"rules\": [15, 18, 64, 66, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"edgeText\": { \"rules\": [15, 18, 61, 63, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"trapText\": { \"rules\": [15, 18, 70, 73, 75, 77, 81, 83, 84, 85, 86, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"ellipseText\": { \"rules\": [15, 18, 70, 71, 72, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"text\": { \"rules\": [15, 18, 70, 73, 74, 75, 76, 77, 80, 81, 82, 83, 87, 88, 100, 101, 102, 103, 104, 105, 106, 107, 108], \"inclusive\": false }, \"vertex\": { \"rules\": [15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"dir\": { \"rules\": [15, 18, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [5, 6, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"acc_descr\": { \"rules\": [3, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"acc_title\": { \"rules\": [1, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"md_string\": { \"rules\": [13, 14, 15, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"string\": { \"rules\": [15, 16, 17, 18, 70, 73, 75, 77, 81, 83, 87, 88, 101, 103, 105, 107], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 2, 4, 7, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 67, 68, 70, 73, 75, 77, 78, 79, 81, 83, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 103, 105, 107, 109, 110, 111, 112], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nconst MERMAID_DOM_ID_PREFIX = \"flowchart-\";\nlet vertexCounter = 0;\nlet config = getConfig();\nlet vertices = {};\nlet edges = [];\nlet classes = {};\nlet subGraphs = [];\nlet subGraphLookup = {};\nlet tooltips = {};\nlet subCount = 0;\nlet firstGraphFlag = true;\nlet direction;\nlet version;\nlet funs = [];\nconst sanitizeText = (txt) => common.sanitizeText(txt, config);\nconst lookUpDomId = function(id) {\n const vertexKeys = Object.keys(vertices);\n for (const vertexKey of vertexKeys) {\n if (vertices[vertexKey].id === id) {\n return vertices[vertexKey].domId;\n }\n }\n return id;\n};\nconst addVertex = function(_id, textObj, type, style, classes2, dir, props = {}) {\n let txt;\n let id = _id;\n if (id === void 0) {\n return;\n }\n if (id.trim().length === 0) {\n return;\n }\n if (vertices[id] === void 0) {\n vertices[id] = {\n id,\n labelType: \"text\",\n domId: MERMAID_DOM_ID_PREFIX + id + \"-\" + vertexCounter,\n styles: [],\n classes: []\n };\n }\n vertexCounter++;\n if (textObj !== void 0) {\n config = getConfig();\n txt = sanitizeText(textObj.text.trim());\n vertices[id].labelType = textObj.type;\n if (txt[0] === '\"' && txt[txt.length - 1] === '\"') {\n txt = txt.substring(1, txt.length - 1);\n }\n vertices[id].text = txt;\n } else {\n if (vertices[id].text === void 0) {\n vertices[id].text = _id;\n }\n }\n if (type !== void 0) {\n vertices[id].type = type;\n }\n if (style !== void 0 && style !== null) {\n style.forEach(function(s) {\n vertices[id].styles.push(s);\n });\n }\n if (classes2 !== void 0 && classes2 !== null) {\n classes2.forEach(function(s) {\n vertices[id].classes.push(s);\n });\n }\n if (dir !== void 0) {\n vertices[id].dir = dir;\n }\n if (vertices[id].props === void 0) {\n vertices[id].props = props;\n } else if (props !== void 0) {\n Object.assign(vertices[id].props, props);\n }\n};\nconst addSingleLink = function(_start, _end, type) {\n let start = _start;\n let end = _end;\n const edge = { start, end, type: void 0, text: \"\", labelType: \"text\" };\n log.info(\"abc78 Got edge...\", edge);\n const linkTextObj = type.text;\n if (linkTextObj !== void 0) {\n edge.text = sanitizeText(linkTextObj.text.trim());\n if (edge.text[0] === '\"' && edge.text[edge.text.length - 1] === '\"') {\n edge.text = edge.text.substring(1, edge.text.length - 1);\n }\n edge.labelType = linkTextObj.type;\n }\n if (type !== void 0) {\n edge.type = type.type;\n edge.stroke = type.stroke;\n edge.length = type.length;\n }\n if ((edge == null ? void 0 : edge.length) > 10) {\n edge.length = 10;\n }\n if (edges.length < (config.maxEdges ?? 500)) {\n log.info(\"abc78 pushing edge...\");\n edges.push(edge);\n } else {\n throw new Error(\n `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config.maxEdges}.\n\nInitialize mermaid with maxEdges set to a higher number to allow more edges.\nYou cannot set this config via configuration inside the diagram as it is a secure config.\nYou have to call mermaid.initialize.`\n );\n }\n};\nconst addLink = function(_start, _end, type) {\n log.info(\"addLink (abc78)\", _start, _end, type);\n let i, j;\n for (i = 0; i < _start.length; i++) {\n for (j = 0; j < _end.length; j++) {\n addSingleLink(_start[i], _end[j], type);\n }\n }\n};\nconst updateLinkInterpolate = function(positions, interp) {\n positions.forEach(function(pos) {\n if (pos === \"default\") {\n edges.defaultInterpolate = interp;\n } else {\n edges[pos].interpolate = interp;\n }\n });\n};\nconst updateLink = function(positions, style) {\n positions.forEach(function(pos) {\n if (pos >= edges.length) {\n throw new Error(\n `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)`\n );\n }\n if (pos === \"default\") {\n edges.defaultStyle = style;\n } else {\n if (utils.isSubstringInArray(\"fill\", style) === -1) {\n style.push(\"fill:none\");\n }\n edges[pos].style = style;\n }\n });\n};\nconst addClass = function(ids, style) {\n ids.split(\",\").forEach(function(id) {\n if (classes[id] === void 0) {\n classes[id] = { id, styles: [], textStyles: [] };\n }\n if (style !== void 0 && style !== null) {\n style.forEach(function(s) {\n if (s.match(\"color\")) {\n const newStyle = s.replace(\"fill\", \"bgFill\").replace(\"color\", \"fill\");\n classes[id].textStyles.push(newStyle);\n }\n classes[id].styles.push(s);\n });\n }\n });\n};\nconst setDirection = function(dir) {\n direction = dir;\n if (direction.match(/.*/)) {\n direction = \"LR\";\n }\n if (direction.match(/.*v/)) {\n direction = \"TB\";\n }\n if (direction === \"TD\") {\n direction = \"TB\";\n }\n};\nconst setClass = function(ids, className) {\n ids.split(\",\").forEach(function(_id) {\n let id = _id;\n if (vertices[id] !== void 0) {\n vertices[id].classes.push(className);\n }\n if (subGraphLookup[id] !== void 0) {\n subGraphLookup[id].classes.push(className);\n }\n });\n};\nconst setTooltip = function(ids, tooltip) {\n ids.split(\",\").forEach(function(id) {\n if (tooltip !== void 0) {\n tooltips[version === \"gen-1\" ? lookUpDomId(id) : id] = sanitizeText(tooltip);\n }\n });\n};\nconst setClickFun = function(id, functionName, functionArgs) {\n let domId = lookUpDomId(id);\n if (getConfig().securityLevel !== \"loose\") {\n return;\n }\n if (functionName === void 0) {\n return;\n }\n let argList = [];\n if (typeof functionArgs === \"string\") {\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n if (argList.length === 0) {\n argList.push(id);\n }\n if (vertices[id] !== void 0) {\n vertices[id].haveCallback = true;\n funs.push(function() {\n const elem = document.querySelector(`[id=\"${domId}\"]`);\n if (elem !== null) {\n elem.addEventListener(\n \"click\",\n function() {\n utils.runFunc(functionName, ...argList);\n },\n false\n );\n }\n });\n }\n};\nconst setLink = function(ids, linkStr, target) {\n ids.split(\",\").forEach(function(id) {\n if (vertices[id] !== void 0) {\n vertices[id].link = utils.formatUrl(linkStr, config);\n vertices[id].linkTarget = target;\n }\n });\n setClass(ids, \"clickable\");\n};\nconst getTooltip = function(id) {\n if (tooltips.hasOwnProperty(id)) {\n return tooltips[id];\n }\n return void 0;\n};\nconst setClickEvent = function(ids, functionName, functionArgs) {\n ids.split(\",\").forEach(function(id) {\n setClickFun(id, functionName, functionArgs);\n });\n setClass(ids, \"clickable\");\n};\nconst bindFunctions = function(element) {\n funs.forEach(function(fun) {\n fun(element);\n });\n};\nconst getDirection = function() {\n return direction.trim();\n};\nconst getVertices = function() {\n return vertices;\n};\nconst getEdges = function() {\n return edges;\n};\nconst getClasses = function() {\n return classes;\n};\nconst setupToolTips = function(element) {\n let tooltipElem = select(\".mermaidTooltip\");\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = select(\"body\").append(\"div\").attr(\"class\", \"mermaidTooltip\").style(\"opacity\", 0);\n }\n const svg = select(element).select(\"svg\");\n const nodes = svg.selectAll(\"g.node\");\n nodes.on(\"mouseover\", function() {\n const el = select(this);\n const title = el.attr(\"title\");\n if (title === null) {\n return;\n }\n const rect = this.getBoundingClientRect();\n tooltipElem.transition().duration(200).style(\"opacity\", \".9\");\n tooltipElem.text(el.attr(\"title\")).style(\"left\", window.scrollX + rect.left + (rect.right - rect.left) / 2 + \"px\").style(\"top\", window.scrollY + rect.bottom + \"px\");\n tooltipElem.html(tooltipElem.html().replace(/<br\\/>/g, \"
\"));\n el.classed(\"hover\", true);\n }).on(\"mouseout\", function() {\n tooltipElem.transition().duration(500).style(\"opacity\", 0);\n const el = select(this);\n el.classed(\"hover\", false);\n });\n};\nfuns.push(setupToolTips);\nconst clear = function(ver = \"gen-1\") {\n vertices = {};\n classes = {};\n edges = [];\n funs = [setupToolTips];\n subGraphs = [];\n subGraphLookup = {};\n subCount = 0;\n tooltips = {};\n firstGraphFlag = true;\n version = ver;\n config = getConfig();\n clear$1();\n};\nconst setGen = (ver) => {\n version = ver || \"gen-2\";\n};\nconst defaultStyle = function() {\n return \"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;\";\n};\nconst addSubGraph = function(_id, list, _title) {\n let id = _id.text.trim();\n let title = _title.text;\n if (_id === _title && _title.text.match(/\\s/)) {\n id = void 0;\n }\n function uniq(a) {\n const prims = { boolean: {}, number: {}, string: {} };\n const objs = [];\n let dir2;\n const nodeList2 = a.filter(function(item) {\n const type = typeof item;\n if (item.stmt && item.stmt === \"dir\") {\n dir2 = item.value;\n return false;\n }\n if (item.trim() === \"\") {\n return false;\n }\n if (type in prims) {\n return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true;\n } else {\n return objs.includes(item) ? false : objs.push(item);\n }\n });\n return { nodeList: nodeList2, dir: dir2 };\n }\n let nodeList = [];\n const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list));\n nodeList = nl;\n if (version === \"gen-1\") {\n for (let i = 0; i < nodeList.length; i++) {\n nodeList[i] = lookUpDomId(nodeList[i]);\n }\n }\n id = id || \"subGraph\" + subCount;\n title = title || \"\";\n title = sanitizeText(title);\n subCount = subCount + 1;\n const subGraph = {\n id,\n nodes: nodeList,\n title: title.trim(),\n classes: [],\n dir,\n labelType: _title.type\n };\n log.info(\"Adding\", subGraph.id, subGraph.nodes, subGraph.dir);\n subGraph.nodes = makeUniq(subGraph, subGraphs).nodes;\n subGraphs.push(subGraph);\n subGraphLookup[id] = subGraph;\n return id;\n};\nconst getPosForId = function(id) {\n for (const [i, subGraph] of subGraphs.entries()) {\n if (subGraph.id === id) {\n return i;\n }\n }\n return -1;\n};\nlet secCount = -1;\nconst posCrossRef = [];\nconst indexNodes2 = function(id, pos) {\n const nodes = subGraphs[pos].nodes;\n secCount = secCount + 1;\n if (secCount > 2e3) {\n return;\n }\n posCrossRef[secCount] = pos;\n if (subGraphs[pos].id === id) {\n return {\n result: true,\n count: 0\n };\n }\n let count = 0;\n let posCount = 1;\n while (count < nodes.length) {\n const childPos = getPosForId(nodes[count]);\n if (childPos >= 0) {\n const res = indexNodes2(id, childPos);\n if (res.result) {\n return {\n result: true,\n count: posCount + res.count\n };\n } else {\n posCount = posCount + res.count;\n }\n }\n count = count + 1;\n }\n return {\n result: false,\n count: posCount\n };\n};\nconst getDepthFirstPos = function(pos) {\n return posCrossRef[pos];\n};\nconst indexNodes = function() {\n secCount = -1;\n if (subGraphs.length > 0) {\n indexNodes2(\"none\", subGraphs.length - 1);\n }\n};\nconst getSubGraphs = function() {\n return subGraphs;\n};\nconst firstGraph = () => {\n if (firstGraphFlag) {\n firstGraphFlag = false;\n return true;\n }\n return false;\n};\nconst destructStartLink = (_str) => {\n let str = _str.trim();\n let type = \"arrow_open\";\n switch (str[0]) {\n case \"<\":\n type = \"arrow_point\";\n str = str.slice(1);\n break;\n case \"x\":\n type = \"arrow_cross\";\n str = str.slice(1);\n break;\n case \"o\":\n type = \"arrow_circle\";\n str = str.slice(1);\n break;\n }\n let stroke = \"normal\";\n if (str.includes(\"=\")) {\n stroke = \"thick\";\n }\n if (str.includes(\".\")) {\n stroke = \"dotted\";\n }\n return { type, stroke };\n};\nconst countChar = (char, str) => {\n const length = str.length;\n let count = 0;\n for (let i = 0; i < length; ++i) {\n if (str[i] === char) {\n ++count;\n }\n }\n return count;\n};\nconst destructEndLink = (_str) => {\n const str = _str.trim();\n let line = str.slice(0, -1);\n let type = \"arrow_open\";\n switch (str.slice(-1)) {\n case \"x\":\n type = \"arrow_cross\";\n if (str[0] === \"x\") {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n case \">\":\n type = \"arrow_point\";\n if (str[0] === \"<\") {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n case \"o\":\n type = \"arrow_circle\";\n if (str[0] === \"o\") {\n type = \"double_\" + type;\n line = line.slice(1);\n }\n break;\n }\n let stroke = \"normal\";\n let length = line.length - 1;\n if (line[0] === \"=\") {\n stroke = \"thick\";\n }\n if (line[0] === \"~\") {\n stroke = \"invisible\";\n }\n let dots = countChar(\".\", line);\n if (dots) {\n stroke = \"dotted\";\n length = dots;\n }\n return { type, stroke, length };\n};\nconst destructLink = (_str, _startStr) => {\n const info = destructEndLink(_str);\n let startInfo;\n if (_startStr) {\n startInfo = destructStartLink(_startStr);\n if (startInfo.stroke !== info.stroke) {\n return { type: \"INVALID\", stroke: \"INVALID\" };\n }\n if (startInfo.type === \"arrow_open\") {\n startInfo.type = info.type;\n } else {\n if (startInfo.type !== info.type) {\n return { type: \"INVALID\", stroke: \"INVALID\" };\n }\n startInfo.type = \"double_\" + startInfo.type;\n }\n if (startInfo.type === \"double_arrow\") {\n startInfo.type = \"double_arrow_point\";\n }\n startInfo.length = info.length;\n return startInfo;\n }\n return info;\n};\nconst exists = (allSgs, _id) => {\n let res = false;\n allSgs.forEach((sg) => {\n const pos = sg.nodes.indexOf(_id);\n if (pos >= 0) {\n res = true;\n }\n });\n return res;\n};\nconst makeUniq = (sg, allSubgraphs) => {\n const res = [];\n sg.nodes.forEach((_id, pos) => {\n if (!exists(allSubgraphs, _id)) {\n res.push(sg.nodes[pos]);\n }\n });\n return { nodes: res };\n};\nconst lex = {\n firstGraph\n};\nconst flowDb = {\n defaultConfig: () => defaultConfig.flowchart,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n addVertex,\n lookUpDomId,\n addLink,\n updateLinkInterpolate,\n updateLink,\n addClass,\n setDirection,\n setClass,\n setTooltip,\n getTooltip,\n setClickEvent,\n setLink,\n bindFunctions,\n getDirection,\n getVertices,\n getEdges,\n getClasses,\n clear,\n setGen,\n defaultStyle,\n addSubGraph,\n getDepthFirstPos,\n indexNodes,\n getSubGraphs,\n destructLink,\n lex,\n exists,\n makeUniq,\n setDiagramTitle,\n getDiagramTitle\n};\nconst db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n addClass,\n addLink,\n addSingleLink,\n addSubGraph,\n addVertex,\n bindFunctions,\n clear,\n default: flowDb,\n defaultStyle,\n destructLink,\n firstGraph,\n getClasses,\n getDepthFirstPos,\n getDirection,\n getEdges,\n getSubGraphs,\n getTooltip,\n getVertices,\n indexNodes,\n lex,\n lookUpDomId,\n setClass,\n setClickEvent,\n setDirection,\n setGen,\n setLink,\n updateLink,\n updateLinkInterpolate\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n db as d,\n flowDb as f,\n parser$1 as p\n};\n"], + "mappings": "yJAEA,IAAIA,GAAS,UAAW,CACtB,IAAIC,EAAI,SAASC,GAAGC,EAAGC,EAAIC,EAAG,CAC5B,IAAKD,EAAKA,GAAM,CAAC,EAAGC,EAAIH,GAAE,OAAQG,IAAKD,EAAGF,GAAEG,CAAC,CAAC,EAAIF,EAChD,CACF,OAAOC,CACT,EAAGE,EAAM,CAAC,EAAG,CAAC,EAAGC,EAAM,CAAC,EAAG,CAAC,EAAGC,EAAM,CAAC,EAAG,CAAC,EAAGC,EAAM,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,EAAM,CAAC,EAAG,CAAC,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAG,GAAI,GAAI,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAE,EAAGC,GAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAAGC,EAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GAAG,EAAGC,GAAM,CAAC,EAAG,GA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,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,GAAI,CAAC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,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,MAAO,KACT,IAAK,IACH,MAAO,KACT,IAAK,IACH,MAAO,KACT,IAAK,IACH,MAAO,KACT,IAAK,IACH,MAAO,KACT,IAAK,IACH,MAAO,KACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,GACT,IAAK,IACH,MAAO,KACT,IAAK,IACH,MAAO,KACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,UAAU,UAAU,EAClB,GACT,IAAK,IACH,MAAO,KACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,UAAU,eAAe,EACvB,GACT,IAAK,IACH,MAAO,KACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,UAAU,gBAAgB,EACxB,GACT,IAAK,IACH,MAAO,KACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,MAAO,OACT,IAAK,IACH,YAAK,UAAU,aAAa,EACrB,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,UAAU,MAAM,EACd,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,UAAU,MAAM,EACd,GACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,YAAK,UAAU,MAAM,EACd,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,UAAU,MAAM,EACd,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IAC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", + "names": ["parser", "o", "k", "v", "o2", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "$VG", "$VH", "$VI", "$VJ", "$VK", "$VL", "$VM", "$VN", "$VO", "$VP", "$VQ", "$VR", "$VS", "$VT", "$VU", "$VV", "$VW", "$VX", "$VY", "$VZ", "$V_", "$V$", "$V01", "$V11", "$V21", "$V31", "$V41", "$V51", "$V61", "$V71", "$V81", "$V91", "$Va1", "$Vb1", "$Vc1", "$Vd1", "$Ve1", "$Vf1", "$Vg1", "$Vh1", "$Vi1", "$Vj1", "$Vk1", "$Vl1", "$Vm1", "$Vn1", "$Vo1", "$Vp1", "$Vq1", "$Vr1", "$Vs1", "$Vt1", "$Vu1", "$Vv1", "$Vw1", "$Vx1", "$Vy1", "$Vz1", "$VA1", "$VB1", "$VC1", "parser2", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "inf", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "TERROR", "EOF", "args", "lexer2", "sharedState", "yyloc", "ranges", "lex2", "token", "symbol", "state", "action", "r", "yyval", "p", "len", "newState", "expected", "errStr", "lexer", "ch", "lines", "oldLines", "n", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "Parser", "parser$1", "MERMAID_DOM_ID_PREFIX", "vertexCounter", "config", "getConfig", "vertices", "edges", "classes", "subGraphs", "subGraphLookup", "tooltips", "subCount", "firstGraphFlag", "direction", "version", "funs", "sanitizeText", "txt", "common$1", "lookUpDomId", "id", "vertexKeys", "vertexKey", "addVertex", "_id", "textObj", "type", "style", "classes2", "dir", "props", "s", "addSingleLink", "_start", "_end", "edge", "log$1", "linkTextObj", "addLink", "j", "updateLinkInterpolate", "positions", "interp", "pos", "updateLink", "utils", "addClass", "ids", "newStyle", "setDirection", "setClass", "className", "setTooltip", "tooltip", "setClickFun", "functionName", "functionArgs", "domId", "argList", "item", "elem", "setLink", "linkStr", "target", "getTooltip", "setClickEvent", "bindFunctions", "element", "fun", "getDirection", "getVertices", "getEdges", "getClasses", "setupToolTips", "tooltipElem", "select_default", "el", "rect", "clear", "ver", "setGen", "defaultStyle", "addSubGraph", "list", "_title", "title", "uniq", "a", "prims", "objs", "dir2", "nodeList", "nl", "subGraph", "makeUniq", "getPosForId", "secCount", "posCrossRef", "indexNodes2", "nodes", "count", "posCount", "childPos", "res", "getDepthFirstPos", "indexNodes", "getSubGraphs", "firstGraph", "destructStartLink", "_str", "stroke", "countChar", "char", "length", "destructEndLink", "line", "dots", "destructLink", "_startStr", "info", "startInfo", "exists", "allSgs", "sg", "allSubgraphs", "lex", "flowDb", "defaultConfig", "setAccTitle", "getAccTitle", "getAccDescription", "setAccDescription", "setDiagramTitle", "getDiagramTitle", "db"] +} diff --git a/public/chunk-K2MRC2FE.min.js b/public/chunk-K2MRC2FE.min.js new file mode 100644 index 000000000..1aa633836 --- /dev/null +++ b/public/chunk-K2MRC2FE.min.js @@ -0,0 +1,15 @@ +import{$ as qr,Aa as j,Ca as br,Da as yr,Ea as T,Fa as _r,P as kr,Q as E,R as pr,S,T as dr,U as lr,V as Vr,W as re,X as R,Y as ee,Z as xr,_ as te,aa as hr,ba as oe,ca as fe,da as ae,ea as ne,fa as I,ga as gr,ha as m,ia as ie,ja as w,ka as se,la as fr,na as q,oa as H,pa as ue,qa as z,ra as N,sa as cr,ta as me,ua as C,va as L,wa as pe,xa as Y,ya as de,za as Z}from"./chunk-YEACHCAA.min.js";function no(r,e){for(var t=-1,o=r==null?0:r.length;++t-1}var Je=ra;var ea=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ta=/^\w*$/;function oa(r,e){if(m(r))return!1;var t=typeof r;return t=="number"||t=="symbol"||t=="boolean"||r==null||A(r)?!0:ta.test(r)||!ea.test(r)||e!=null&&r in Object(e)}var Q=oa;var fa=500;function aa(r){var e=re(r,function(o){return t.size===fa&&t.clear(),o}),t=e.cache;return e}var Xe=aa;var na=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ia=/\\(\\)?/g,sa=Xe(function(r){var e=[];return r.charCodeAt(0)===46&&e.push(""),r.replace(na,function(t,o,f,a){e.push(f?a.replace(ia,"$1"):o||t)}),e}),Qe=sa;function ua(r){return r==null?"":Ge(r)}var Cr=ua;function ma(r,e){return m(r)?r:Q(r,e)?[r]:Qe(Cr(r))}var B=ma;var pa=1/0;function da(r){if(typeof r=="string"||A(r))return r;var e=r+"";return e=="0"&&1/r==-pa?"-0":e}var M=da;function la(r,e){e=B(e,r);for(var t=0,o=e.length;r!=null&&t0&&t(i)?e>1?et(i,e-1,t,o,f):J(f,i):o||(f[f.length]=i)}return f}var k=et;function ga(r){var e=r==null?0:r.length;return e?k(r,1):[]}var Hr=ga;function ca(r){return de(pe(r,void 0,Hr),r+"")}var tt=ca;var ba="\\ud800-\\udfff",ya="\\u0300-\\u036f",_a="\\ufe20-\\ufe2f",Aa="\\u20d0-\\u20ff",Oa=ya+_a+Aa,Ea="\\ufe0e\\ufe0f",Ia="\\u200d",Ta=RegExp("["+Ia+ba+Oa+Ea+"]");function va(r){return Ta.test(r)}var ot=va;function Sa(r,e,t,o){var f=-1,a=r==null?0:r.length;for(o&&a&&(t=r[++f]);++fi))return!1;var u=a.get(r),p=a.get(e);if(u&&p)return u==e&&p==r;var d=-1,l=!0,O=t&Ga?new Pr:void 0;for(a.set(r,e),a.set(e,r);++d2?e[2]:void 0;for(f&&j(e[0],e[1],f)&&(o=1);++t-1?f[a?e[n]:n]:void 0}}var wt=Kn;var qn=Math.max;function Hn(r,e,t){var o=r==null?0:r.length;if(!o)return-1;var f=t==null?0:He(t);return f<0&&(f=qn(o+f,0)),wr(r,c(e,3),f)}var Ct=Hn;var zn=wt(Ct),Yn=zn;function Zn(r,e){var t=-1,o=w(r)?Array(r.length):[];return G(r,function(f,a,n){o[++t]=e(f,a,n)}),o}var jr=Zn;function $n(r,e){var t=m(r)?P:jr;return t(r,c(e,3))}var Jn=$n;function Xn(r,e){return r==null?r:xr(r,er(e),C)}var Qn=Xn;function kn(r,e){return r&&rr(r,er(e))}var Vn=kn;function ri(r,e){return r>e}var Lt=ri;var ei=Object.prototype,ti=ei.hasOwnProperty;function oi(r,e){return r!=null&&ti.call(r,e)}var Pt=oi;function fi(r,e){return r!=null&&Gr(r,e,Pt)}var F=fi;var ai="[object String]";function ni(r){return typeof r=="string"||!m(r)&&I(r)&&pr(r)==ai}var Mt=ni;function ii(r,e){return P(e,function(t){return r[t]})}var Ft=ii;function si(r){return r==null?[]:Ft(r,h(r))}var nr=si;function ui(r){return r===void 0}var U=ui;function mi(r,e){return re||a&&n&&s&&!i&&!u||o&&n&&s||!t&&s||!f)return 1;if(!o&&!a&&!u&&r=i)return s;var u=t[o];return s*(u=="desc"?-1:1)}}return r.index-e.index}var Gt=Ii;function Ti(r,e,t){e.length?e=P(e,function(a){return m(a)?function(n){return D(n,a.length===1?a[0]:a)}:a}):e=[L];var o=-1;e=P(e,q(c));var f=jr(r,function(a,n,i){var s=P(e,function(u){return u(a)});return{criteria:s,index:++o,value:a}});return Bt(f,function(a,n){return Gt(a,n,t)})}var Ut=Ti;var vi=Wr("length"),Wt=vi;var Kt="\\ud800-\\udfff",Si="\\u0300-\\u036f",wi="\\ufe20-\\ufe2f",Ci="\\u20d0-\\u20ff",Li=Si+wi+Ci,Pi="\\ufe0e\\ufe0f",Mi="["+Kt+"]",Yr="["+Li+"]",Zr="\\ud83c[\\udffb-\\udfff]",Fi="(?:"+Yr+"|"+Zr+")",qt="[^"+Kt+"]",Ht="(?:\\ud83c[\\udde6-\\uddff]){2}",zt="[\\ud800-\\udbff][\\udc00-\\udfff]",Ri="\\u200d",Yt=Fi+"?",Zt="["+Pi+"]?",Ni="(?:"+Ri+"(?:"+[qt,Ht,zt].join("|")+")"+Zt+Yt+")*",Bi=Zt+Yt+Ni,Di="(?:"+[qt+Yr+"?",Yr,Ht,zt,Mi].join("|")+")",jt=RegExp(Zr+"(?="+Zr+")|"+Di+Bi,"g");function Gi(r){for(var e=jt.lastIndex=0;jt.test(r);)++e;return e}var $t=Gi;function Ui(r){return ot(r)?$t(r):Wt(r)}var Jt=Ui;function Wi(r,e){return Nt(r,e,function(t,o){return Ur(r,o)})}var Xt=Wi;var ji=tt(function(r,e){return r==null?{}:Xt(r,e)}),Ki=ji;var qi=Math.ceil,Hi=Math.max;function zi(r,e,t,o){for(var f=-1,a=Hi(qi((e-r)/(t||1)),0),n=Array(a);a--;)n[o?a:++f]=r,r+=t;return n}var Qt=zi;function Yi(r){return function(e,t,o){return o&&typeof o!="number"&&j(e,t,o)&&(t=o=void 0),e=X(e),t===void 0?(t=e,e=0):t=X(t),o=o===void 0?e1&&j(r,e[0],e[1])?e=[]:t>2&&j(e[0],e[1],e[2])&&(e=[e[0]]),Ut(r,k(e,1),[])}),ts=es;var os=1/0,fs=yr&&1/V(new yr([,-0]))[1]==os?function(r){return new yr(r)}:ze,ro=fs;var as=200;function ns(r,e,t){var o=-1,f=Je,a=r.length,n=!0,i=[],s=i;if(t)n=!1,f=vt;else if(a>=as){var u=e?null:ro(r);if(u)return V(u);n=!1,f=Mr,s=new Pr}else s=e?[]:i;r:for(;++o1?f.setNode(a,t):f.setNode(a)}),this}setNode(e,t){return F(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=K,this._children[e]={},this._children[K][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return F(this._nodes,e)}removeNode(e){var t=this;if(F(this._nodes,e)){var o=function(f){t.removeEdge(t._edgeObjs[f])};delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],v(this.children(e),function(f){t.setParent(f)}),delete this._children[e]),v(h(this._in[e]),o),delete this._in[e],delete this._preds[e],v(h(this._out[e]),o),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(U(t))t=K;else{t+="";for(var o=t;!U(o);o=this.parent(o))if(o===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var t=this._parent[e];if(t!==K)return t}}children(e){if(U(e)&&(e=K),this._isCompound){var t=this._children[e];if(t)return h(t)}else{if(e===K)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var t=this._preds[e];if(t)return h(t)}successors(e){var t=this._sucs[e];if(t)return h(t)}neighbors(e){var t=this.predecessors(e);if(t)return Jr(t,this.successors(e))}isLeaf(e){var t;return this.isDirected()?t=this.successors(e):t=this.neighbors(e),t.length===0}filterNodes(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var o=this;v(this._nodes,function(n,i){e(i)&&t.setNode(i,n)}),v(this._edgeObjs,function(n){t.hasNode(n.v)&&t.hasNode(n.w)&&t.setEdge(n,o.edge(n))});var f={};function a(n){var i=o.parent(n);return i===void 0||t.hasNode(i)?(f[n]=i,i):i in f?f[i]:a(i)}return this._isCompound&&v(t.nodes(),function(n){t.setParent(n,a(n))}),t}setDefaultEdgeLabel(e){return dr(e)||(e=Y(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return nr(this._edgeObjs)}setPath(e,t){var o=this,f=arguments;return $r(e,function(a,n){return f.length>1?o.setEdge(a,n,t):o.setEdge(a,n),n}),this}setEdge(){var e,t,o,f,a=!1,n=arguments[0];typeof n=="object"&&n!==null&&"v"in n?(e=n.v,t=n.w,o=n.name,arguments.length===2&&(f=arguments[1],a=!0)):(e=n,t=arguments[1],o=arguments[3],arguments.length>2&&(f=arguments[2],a=!0)),e=""+e,t=""+t,U(o)||(o=""+o);var i=ir(this._isDirected,e,t,o);if(F(this._edgeLabels,i))return a&&(this._edgeLabels[i]=f),this;if(!U(o)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(t),this._edgeLabels[i]=a?f:this._defaultEdgeLabelFn(e,t,o);var s=gs(this._isDirected,e,t,o);return e=s.v,t=s.w,Object.freeze(s),this._edgeObjs[i]=s,fo(this._preds[t],e),fo(this._sucs[e],t),this._in[t][i]=s,this._out[e][i]=s,this._edgeCount++,this}edge(e,t,o){var f=arguments.length===1?Xr(this._isDirected,arguments[0]):ir(this._isDirected,e,t,o);return this._edgeLabels[f]}hasEdge(e,t,o){var f=arguments.length===1?Xr(this._isDirected,arguments[0]):ir(this._isDirected,e,t,o);return F(this._edgeLabels,f)}removeEdge(e,t,o){var f=arguments.length===1?Xr(this._isDirected,arguments[0]):ir(this._isDirected,e,t,o),a=this._edgeObjs[f];return a&&(e=a.v,t=a.w,delete this._edgeLabels[f],delete this._edgeObjs[f],ao(this._preds[t],e),ao(this._sucs[e],t),delete this._in[t][f],delete this._out[e][f],this._edgeCount--),this}inEdges(e,t){var o=this._in[e];if(o){var f=nr(o);return t?tr(f,function(a){return a.v===t}):f}}outEdges(e,t){var o=this._out[e];if(o){var f=nr(o);return t?tr(f,function(a){return a.w===t}):f}}nodeEdges(e,t){var o=this.inEdges(e,t);if(o)return o.concat(this.outEdges(e,t))}};sr.prototype._nodeCount=0;sr.prototype._edgeCount=0;function fo(r,e){r[e]?r[e]++:r[e]=1}function ao(r,e){--r[e]||delete r[e]}function ir(r,e,t,o){var f=""+e,a=""+t;if(!r&&f>a){var n=f;f=a,a=n}return f+oo+a+oo+(U(o)?hs:o)}function gs(r,e,t,o){var f=""+e,a=""+t;if(!r&&f>a){var n=f;f=a,a=n}var i={v:f,w:a};return o&&(i.name=o),i}function Xr(r,e){return ir(r,e.v,e.w,e.name)}export{Hr as a,Mf as b,Pa as c,Pn as d,Rn as e,Dn as f,v as g,tr as h,Yn as i,Jn as j,Qn as k,Vn as l,F as m,nr as n,U as o,di as p,hi as q,ci as r,yi as s,Ki as t,$i as u,$r as v,rs as w,ts as x,ms as y,ls as z,sr as A}; +/*! Bundled license information: + +lodash-es/lodash.js: + (** + * @license + * Lodash (Custom Build) + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + *) +*/ +//# sourceMappingURL=chunk-K2MRC2FE.min.js.map diff --git a/public/chunk-K2MRC2FE.min.js.map b/public/chunk-K2MRC2FE.min.js.map new file mode 100644 index 000000000..36e5734c1 --- /dev/null +++ b/public/chunk-K2MRC2FE.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/lodash-es/_arrayEach.js", "../../node_modules/lodash-es/keys.js", "../../node_modules/lodash-es/_baseAssign.js", "../../node_modules/lodash-es/_baseAssignIn.js", "../../node_modules/lodash-es/_arrayFilter.js", "../../node_modules/lodash-es/stubArray.js", "../../node_modules/lodash-es/_getSymbols.js", "../../node_modules/lodash-es/_copySymbols.js", "../../node_modules/lodash-es/_arrayPush.js", "../../node_modules/lodash-es/_getSymbolsIn.js", "../../node_modules/lodash-es/_copySymbolsIn.js", "../../node_modules/lodash-es/_baseGetAllKeys.js", "../../node_modules/lodash-es/_getAllKeys.js", "../../node_modules/lodash-es/_getAllKeysIn.js", "../../node_modules/lodash-es/_initCloneArray.js", "../../node_modules/lodash-es/_cloneDataView.js", "../../node_modules/lodash-es/_cloneRegExp.js", "../../node_modules/lodash-es/_cloneSymbol.js", "../../node_modules/lodash-es/_initCloneByTag.js", "../../node_modules/lodash-es/_baseIsMap.js", "../../node_modules/lodash-es/isMap.js", "../../node_modules/lodash-es/_baseIsSet.js", "../../node_modules/lodash-es/isSet.js", "../../node_modules/lodash-es/_baseClone.js", "../../node_modules/lodash-es/clone.js", "../../node_modules/lodash-es/isSymbol.js", "../../node_modules/lodash-es/_arrayMap.js", "../../node_modules/lodash-es/_baseToString.js", "../../node_modules/lodash-es/_trimmedEndIndex.js", "../../node_modules/lodash-es/_baseTrim.js", "../../node_modules/lodash-es/toNumber.js", "../../node_modules/lodash-es/toFinite.js", "../../node_modules/lodash-es/toInteger.js", "../../node_modules/lodash-es/noop.js", "../../node_modules/lodash-es/_baseFindIndex.js", "../../node_modules/lodash-es/_baseIsNaN.js", "../../node_modules/lodash-es/_strictIndexOf.js", "../../node_modules/lodash-es/_baseIndexOf.js", "../../node_modules/lodash-es/_arrayIncludes.js", "../../node_modules/lodash-es/_isKey.js", "../../node_modules/lodash-es/_memoizeCapped.js", "../../node_modules/lodash-es/_stringToPath.js", "../../node_modules/lodash-es/toString.js", "../../node_modules/lodash-es/_castPath.js", "../../node_modules/lodash-es/_toKey.js", "../../node_modules/lodash-es/_baseGet.js", "../../node_modules/lodash-es/get.js", "../../node_modules/lodash-es/_isFlattenable.js", "../../node_modules/lodash-es/_baseFlatten.js", "../../node_modules/lodash-es/flatten.js", "../../node_modules/lodash-es/_flatRest.js", "../../node_modules/lodash-es/_hasUnicode.js", "../../node_modules/lodash-es/_arrayReduce.js", "../../node_modules/lodash-es/cloneDeep.js", "../../node_modules/lodash-es/_setCacheAdd.js", "../../node_modules/lodash-es/_setCacheHas.js", "../../node_modules/lodash-es/_SetCache.js", "../../node_modules/lodash-es/_arraySome.js", "../../node_modules/lodash-es/_cacheHas.js", "../../node_modules/lodash-es/_equalArrays.js", "../../node_modules/lodash-es/_mapToArray.js", "../../node_modules/lodash-es/_setToArray.js", "../../node_modules/lodash-es/_equalByTag.js", "../../node_modules/lodash-es/_equalObjects.js", "../../node_modules/lodash-es/_baseIsEqualDeep.js", "../../node_modules/lodash-es/_baseIsEqual.js", "../../node_modules/lodash-es/_baseIsMatch.js", "../../node_modules/lodash-es/_isStrictComparable.js", "../../node_modules/lodash-es/_getMatchData.js", "../../node_modules/lodash-es/_matchesStrictComparable.js", "../../node_modules/lodash-es/_baseMatches.js", "../../node_modules/lodash-es/_baseHasIn.js", "../../node_modules/lodash-es/_hasPath.js", "../../node_modules/lodash-es/hasIn.js", "../../node_modules/lodash-es/_baseMatchesProperty.js", "../../node_modules/lodash-es/_baseProperty.js", "../../node_modules/lodash-es/_basePropertyDeep.js", "../../node_modules/lodash-es/property.js", "../../node_modules/lodash-es/_baseIteratee.js", "../../node_modules/lodash-es/_baseForOwn.js", "../../node_modules/lodash-es/_createBaseEach.js", "../../node_modules/lodash-es/_baseEach.js", "../../node_modules/lodash-es/now.js", "../../node_modules/lodash-es/defaults.js", "../../node_modules/lodash-es/_arrayIncludesWith.js", "../../node_modules/lodash-es/last.js", "../../node_modules/lodash-es/_castFunction.js", "../../node_modules/lodash-es/forEach.js", "../../node_modules/lodash-es/_baseFilter.js", "../../node_modules/lodash-es/filter.js", "../../node_modules/lodash-es/_createFind.js", "../../node_modules/lodash-es/findIndex.js", "../../node_modules/lodash-es/find.js", "../../node_modules/lodash-es/_baseMap.js", "../../node_modules/lodash-es/map.js", "../../node_modules/lodash-es/forIn.js", "../../node_modules/lodash-es/forOwn.js", "../../node_modules/lodash-es/_baseGt.js", "../../node_modules/lodash-es/_baseHas.js", "../../node_modules/lodash-es/has.js", "../../node_modules/lodash-es/isString.js", "../../node_modules/lodash-es/_baseValues.js", "../../node_modules/lodash-es/values.js", "../../node_modules/lodash-es/isUndefined.js", "../../node_modules/lodash-es/_baseLt.js", "../../node_modules/lodash-es/mapValues.js", "../../node_modules/lodash-es/_baseExtremum.js", "../../node_modules/lodash-es/max.js", "../../node_modules/lodash-es/min.js", "../../node_modules/lodash-es/minBy.js", "../../node_modules/lodash-es/_baseSet.js", "../../node_modules/lodash-es/_basePickBy.js", "../../node_modules/lodash-es/_baseSortBy.js", "../../node_modules/lodash-es/_compareAscending.js", "../../node_modules/lodash-es/_compareMultiple.js", "../../node_modules/lodash-es/_baseOrderBy.js", "../../node_modules/lodash-es/_asciiSize.js", "../../node_modules/lodash-es/_unicodeSize.js", "../../node_modules/lodash-es/_stringSize.js", "../../node_modules/lodash-es/_basePick.js", "../../node_modules/lodash-es/pick.js", "../../node_modules/lodash-es/_baseRange.js", "../../node_modules/lodash-es/_createRange.js", "../../node_modules/lodash-es/range.js", "../../node_modules/lodash-es/_baseReduce.js", "../../node_modules/lodash-es/reduce.js", "../../node_modules/lodash-es/size.js", "../../node_modules/lodash-es/sortBy.js", "../../node_modules/lodash-es/_createSet.js", "../../node_modules/lodash-es/_baseUniq.js", "../../node_modules/lodash-es/union.js", "../../node_modules/lodash-es/uniqueId.js", "../../node_modules/lodash-es/_baseZipObject.js", "../../node_modules/lodash-es/zipObject.js", "../../node_modules/dagre-d3-es/src/graphlib/graph.js"], + "sourcesContent": ["/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n", "import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n", "import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n", "import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n", "import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n", "import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n", "/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n", "import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n", "import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n", "import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n", "import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n", "import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n", "/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n", "import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n", "import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n", "import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n", "import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n", "import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n", "import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n", "import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n", "/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n", "import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n", "/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n", "import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n", "import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n", "import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n", "import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n", "/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n", "/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n", "/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n", "/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n", "import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n", "import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n", "import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n", "import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n", "import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n", "import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n", "import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n", "import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n", "import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n", "import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n", "import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n", "import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n", "import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n", "import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n", "/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nexport default arrayReduce;\n", "import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n", "/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n", "/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n", "import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n", "/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n", "/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n", "import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n", "/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n", "/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n", "import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n", "import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n", "import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n", "import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n", "import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n", "import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n", "import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n", "/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n", "import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n", "/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n", "import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n", "import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n", "import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n", "/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n", "import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n", "import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n", "import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n", "import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n", "import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n", "import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n", "import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n", "import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nexport default defaults;\n", "/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nexport default arrayIncludesWith;\n", "/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n", "import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n", "import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n", "import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nexport default baseFilter;\n", "import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default filter;\n", "import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nexport default createFind;\n", "import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n", "import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nexport default find;\n", "import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nexport default baseMap;\n", "import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n", "import baseFor from './_baseFor.js';\nimport castFunction from './_castFunction.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nexport default forIn;\n", "import baseForOwn from './_baseForOwn.js';\nimport castFunction from './_castFunction.js';\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n return object && baseForOwn(object, castFunction(iteratee));\n}\n\nexport default forOwn;\n", "/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nexport default baseGt;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n", "import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n", "import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n", "import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nexport default baseValues;\n", "import baseValues from './_baseValues.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\n", "/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n", "/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nexport default baseLt;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nexport default mapValues;\n", "import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nexport default baseExtremum;\n", "import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n}\n\nexport default max;\n", "import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nexport default min;\n", "import baseExtremum from './_baseExtremum.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseLt from './_baseLt.js';\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n : undefined;\n}\n\nexport default minBy;\n", "import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n", "import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n", "/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nexport default baseSortBy;\n", "import isSymbol from './isSymbol.js';\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nexport default compareAscending;\n", "import compareAscending from './_compareAscending.js';\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nexport default compareMultiple;\n", "import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nexport default baseOrderBy;\n", "import baseProperty from './_baseProperty.js';\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nexport default asciiSize;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n}\n\nexport default unicodeSize;\n", "import asciiSize from './_asciiSize.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeSize from './_unicodeSize.js';\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n}\n\nexport default stringSize;\n", "import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nexport default basePick;\n", "import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n", "/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\nexport default baseRange;\n", "import baseRange from './_baseRange.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toFinite from './toFinite.js';\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n}\n\nexport default createRange;\n", "import createRange from './_createRange.js';\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nexport default range;\n", "/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nexport default baseReduce;\n", "import arrayReduce from './_arrayReduce.js';\nimport baseEach from './_baseEach.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseReduce from './_baseReduce.js';\nimport isArray from './isArray.js';\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nexport default reduce;\n", "import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport stringSize from './_stringSize.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n}\n\nexport default size;\n", "import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nexport default sortBy;\n", "import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n", "import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseUniq;\n", "import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n", "import toString from './toString.js';\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n}\n\nexport default uniqueId;\n", "/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n}\n\nexport default baseZipObject;\n", "import assignValue from './_assignValue.js';\nimport baseZipObject from './_baseZipObject.js';\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n}\n\nexport default zipObject;\n", "import * as _ from 'lodash-es';\n\nvar DEFAULT_EDGE_NAME = '\\x00';\nvar GRAPH_NODE = '\\x00';\nvar EDGE_KEY_DELIM = '\\x01';\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\nexport class Graph {\n constructor(opts = {}) {\n this._isDirected = _.has(opts, 'directed') ? opts.directed : true;\n this._isMultigraph = _.has(opts, 'multigraph') ? opts.multigraph : false;\n this._isCompound = _.has(opts, 'compound') ? opts.compound : false;\n\n // Label for the graph itself\n this._label = undefined;\n\n // Defaults to be set when creating a new node\n this._defaultNodeLabelFn = _.constant(undefined);\n\n // Defaults to be set when creating a new edge\n this._defaultEdgeLabelFn = _.constant(undefined);\n\n // v -> label\n this._nodes = {};\n\n if (this._isCompound) {\n // v -> parent\n this._parent = {};\n\n // v -> children\n this._children = {};\n this._children[GRAPH_NODE] = {};\n }\n\n // v -> edgeObj\n this._in = {};\n\n // u -> v -> Number\n this._preds = {};\n\n // v -> edgeObj\n this._out = {};\n\n // v -> w -> Number\n this._sucs = {};\n\n // e -> edgeObj\n this._edgeObjs = {};\n\n // e -> label\n this._edgeLabels = {};\n }\n /* === Graph functions ========= */\n isDirected() {\n return this._isDirected;\n }\n isMultigraph() {\n return this._isMultigraph;\n }\n isCompound() {\n return this._isCompound;\n }\n setGraph(label) {\n this._label = label;\n return this;\n }\n graph() {\n return this._label;\n }\n /* === Node functions ========== */\n setDefaultNodeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultNodeLabelFn = newDefault;\n return this;\n }\n nodeCount() {\n return this._nodeCount;\n }\n nodes() {\n return _.keys(this._nodes);\n }\n sources() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._in[v]);\n });\n }\n sinks() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._out[v]);\n });\n }\n setNodes(vs, value) {\n var args = arguments;\n var self = this;\n _.each(vs, function (v) {\n if (args.length > 1) {\n self.setNode(v, value);\n } else {\n self.setNode(v);\n }\n });\n return this;\n }\n setNode(v, value) {\n if (_.has(this._nodes, v)) {\n if (arguments.length > 1) {\n this._nodes[v] = value;\n }\n return this;\n }\n\n // @ts-expect-error\n this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n if (this._isCompound) {\n this._parent[v] = GRAPH_NODE;\n this._children[v] = {};\n this._children[GRAPH_NODE][v] = true;\n }\n this._in[v] = {};\n this._preds[v] = {};\n this._out[v] = {};\n this._sucs[v] = {};\n ++this._nodeCount;\n return this;\n }\n node(v) {\n return this._nodes[v];\n }\n hasNode(v) {\n return _.has(this._nodes, v);\n }\n removeNode(v) {\n var self = this;\n if (_.has(this._nodes, v)) {\n var removeEdge = function (e) {\n self.removeEdge(self._edgeObjs[e]);\n };\n delete this._nodes[v];\n if (this._isCompound) {\n this._removeFromParentsChildList(v);\n delete this._parent[v];\n _.each(this.children(v), function (child) {\n self.setParent(child);\n });\n delete this._children[v];\n }\n _.each(_.keys(this._in[v]), removeEdge);\n delete this._in[v];\n delete this._preds[v];\n _.each(_.keys(this._out[v]), removeEdge);\n delete this._out[v];\n delete this._sucs[v];\n --this._nodeCount;\n }\n return this;\n }\n setParent(v, parent) {\n if (!this._isCompound) {\n throw new Error('Cannot set parent in a non-compound graph');\n }\n\n if (_.isUndefined(parent)) {\n parent = GRAPH_NODE;\n } else {\n // Coerce parent to string\n parent += '';\n for (var ancestor = parent; !_.isUndefined(ancestor); ancestor = this.parent(ancestor)) {\n if (ancestor === v) {\n throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');\n }\n }\n\n this.setNode(parent);\n }\n\n this.setNode(v);\n this._removeFromParentsChildList(v);\n this._parent[v] = parent;\n this._children[parent][v] = true;\n return this;\n }\n _removeFromParentsChildList(v) {\n delete this._children[this._parent[v]][v];\n }\n parent(v) {\n if (this._isCompound) {\n var parent = this._parent[v];\n if (parent !== GRAPH_NODE) {\n return parent;\n }\n }\n }\n children(v) {\n if (_.isUndefined(v)) {\n v = GRAPH_NODE;\n }\n\n if (this._isCompound) {\n var children = this._children[v];\n if (children) {\n return _.keys(children);\n }\n } else if (v === GRAPH_NODE) {\n return this.nodes();\n } else if (this.hasNode(v)) {\n return [];\n }\n }\n predecessors(v) {\n var predsV = this._preds[v];\n if (predsV) {\n return _.keys(predsV);\n }\n }\n successors(v) {\n var sucsV = this._sucs[v];\n if (sucsV) {\n return _.keys(sucsV);\n }\n }\n neighbors(v) {\n var preds = this.predecessors(v);\n if (preds) {\n return _.union(preds, this.successors(v));\n }\n }\n isLeaf(v) {\n var neighbors;\n if (this.isDirected()) {\n neighbors = this.successors(v);\n } else {\n neighbors = this.neighbors(v);\n }\n return neighbors.length === 0;\n }\n filterNodes(filter) {\n // @ts-expect-error\n var copy = new this.constructor({\n directed: this._isDirected,\n multigraph: this._isMultigraph,\n compound: this._isCompound,\n });\n\n copy.setGraph(this.graph());\n\n var self = this;\n _.each(this._nodes, function (value, v) {\n if (filter(v)) {\n copy.setNode(v, value);\n }\n });\n\n _.each(this._edgeObjs, function (e) {\n // @ts-expect-error\n if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n copy.setEdge(e, self.edge(e));\n }\n });\n\n var parents = {};\n function findParent(v) {\n var parent = self.parent(v);\n if (parent === undefined || copy.hasNode(parent)) {\n parents[v] = parent;\n return parent;\n } else if (parent in parents) {\n return parents[parent];\n } else {\n return findParent(parent);\n }\n }\n\n if (this._isCompound) {\n _.each(copy.nodes(), function (v) {\n copy.setParent(v, findParent(v));\n });\n }\n\n return copy;\n }\n /* === Edge functions ========== */\n setDefaultEdgeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultEdgeLabelFn = newDefault;\n return this;\n }\n edgeCount() {\n return this._edgeCount;\n }\n edges() {\n return _.values(this._edgeObjs);\n }\n setPath(vs, value) {\n var self = this;\n var args = arguments;\n _.reduce(vs, function (v, w) {\n if (args.length > 1) {\n self.setEdge(v, w, value);\n } else {\n self.setEdge(v, w);\n }\n return w;\n });\n return this;\n }\n /*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\n setEdge() {\n var v, w, name, value;\n var valueSpecified = false;\n var arg0 = arguments[0];\n\n if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {\n v = arg0.v;\n w = arg0.w;\n name = arg0.name;\n if (arguments.length === 2) {\n value = arguments[1];\n valueSpecified = true;\n }\n } else {\n v = arg0;\n w = arguments[1];\n name = arguments[3];\n if (arguments.length > 2) {\n value = arguments[2];\n valueSpecified = true;\n }\n }\n\n v = '' + v;\n w = '' + w;\n if (!_.isUndefined(name)) {\n name = '' + name;\n }\n\n var e = edgeArgsToId(this._isDirected, v, w, name);\n if (_.has(this._edgeLabels, e)) {\n if (valueSpecified) {\n this._edgeLabels[e] = value;\n }\n return this;\n }\n\n if (!_.isUndefined(name) && !this._isMultigraph) {\n throw new Error('Cannot set a named edge when isMultigraph = false');\n }\n\n // It didn't exist, so we need to create it.\n // First ensure the nodes exist.\n this.setNode(v);\n this.setNode(w);\n\n // @ts-expect-error\n this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n // Ensure we add undirected edges in a consistent way.\n v = edgeObj.v;\n w = edgeObj.w;\n\n Object.freeze(edgeObj);\n this._edgeObjs[e] = edgeObj;\n incrementOrInitEntry(this._preds[w], v);\n incrementOrInitEntry(this._sucs[v], w);\n this._in[w][e] = edgeObj;\n this._out[v][e] = edgeObj;\n this._edgeCount++;\n return this;\n }\n edge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return this._edgeLabels[e];\n }\n hasEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return _.has(this._edgeLabels, e);\n }\n removeEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n var edge = this._edgeObjs[e];\n if (edge) {\n v = edge.v;\n w = edge.w;\n delete this._edgeLabels[e];\n delete this._edgeObjs[e];\n decrementOrRemoveEntry(this._preds[w], v);\n decrementOrRemoveEntry(this._sucs[v], w);\n delete this._in[w][e];\n delete this._out[v][e];\n this._edgeCount--;\n }\n return this;\n }\n inEdges(v, u) {\n var inV = this._in[v];\n if (inV) {\n var edges = _.values(inV);\n if (!u) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.v === u;\n });\n }\n }\n outEdges(v, w) {\n var outV = this._out[v];\n if (outV) {\n var edges = _.values(outV);\n if (!w) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.w === w;\n });\n }\n }\n nodeEdges(v, w) {\n var inEdges = this.inEdges(v, w);\n if (inEdges) {\n return inEdges.concat(this.outEdges(v, w));\n }\n }\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\nfunction incrementOrInitEntry(map, k) {\n if (map[k]) {\n map[k]++;\n } else {\n map[k] = 1;\n }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n if (!--map[k]) {\n delete map[k];\n }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n var edgeObj = { v: v, w: w };\n if (name) {\n edgeObj.name = name;\n }\n return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n"], + "mappings": "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", + "names": ["arrayEach", "array", "iteratee", "index", "length", "arrayEach_default", "keys", "object", "isArrayLike_default", "arrayLikeKeys_default", "baseKeys_default", "keys_default", "baseAssign", "object", "source", "copyObject_default", "keys_default", "baseAssign_default", "baseAssignIn", "object", "source", "copyObject_default", "keysIn_default", "baseAssignIn_default", "arrayFilter", "array", "predicate", "index", "length", "resIndex", "result", "value", "arrayFilter_default", "stubArray", "stubArray_default", "objectProto", "propertyIsEnumerable", "nativeGetSymbols", "getSymbols", "object", "arrayFilter_default", "symbol", "stubArray_default", "getSymbols_default", "copySymbols", "source", "object", "copyObject_default", "getSymbols_default", "copySymbols_default", "arrayPush", "array", "values", "index", "length", "offset", "arrayPush_default", "nativeGetSymbols", "getSymbolsIn", "object", "result", "arrayPush_default", "getSymbols_default", "getPrototype_default", "stubArray_default", "getSymbolsIn_default", "copySymbolsIn", "source", "object", "copyObject_default", "getSymbolsIn_default", "copySymbolsIn_default", "baseGetAllKeys", "object", "keysFunc", "symbolsFunc", "result", "isArray_default", "arrayPush_default", "baseGetAllKeys_default", "getAllKeys", "object", "baseGetAllKeys_default", "keys_default", "getSymbols_default", "getAllKeys_default", "getAllKeysIn", "object", "baseGetAllKeys_default", "keysIn_default", "getSymbolsIn_default", "getAllKeysIn_default", "objectProto", "hasOwnProperty", "initCloneArray", "array", "length", "result", "initCloneArray_default", "cloneDataView", "dataView", "isDeep", "buffer", "cloneArrayBuffer_default", "cloneDataView_default", "reFlags", "cloneRegExp", "regexp", "result", "cloneRegExp_default", "symbolProto", "Symbol_default", "symbolValueOf", "cloneSymbol", "symbol", "cloneSymbol_default", "boolTag", "dateTag", "mapTag", "numberTag", "regexpTag", "setTag", "stringTag", "symbolTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "initCloneByTag", "object", "tag", "isDeep", "Ctor", "cloneArrayBuffer_default", "cloneDataView_default", "cloneTypedArray_default", "cloneRegExp_default", "cloneSymbol_default", "initCloneByTag_default", "mapTag", "baseIsMap", "value", "isObjectLike_default", "getTag_default", "baseIsMap_default", "nodeIsMap", "nodeUtil_default", "isMap", "baseUnary_default", "baseIsMap_default", "isMap_default", "setTag", "baseIsSet", "value", "isObjectLike_default", "getTag_default", "baseIsSet_default", "nodeIsSet", "nodeUtil_default", "isSet", "baseUnary_default", "baseIsSet_default", "isSet_default", "CLONE_DEEP_FLAG", "CLONE_FLAT_FLAG", "CLONE_SYMBOLS_FLAG", "argsTag", "arrayTag", "boolTag", "dateTag", "errorTag", "funcTag", "genTag", "mapTag", "numberTag", "objectTag", "regexpTag", "setTag", "stringTag", "symbolTag", "weakMapTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "cloneableTags", "baseClone", "value", "bitmask", "customizer", "key", "object", "stack", "result", "isDeep", "isFlat", "isFull", "isObject_default", "isArr", "isArray_default", "initCloneArray_default", "copyArray_default", "tag", "getTag_default", "isFunc", "isBuffer_default", "cloneBuffer_default", "initCloneObject_default", "copySymbolsIn_default", "baseAssignIn_default", "copySymbols_default", "baseAssign_default", "initCloneByTag_default", "Stack_default", "stacked", "isSet_default", "subValue", "isMap_default", "keysFunc", "getAllKeysIn_default", "getAllKeys_default", "keysIn_default", "keys_default", "props", "arrayEach_default", "assignValue_default", "baseClone_default", "CLONE_SYMBOLS_FLAG", "clone", "value", "baseClone_default", "clone_default", "symbolTag", "isSymbol", "value", "isObjectLike_default", "baseGetTag_default", "isSymbol_default", "arrayMap", "array", "iteratee", "index", "length", "result", "arrayMap_default", "INFINITY", "symbolProto", "Symbol_default", "symbolToString", "baseToString", "value", "isArray_default", "arrayMap_default", "isSymbol_default", "result", "baseToString_default", "reWhitespace", "trimmedEndIndex", "string", "index", "trimmedEndIndex_default", "reTrimStart", "baseTrim", "string", "trimmedEndIndex_default", "baseTrim_default", "NAN", "reIsBadHex", "reIsBinary", "reIsOctal", "freeParseInt", "toNumber", "value", "isSymbol_default", "isObject_default", "other", "baseTrim_default", "isBinary", "toNumber_default", "INFINITY", "MAX_INTEGER", "toFinite", "value", "toNumber_default", "sign", "toFinite_default", "toInteger", "value", "result", "toFinite_default", "remainder", "toInteger_default", "noop", "noop_default", "baseFindIndex", "array", "predicate", "fromIndex", "fromRight", "length", "index", "baseFindIndex_default", "baseIsNaN", "value", "baseIsNaN_default", "strictIndexOf", "array", "value", "fromIndex", "index", "length", "strictIndexOf_default", "baseIndexOf", "array", "value", "fromIndex", "strictIndexOf_default", "baseFindIndex_default", "baseIsNaN_default", "baseIndexOf_default", "arrayIncludes", "array", "value", "length", "baseIndexOf_default", "arrayIncludes_default", "reIsDeepProp", "reIsPlainProp", "isKey", "value", "object", "isArray_default", "type", "isSymbol_default", "isKey_default", "MAX_MEMOIZE_SIZE", "memoizeCapped", "func", "result", "memoize_default", "key", "cache", "memoizeCapped_default", "rePropName", "reEscapeChar", "stringToPath", "memoizeCapped_default", "string", "result", "match", "number", "quote", "subString", "stringToPath_default", "toString", "value", "baseToString_default", "toString_default", "castPath", "value", "object", "isArray_default", "isKey_default", "stringToPath_default", "toString_default", "castPath_default", "INFINITY", "toKey", "value", "isSymbol_default", "result", "toKey_default", "baseGet", "object", "path", "castPath_default", "index", "length", "toKey_default", "baseGet_default", "get", "object", "path", "defaultValue", "result", "baseGet_default", "get_default", "spreadableSymbol", "Symbol_default", "isFlattenable", "value", "isArray_default", "isArguments_default", "isFlattenable_default", "baseFlatten", "array", "depth", "predicate", "isStrict", "result", "index", "length", "isFlattenable_default", "value", "arrayPush_default", "baseFlatten_default", "flatten", "array", "length", "baseFlatten_default", "flatten_default", "flatRest", "func", "setToString_default", "overRest_default", "flatten_default", "flatRest_default", "rsAstralRange", "rsComboMarksRange", "reComboHalfMarksRange", "rsComboSymbolsRange", "rsComboRange", "rsVarRange", "rsZWJ", "reHasUnicode", "hasUnicode", "string", "hasUnicode_default", "arrayReduce", "array", "iteratee", "accumulator", "initAccum", "index", "length", "arrayReduce_default", "CLONE_DEEP_FLAG", "CLONE_SYMBOLS_FLAG", "cloneDeep", "value", "baseClone_default", "cloneDeep_default", "HASH_UNDEFINED", "setCacheAdd", "value", "setCacheAdd_default", "setCacheHas", "value", "setCacheHas_default", "SetCache", "values", "index", "length", "MapCache_default", "setCacheAdd_default", "setCacheHas_default", "SetCache_default", "arraySome", "array", "predicate", "index", "length", "arraySome_default", "cacheHas", "cache", "key", "cacheHas_default", "COMPARE_PARTIAL_FLAG", "COMPARE_UNORDERED_FLAG", "equalArrays", "array", "other", "bitmask", "customizer", "equalFunc", "stack", "isPartial", "arrLength", "othLength", "arrStacked", "othStacked", "index", "result", "seen", "SetCache_default", "arrValue", "othValue", "compared", "arraySome_default", "othIndex", "cacheHas_default", "equalArrays_default", "mapToArray", "map", "index", "result", "value", "key", "mapToArray_default", "setToArray", "set", "index", "result", "value", "setToArray_default", "COMPARE_PARTIAL_FLAG", "COMPARE_UNORDERED_FLAG", "boolTag", "dateTag", "errorTag", "mapTag", "numberTag", "regexpTag", "setTag", "stringTag", "symbolTag", "arrayBufferTag", "dataViewTag", "symbolProto", "Symbol_default", "symbolValueOf", "equalByTag", "object", "other", "tag", "bitmask", "customizer", "equalFunc", "stack", "Uint8Array_default", "eq_default", "convert", "mapToArray_default", "isPartial", "setToArray_default", "stacked", "result", "equalArrays_default", "equalByTag_default", "COMPARE_PARTIAL_FLAG", "objectProto", "hasOwnProperty", "equalObjects", "object", "other", "bitmask", "customizer", "equalFunc", "stack", "isPartial", "objProps", "getAllKeys_default", "objLength", "othProps", "othLength", "index", "key", "objStacked", "othStacked", "result", "skipCtor", "objValue", "othValue", "compared", "objCtor", "othCtor", "equalObjects_default", "COMPARE_PARTIAL_FLAG", "argsTag", "arrayTag", "objectTag", "objectProto", "hasOwnProperty", "baseIsEqualDeep", "object", "other", "bitmask", "customizer", "equalFunc", "stack", "objIsArr", "isArray_default", "othIsArr", "objTag", "getTag_default", "othTag", "objIsObj", "othIsObj", "isSameTag", "isBuffer_default", "Stack_default", "isTypedArray_default", "equalArrays_default", "equalByTag_default", "objIsWrapped", "othIsWrapped", "objUnwrapped", "othUnwrapped", "equalObjects_default", "baseIsEqualDeep_default", "baseIsEqual", "value", "other", "bitmask", "customizer", "stack", "isObjectLike_default", "baseIsEqualDeep_default", "baseIsEqual_default", "COMPARE_PARTIAL_FLAG", "COMPARE_UNORDERED_FLAG", "baseIsMatch", "object", "source", "matchData", "customizer", "index", "length", "noCustomizer", "data", "key", "objValue", "srcValue", "stack", "Stack_default", "result", "baseIsEqual_default", "baseIsMatch_default", "isStrictComparable", "value", "isObject_default", "isStrictComparable_default", "getMatchData", "object", "result", "keys_default", "length", "key", "value", "isStrictComparable_default", "getMatchData_default", "matchesStrictComparable", "key", "srcValue", "object", "matchesStrictComparable_default", "baseMatches", "source", "matchData", "getMatchData_default", "matchesStrictComparable_default", "object", "baseIsMatch_default", "baseMatches_default", "baseHasIn", "object", "key", "baseHasIn_default", "hasPath", "object", "path", "hasFunc", "castPath_default", "index", "length", "result", "key", "toKey_default", "isLength_default", "isIndex_default", "isArray_default", "isArguments_default", "hasPath_default", "hasIn", "object", "path", "hasPath_default", "baseHasIn_default", "hasIn_default", "COMPARE_PARTIAL_FLAG", "COMPARE_UNORDERED_FLAG", "baseMatchesProperty", "path", "srcValue", "isKey_default", "isStrictComparable_default", "matchesStrictComparable_default", "toKey_default", "object", "objValue", "get_default", "hasIn_default", "baseIsEqual_default", "baseMatchesProperty_default", "baseProperty", "key", "object", "baseProperty_default", "basePropertyDeep", "path", "object", "baseGet_default", "basePropertyDeep_default", "property", "path", "isKey_default", "baseProperty_default", "toKey_default", "basePropertyDeep_default", "property_default", "baseIteratee", "value", "identity_default", "isArray_default", "baseMatchesProperty_default", "baseMatches_default", "property_default", "baseIteratee_default", "baseForOwn", "object", "iteratee", "baseFor_default", "keys_default", "baseForOwn_default", "createBaseEach", "eachFunc", "fromRight", "collection", "iteratee", "isArrayLike_default", "length", "index", "iterable", "createBaseEach_default", "baseEach", "createBaseEach_default", "baseForOwn_default", "baseEach_default", "now", "root_default", "now_default", "objectProto", "hasOwnProperty", "defaults", "baseRest_default", "object", "sources", "index", "length", "guard", "isIterateeCall_default", "source", "props", "keysIn_default", "propsIndex", "propsLength", "key", "value", "eq_default", "defaults_default", "arrayIncludesWith", "array", "value", "comparator", "index", "length", "arrayIncludesWith_default", "last", "array", "length", "last_default", "castFunction", "value", "identity_default", "castFunction_default", "forEach", "collection", "iteratee", "func", "isArray_default", "arrayEach_default", "baseEach_default", "castFunction_default", "forEach_default", "baseFilter", "collection", "predicate", "result", "baseEach_default", "value", "index", "baseFilter_default", "filter", "collection", "predicate", "func", "isArray_default", "arrayFilter_default", "baseFilter_default", "baseIteratee_default", "filter_default", "createFind", "findIndexFunc", "collection", "predicate", "fromIndex", "iterable", "isArrayLike_default", "iteratee", "baseIteratee_default", "keys_default", "key", "index", "createFind_default", "nativeMax", "findIndex", "array", "predicate", "fromIndex", "length", "index", "toInteger_default", "baseFindIndex_default", "baseIteratee_default", "findIndex_default", "find", "createFind_default", "findIndex_default", "find_default", "baseMap", "collection", "iteratee", "index", "result", "isArrayLike_default", "baseEach_default", "value", "key", "baseMap_default", "map", "collection", "iteratee", "func", "isArray_default", "arrayMap_default", "baseMap_default", "baseIteratee_default", "map_default", "forIn", "object", "iteratee", "baseFor_default", "castFunction_default", "keysIn_default", "forIn_default", "forOwn", "object", "iteratee", "baseForOwn_default", "castFunction_default", "forOwn_default", "baseGt", "value", "other", "baseGt_default", "objectProto", "hasOwnProperty", "baseHas", "object", "key", "baseHas_default", "has", "object", "path", "hasPath_default", "baseHas_default", "has_default", "stringTag", "isString", "value", "isArray_default", "isObjectLike_default", "baseGetTag_default", "isString_default", "baseValues", "object", "props", "arrayMap_default", "key", "baseValues_default", "values", "object", "baseValues_default", "keys_default", "values_default", "isUndefined", "value", "isUndefined_default", "baseLt", "value", "other", "baseLt_default", "mapValues", "object", "iteratee", "result", "baseIteratee_default", "baseForOwn_default", "value", "key", "baseAssignValue_default", "mapValues_default", "baseExtremum", "array", "iteratee", "comparator", "index", "length", "value", "current", "computed", "isSymbol_default", "result", "baseExtremum_default", "max", "array", "baseExtremum_default", "identity_default", "baseGt_default", "max_default", "min", "array", "baseExtremum_default", "identity_default", "baseLt_default", "min_default", "minBy", "array", "iteratee", "baseExtremum_default", "baseIteratee_default", "baseLt_default", "minBy_default", "baseSet", "object", "path", "value", "customizer", "isObject_default", "castPath_default", "index", "length", "lastIndex", "nested", "key", "toKey_default", "newValue", "objValue", "isIndex_default", "assignValue_default", "baseSet_default", "basePickBy", "object", "paths", "predicate", "index", "length", "result", "path", "value", "baseGet_default", "baseSet_default", "castPath_default", "basePickBy_default", "baseSortBy", "array", "comparer", "length", "baseSortBy_default", "compareAscending", "value", "other", "valIsDefined", "valIsNull", "valIsReflexive", "valIsSymbol", "isSymbol_default", "othIsDefined", "othIsNull", "othIsReflexive", "othIsSymbol", "compareAscending_default", "compareMultiple", "object", "other", "orders", "index", "objCriteria", "othCriteria", "length", "ordersLength", "result", "compareAscending_default", "order", "compareMultiple_default", "baseOrderBy", "collection", "iteratees", "orders", "arrayMap_default", "iteratee", "isArray_default", "value", "baseGet_default", "identity_default", "index", "baseUnary_default", "baseIteratee_default", "result", "baseMap_default", "key", "criteria", "baseSortBy_default", "object", "other", "compareMultiple_default", "baseOrderBy_default", "asciiSize", "baseProperty_default", "asciiSize_default", "rsAstralRange", "rsComboMarksRange", "reComboHalfMarksRange", "rsComboSymbolsRange", "rsComboRange", "rsVarRange", "rsAstral", "rsCombo", "rsFitz", "rsModifier", "rsNonAstral", "rsRegional", "rsSurrPair", "rsZWJ", "reOptMod", "rsOptVar", "rsOptJoin", "rsSeq", "rsSymbol", "reUnicode", "unicodeSize", "string", "result", "unicodeSize_default", "stringSize", "string", "hasUnicode_default", "unicodeSize_default", "asciiSize_default", "stringSize_default", "basePick", "object", "paths", "basePickBy_default", "value", "path", "hasIn_default", "basePick_default", "pick", "flatRest_default", "object", "paths", "basePick_default", "pick_default", "nativeCeil", "nativeMax", "baseRange", "start", "end", "step", "fromRight", "index", "length", "result", "baseRange_default", "createRange", "fromRight", "start", "end", "step", "isIterateeCall_default", "toFinite_default", "baseRange_default", "createRange_default", "range", "createRange_default", "range_default", "baseReduce", "collection", "iteratee", "accumulator", "initAccum", "eachFunc", "value", "index", "baseReduce_default", "reduce", "collection", "iteratee", "accumulator", "func", "isArray_default", "arrayReduce_default", "baseReduce_default", "initAccum", "baseIteratee_default", "baseEach_default", "reduce_default", "mapTag", "setTag", "size", "collection", "isArrayLike_default", "isString_default", "stringSize_default", "tag", "getTag_default", "baseKeys_default", "size_default", "sortBy", "baseRest_default", "collection", "iteratees", "length", "isIterateeCall_default", "baseOrderBy_default", "baseFlatten_default", "sortBy_default", "INFINITY", "createSet", "Set_default", "setToArray_default", "values", "noop_default", "createSet_default", "LARGE_ARRAY_SIZE", "baseUniq", "array", "iteratee", "comparator", "index", "includes", "arrayIncludes_default", "length", "isCommon", "result", "seen", "arrayIncludesWith_default", "set", "createSet_default", "setToArray_default", "cacheHas_default", "SetCache_default", "outer", "value", "computed", "seenIndex", "baseUniq_default", "union", "baseRest_default", "arrays", "baseUniq_default", "baseFlatten_default", "isArrayLikeObject_default", "union_default", "idCounter", "uniqueId", "prefix", "id", "toString_default", "uniqueId_default", "baseZipObject", "props", "values", "assignFunc", "index", "length", "valsLength", "result", "value", "baseZipObject_default", "zipObject", "props", "values", "baseZipObject_default", "assignValue_default", "zipObject_default", "DEFAULT_EDGE_NAME", "GRAPH_NODE", "EDGE_KEY_DELIM", "Graph", "opts", "has_default", "constant_default", "label", "newDefault", "isFunction_default", "keys_default", "self", "filter_default", "v", "isEmpty_default", "vs", "value", "args", "forEach_default", "removeEdge", "e", "child", "parent", "isUndefined_default", "ancestor", "children", "predsV", "sucsV", "preds", "union_default", "neighbors", "filter", "copy", "parents", "findParent", "values_default", "reduce_default", "w", "name", "valueSpecified", "arg0", "edgeArgsToId", "edgeObj", "edgeArgsToObj", "incrementOrInitEntry", "edgeObjToId", "edge", "decrementOrRemoveEntry", "u", "inV", "edges", "outV", "inEdges", "map", "k", "isDirected", "v_", "w_", "tmp"] +} diff --git a/public/chunk-K4EHOM77.min.js b/public/chunk-K4EHOM77.min.js new file mode 100644 index 000000000..59af3d9b2 --- /dev/null +++ b/public/chunk-K4EHOM77.min.js @@ -0,0 +1,208 @@ +import{Ga as k,Oa as F,Va as vt,fb as At,gb as Lt,hb as It,ib as Ot,jb as Nt,kb as Rt,lb as wt,nb as R}from"./chunk-YEACHCAA.min.js";var gt=function(){var t=function(C,r,n,i){for(n=n||{},i=C.length;i--;n[C[i]]=r);return n},s=[1,2],a=[1,3],h=[1,4],f=[2,4],d=[1,9],y=[1,11],E=[1,15],u=[1,16],b=[1,17],T=[1,18],w=[1,30],j=[1,19],U=[1,20],z=[1,21],M=[1,22],H=[1,23],X=[1,25],K=[1,26],W=[1,27],J=[1,28],q=[1,29],Q=[1,32],Z=[1,33],tt=[1,34],et=[1,35],$=[1,31],c=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],st=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],Dt=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],ht={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"-->":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"-->",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(r,n,i,o,p,e,B){var l=e.length-1;switch(p){case 3:return o.setRootDoc(e[l]),e[l];case 4:this.$=[];break;case 5:e[l]!="nl"&&(e[l-1].push(e[l]),this.$=e[l-1]);break;case 6:case 7:this.$=e[l];break;case 8:this.$="nl";break;case 11:this.$=e[l];break;case 12:let P=e[l-1];P.description=o.trimColon(e[l]),this.$=P;break;case 13:this.$={stmt:"relation",state1:e[l-2],state2:e[l]};break;case 14:let ft=o.trimColon(e[l]);this.$={stmt:"relation",state1:e[l-3],state2:e[l-1],description:ft};break;case 18:this.$={stmt:"state",id:e[l-3],type:"default",description:"",doc:e[l-1]};break;case 19:var v=e[l],O=e[l-2].trim();if(e[l].match(":")){var it=e[l].split(":");v=it[0],O=[O,it[1]]}this.$={stmt:"state",id:v,type:"default",description:O};break;case 20:this.$={stmt:"state",id:e[l-3],type:"default",description:e[l-5],doc:e[l-1]};break;case 21:this.$={stmt:"state",id:e[l],type:"fork"};break;case 22:this.$={stmt:"state",id:e[l],type:"join"};break;case 23:this.$={stmt:"state",id:e[l],type:"choice"};break;case 24:this.$={stmt:"state",id:o.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:e[l-1].trim(),note:{position:e[l-2].trim(),text:e[l].trim()}};break;case 28:this.$=e[l].trim(),o.setAccTitle(this.$);break;case 29:case 30:this.$=e[l].trim(),o.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:e[l-1].trim(),classes:e[l].trim()};break;case 33:this.$={stmt:"applyClass",id:e[l-1].trim(),styleClass:e[l].trim()};break;case 34:o.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:o.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:o.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:o.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:e[l].trim(),type:"default",description:""};break;case 42:this.$={stmt:"state",id:e[l-2].trim(),classes:[e[l].trim()],type:"default",description:""};break;case 43:this.$={stmt:"state",id:e[l-2].trim(),classes:[e[l].trim()],type:"default",description:""};break}},table:[{3:1,4:s,5:a,6:h},{1:[3]},{3:5,4:s,5:a,6:h},{3:6,4:s,5:a,6:h},t([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],f,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:E,16:u,18:b,21:T,23:w,24:j,25:U,26:z,27:M,28:H,31:24,32:X,34:K,36:W,37:J,41:q,44:Q,45:Z,46:tt,47:et,50:$},t(c,[2,5]),{9:36,10:12,11:13,12:14,15:E,16:u,18:b,21:T,23:w,24:j,25:U,26:z,27:M,28:H,31:24,32:X,34:K,36:W,37:J,41:q,44:Q,45:Z,46:tt,47:et,50:$},t(c,[2,7]),t(c,[2,8]),t(c,[2,9]),t(c,[2,10]),t(c,[2,11],{13:[1,37],14:[1,38]}),t(c,[2,15]),{17:[1,39]},t(c,[2,17],{19:[1,40]}),{22:[1,41]},t(c,[2,21]),t(c,[2,22]),t(c,[2,23]),t(c,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},t(c,[2,27]),{33:[1,46]},{35:[1,47]},t(c,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},t(st,[2,40],{51:[1,51]}),t(st,[2,41],{51:[1,52]}),t(c,[2,34]),t(c,[2,35]),t(c,[2,36]),t(c,[2,37]),t(c,[2,6]),t(c,[2,12]),{12:53,23:w,50:$},t(c,[2,16]),t(Dt,f,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},t(c,[2,28]),t(c,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},t(c,[2,13],{13:[1,63]}),{4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:E,16:u,18:b,20:[1,64],21:T,23:w,24:j,25:U,26:z,27:M,28:H,31:24,32:X,34:K,36:W,37:J,41:q,44:Q,45:Z,46:tt,47:et,50:$},t(c,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},t(c,[2,31]),t(c,[2,32]),t(c,[2,33]),t(st,[2,42]),t(st,[2,43]),t(c,[2,14]),t(c,[2,18]),t(Dt,f,{7:68}),t(c,[2,25]),t(c,[2,26]),{4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:E,16:u,18:b,20:[1,69],21:T,23:w,24:j,25:U,26:z,27:M,28:H,31:24,32:X,34:K,36:W,37:J,41:q,44:Q,45:Z,46:tt,47:et,50:$},t(c,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(r,n){if(n.recoverable)this.trace(r);else{var i=new Error(r);throw i.hash=n,i}},parse:function(r){var n=this,i=[0],o=[],p=[null],e=[],B=this.table,l="",v=0,O=0,it=2,P=1,ft=e.slice.call(arguments,1),S=Object.create(this.lexer),A={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(A.yy[dt]=this.yy[dt]);S.setInput(r,A.yy),A.yy.lexer=S,A.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var yt=S.yylloc;e.push(yt);var Wt=S.options&&S.options.ranges;typeof A.yy.parseError=="function"?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Jt(){var D;return D=o.pop()||S.lex()||P,typeof D!="number"&&(D instanceof Array&&(o=D,D=o.pop()),D=n.symbols_[D]||D),D}for(var _,L,m,pt,N={},rt,x,Ct,nt;;){if(L=i[i.length-1],this.defaultActions[L]?m=this.defaultActions[L]:((_===null||typeof _>"u")&&(_=Jt()),m=B[L]&&B[L][_]),typeof m>"u"||!m.length||!m[0]){var St="";nt=[];for(rt in B[L])this.terminals_[rt]&&rt>it&&nt.push("'"+this.terminals_[rt]+"'");S.showPosition?St="Parse error on line "+(v+1)+`: +`+S.showPosition()+` +Expecting `+nt.join(", ")+", got '"+(this.terminals_[_]||_)+"'":St="Parse error on line "+(v+1)+": Unexpected "+(_==P?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(St,{text:S.match,token:this.terminals_[_]||_,line:S.yylineno,loc:yt,expected:nt})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+L+", token: "+_);switch(m[0]){case 1:i.push(_),p.push(S.yytext),e.push(S.yylloc),i.push(m[1]),_=null,O=S.yyleng,l=S.yytext,v=S.yylineno,yt=S.yylloc;break;case 2:if(x=this.productions_[m[1]][1],N.$=p[p.length-x],N._$={first_line:e[e.length-(x||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(x||1)].first_column,last_column:e[e.length-1].last_column},Wt&&(N._$.range=[e[e.length-(x||1)].range[0],e[e.length-1].range[1]]),pt=this.performAction.apply(N,[l,O,v,A.yy,m[1],p,e].concat(ft)),typeof pt<"u")return pt;x&&(i=i.slice(0,-1*x*2),p=p.slice(0,-1*x),e=e.slice(0,-1*x)),i.push(this.productions_[m[1]][0]),p.push(N.$),e.push(N._$),Ct=B[i[i.length-2]][i[i.length-1]],i.push(Ct);break;case 3:return!0}}return!0}},Kt=function(){var C={EOF:1,parseError:function(n,i){if(this.yy.parser)this.yy.parser.parseError(n,i);else throw new Error(n)},setInput:function(r,n){return this.yy=n||this.yy||{},this._input=r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var r=this._input[0];this.yytext+=r,this.yyleng++,this.offset++,this.match+=r,this.matched+=r;var n=r.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),r},unput:function(r){var n=r.length,i=r.split(/(?:\r\n?|\n)/g);this._input=r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var o=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===o.length?this.yylloc.first_column:0)+o[o.length-i.length].length-i[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(r){this.unput(this.match.slice(r))},pastInput:function(){var r=this.matched.substr(0,this.matched.length-this.match.length);return(r.length>20?"...":"")+r.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var r=this.match;return r.length<20&&(r+=this._input.substr(0,20-r.length)),(r.substr(0,20)+(r.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var r=this.pastInput(),n=new Array(r.length+1).join("-");return r+this.upcomingInput()+` +`+n+"^"},test_match:function(r,n){var i,o,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),o=r[0].match(/(?:\r\n?|\n).*/g),o&&(this.yylineno+=o.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:o?o[o.length-1].length-o[o.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+r[0].length},this.yytext+=r[0],this.match+=r[0],this.matches=r,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(r[0].length),this.matched+=r[0],i=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var e in p)this[e]=p[e];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var r,n,i,o;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),e=0;en[0].length)){if(n=i,o=e,this.options.backtrack_lexer){if(r=this.test_match(i,p[e]),r!==!1)return r;if(this._backtrack){n=!1;continue}else return!1}else if(!this.options.flex)break}return n?(r=this.test_match(n,p[o]),r!==!1?r:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var n=this.next();return n||this.lex()},begin:function(n){this.conditionStack.push(n)},popState:function(){var n=this.conditionStack.length-1;return n>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(n){return n=this.conditionStack.length-1-Math.abs(n||0),n>=0?this.conditionStack[n]:"INITIAL"},pushState:function(n){this.begin(n)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(n,i,o,p){switch(o){case 0:return 40;case 1:return 44;case 2:return 45;case 3:return 46;case 4:return 47;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),16;case 13:return 17;case 14:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 29:return this.pushState("SCALE"),16;case 30:return 17;case 31:this.popState();break;case 32:this.pushState("STATE");break;case 33:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),24;case 34:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),25;case 35:return this.popState(),i.yytext=i.yytext.slice(0,-10).trim(),26;case 36:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),24;case 37:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),25;case 38:return this.popState(),i.yytext=i.yytext.slice(0,-10).trim(),26;case 39:return 44;case 40:return 45;case 41:return 46;case 42:return 47;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:return this.popState(),"ID";case 46:this.popState();break;case 47:return"STATE_DESCR";case 48:return 18;case 49:this.popState();break;case 50:return this.popState(),this.pushState("struct"),19;case 51:break;case 52:return this.popState(),20;case 53:break;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 59:break;case 60:return"NOTE_TEXT";case 61:return this.popState(),"ID";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),i.yytext=i.yytext.substr(2).trim(),30;case 64:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),30;case 65:return 6;case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return i.yytext=i.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 74:return 5;case 75:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};return C}();ht.lexer=Kt;function ut(){this.yy={}}return ut.prototype=ht,ht.Parser=ut,new ut}();gt.parser=gt;var De=gt,qt="LR",Ce="TB",_t="state",Ft="relation",Qt="classDef",Zt="applyClass",Et="default",te="divider",bt="[*]",Vt="start",Yt=bt,Gt="end",$t="color",Bt="fill",ee="bgFill",se=",";function jt(){return{}}var Ut=qt,ct=[],V=jt(),zt=()=>({relations:[],states:{},documents:{}}),ot={root:zt()},g=ot.root,Y=0,Pt=0,ie={LINE:0,DOTTED_LINE:1},re={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},at=t=>JSON.parse(JSON.stringify(t)),ne=t=>{k.info("Setting root doc",t),ct=t},ae=()=>ct,lt=(t,s,a)=>{if(s.stmt===Ft)lt(t,s.state1,!0),lt(t,s.state2,!1);else if(s.stmt===_t&&(s.id==="[*]"?(s.id=a?t.id+"_start":t.id+"_end",s.start=a):s.id=s.id.trim()),s.doc){let h=[],f=[],d;for(d=0;d0&&f.length>0){let y={stmt:_t,id:vt(),type:"divider",doc:at(f)};h.push(at(y)),s.doc=h}s.doc.forEach(y=>lt(s,y,!0))}},le=()=>(lt({id:"root"},{id:"root",doc:ct},!0),{id:"root",doc:ct}),ce=t=>{let s;t.doc?s=t.doc:s=t,k.info(s),Mt(!0),k.info("Extract",s),s.forEach(a=>{switch(a.stmt){case _t:I(a.id.trim(),a.type,a.doc,a.description,a.note,a.classes,a.styles,a.textStyles);break;case Ft:Ht(a.state1,a.state2,a.description);break;case Qt:Xt(a.id.trim(),a.classes);break;case Zt:xt(a.id.trim(),a.styleClass);break}})},I=function(t,s=Et,a=null,h=null,f=null,d=null,y=null,E=null){let u=t?.trim();g.states[u]===void 0?(k.info("Adding state ",u,h),g.states[u]={id:u,descriptions:[],type:s,doc:a,note:f,classes:[],styles:[],textStyles:[]}):(g.states[u].doc||(g.states[u].doc=a),g.states[u].type||(g.states[u].type=s)),h&&(k.info("Setting state description",u,h),typeof h=="string"&&kt(u,h.trim()),typeof h=="object"&&h.forEach(b=>kt(u,b.trim()))),f&&(g.states[u].note=f,g.states[u].note.text=F.sanitizeText(g.states[u].note.text,R())),d&&(k.info("Setting state classes",u,d),(typeof d=="string"?[d]:d).forEach(T=>xt(u,T.trim()))),y&&(k.info("Setting state styles",u,y),(typeof y=="string"?[y]:y).forEach(T=>_e(u,T.trim()))),E&&(k.info("Setting state styles",u,y),(typeof E=="string"?[E]:E).forEach(T=>me(u,T.trim())))},Mt=function(t){ot={root:zt()},g=ot.root,Y=0,V=jt(),t||At()},G=function(t){return g.states[t]},oe=function(){return g.states},he=function(){k.info("Documents = ",ot)},ue=function(){return g.relations};function mt(t=""){let s=t;return t===bt&&(Y++,s=`${Vt}${Y}`),s}function Tt(t="",s=Et){return t===bt?Vt:s}function fe(t=""){let s=t;return t===Yt&&(Y++,s=`${Gt}${Y}`),s}function de(t="",s=Et){return t===Yt?Gt:s}function ye(t,s,a){let h=mt(t.id.trim()),f=Tt(t.id.trim(),t.type),d=mt(s.id.trim()),y=Tt(s.id.trim(),s.type);I(h,f,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),I(d,y,s.doc,s.description,s.note,s.classes,s.styles,s.textStyles),g.relations.push({id1:h,id2:d,relationTitle:F.sanitizeText(a,R())})}var Ht=function(t,s,a){if(typeof t=="object")ye(t,s,a);else{let h=mt(t.trim()),f=Tt(t),d=fe(s.trim()),y=de(s);I(h,f),I(d,y),g.relations.push({id1:h,id2:d,title:F.sanitizeText(a,R())})}},kt=function(t,s){let a=g.states[t],h=s.startsWith(":")?s.replace(":","").trim():s;a.descriptions.push(F.sanitizeText(h,R()))},pe=function(t){return t.substring(0,1)===":"?t.substr(2).trim():t.trim()},Se=()=>(Pt++,"divider-id-"+Pt),Xt=function(t,s=""){V[t]===void 0&&(V[t]={id:t,styles:[],textStyles:[]});let a=V[t];s?.split(se).forEach(h=>{let f=h.replace(/([^;]*);/,"$1").trim();if(h.match($t)){let y=f.replace(Bt,ee).replace($t,Bt);a.textStyles.push(y)}a.styles.push(f)})},ge=function(){return V},xt=function(t,s){t.split(",").forEach(function(a){let h=G(a);if(h===void 0){let f=a.trim();I(f),h=G(f)}h.classes.push(s)})},_e=function(t,s){let a=G(t);a!==void 0&&a.textStyles.push(s)},me=function(t,s){let a=G(t);a!==void 0&&a.textStyles.push(s)},Te=()=>Ut,ke=t=>{Ut=t},Ee=t=>t&&t[0]===":"?t.substr(1).trim():t.trim(),ve={getConfig:()=>R().state,addState:I,clear:Mt,getState:G,getStates:oe,getRelations:ue,getClasses:ge,getDirection:Te,addRelation:Ht,getDividerId:Se,setDirection:ke,cleanupLabel:pe,lineType:ie,relationType:re,logDocuments:he,getRootDoc:ae,setRootDoc:ne,getRootDocV2:le,extract:ce,trimColon:Ee,getAccTitle:It,setAccTitle:Lt,getAccDescription:Nt,setAccDescription:Ot,addStyleClass:Xt,setCssClass:xt,addDescription:kt,setDiagramTitle:Rt,getDiagramTitle:wt},be=t=>` +defs #statediagram-barbEnd { + fill: ${t.transitionColor}; + stroke: ${t.transitionColor}; + } +g.stateGroup text { + fill: ${t.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${t.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${t.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.stateGroup line { + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${t.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${t.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + + text { + fill: ${t.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${t.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel .label text { + fill: ${t.transitionLabelColor||t.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${t.transitionLabelColor||t.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${t.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node .fork-join { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node circle.state-end { + fill: ${t.innerEndBackground}; + stroke: ${t.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${t.compositeBackground||t.background}; + // stroke: ${t.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${t.stateBkg||t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${t.lineColor}; +} + +.statediagram-cluster rect { + fill: ${t.compositeTitleBackground}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${t.stateLabelColor}; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${t.stateBorder||t.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${t.compositeBackground||t.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${t.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${t.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${t.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${t.lineColor}; + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} +`,Ae=be;export{De as a,Ce as b,_t as c,Ft as d,Et as e,te as f,ve as g,Ae as h}; +//# sourceMappingURL=chunk-K4EHOM77.min.js.map diff --git a/public/chunk-K4EHOM77.min.js.map b/public/chunk-K4EHOM77.min.js.map new file mode 100644 index 000000000..55c5da5e0 --- /dev/null +++ b/public/chunk-K4EHOM77.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/mermaid/dist/styles-0784dbeb.js"], + "sourcesContent": ["import { c as getConfig, g as getAccTitle, s as setAccTitle, a as getAccDescription, b as setAccDescription, q as setDiagramTitle, t as getDiagramTitle, l as log, e as common, v as clear$1, I as generateId } from \"./mermaid-6dc72991.js\";\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 15], $V7 = [1, 16], $V8 = [1, 17], $V9 = [1, 18], $Va = [1, 30], $Vb = [1, 19], $Vc = [1, 20], $Vd = [1, 21], $Ve = [1, 22], $Vf = [1, 23], $Vg = [1, 25], $Vh = [1, 26], $Vi = [1, 27], $Vj = [1, 28], $Vk = [1, 29], $Vl = [1, 32], $Vm = [1, 33], $Vn = [1, 34], $Vo = [1, 35], $Vp = [1, 31], $Vq = [1, 4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vr = [1, 4, 5, 13, 14, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $Vs = [4, 5, 15, 16, 18, 20, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"SPACE\": 4, \"NL\": 5, \"SD\": 6, \"document\": 7, \"line\": 8, \"statement\": 9, \"classDefStatement\": 10, \"cssClassStatement\": 11, \"idStatement\": 12, \"DESCR\": 13, \"-->\": 14, \"HIDE_EMPTY\": 15, \"scale\": 16, \"WIDTH\": 17, \"COMPOSIT_STATE\": 18, \"STRUCT_START\": 19, \"STRUCT_STOP\": 20, \"STATE_DESCR\": 21, \"AS\": 22, \"ID\": 23, \"FORK\": 24, \"JOIN\": 25, \"CHOICE\": 26, \"CONCURRENT\": 27, \"note\": 28, \"notePosition\": 29, \"NOTE_TEXT\": 30, \"direction\": 31, \"acc_title\": 32, \"acc_title_value\": 33, \"acc_descr\": 34, \"acc_descr_value\": 35, \"acc_descr_multiline_value\": 36, \"classDef\": 37, \"CLASSDEF_ID\": 38, \"CLASSDEF_STYLEOPTS\": 39, \"DEFAULT\": 40, \"class\": 41, \"CLASSENTITY_IDS\": 42, \"STYLECLASS\": 43, \"direction_tb\": 44, \"direction_bt\": 45, \"direction_rl\": 46, \"direction_lr\": 47, \"eol\": 48, \";\": 49, \"EDGE_STATE\": 50, \"STYLE_SEPARATOR\": 51, \"left_of\": 52, \"right_of\": 53, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 4: \"SPACE\", 5: \"NL\", 6: \"SD\", 13: \"DESCR\", 14: \"-->\", 15: \"HIDE_EMPTY\", 16: \"scale\", 17: \"WIDTH\", 18: \"COMPOSIT_STATE\", 19: \"STRUCT_START\", 20: \"STRUCT_STOP\", 21: \"STATE_DESCR\", 22: \"AS\", 23: \"ID\", 24: \"FORK\", 25: \"JOIN\", 26: \"CHOICE\", 27: \"CONCURRENT\", 28: \"note\", 30: \"NOTE_TEXT\", 32: \"acc_title\", 33: \"acc_title_value\", 34: \"acc_descr\", 35: \"acc_descr_value\", 36: \"acc_descr_multiline_value\", 37: \"classDef\", 38: \"CLASSDEF_ID\", 39: \"CLASSDEF_STYLEOPTS\", 40: \"DEFAULT\", 41: \"class\", 42: \"CLASSENTITY_IDS\", 43: \"STYLECLASS\", 44: \"direction_tb\", 45: \"direction_bt\", 46: \"direction_rl\", 47: \"direction_lr\", 49: \";\", 50: \"EDGE_STATE\", 51: \"STYLE_SEPARATOR\", 52: \"left_of\", 53: \"right_of\" },\n productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 1], [9, 1], [9, 1], [9, 2], [9, 3], [9, 4], [9, 1], [9, 2], [9, 1], [9, 4], [9, 3], [9, 6], [9, 1], [9, 1], [9, 1], [9, 1], [9, 4], [9, 4], [9, 1], [9, 2], [9, 2], [9, 1], [10, 3], [10, 3], [11, 3], [31, 1], [31, 1], [31, 1], [31, 1], [48, 1], [48, 1], [12, 1], [12, 1], [12, 3], [12, 3], [29, 1], [29, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 3:\n yy.setRootDoc($$[$0]);\n return $$[$0];\n case 4:\n this.$ = [];\n break;\n case 5:\n if ($$[$0] != \"nl\") {\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n }\n break;\n case 6:\n case 7:\n this.$ = $$[$0];\n break;\n case 8:\n this.$ = \"nl\";\n break;\n case 11:\n this.$ = $$[$0];\n break;\n case 12:\n const stateStmt = $$[$0 - 1];\n stateStmt.description = yy.trimColon($$[$0]);\n this.$ = stateStmt;\n break;\n case 13:\n this.$ = { stmt: \"relation\", state1: $$[$0 - 2], state2: $$[$0] };\n break;\n case 14:\n const relDescription = yy.trimColon($$[$0]);\n this.$ = { stmt: \"relation\", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription };\n break;\n case 18:\n this.$ = { stmt: \"state\", id: $$[$0 - 3], type: \"default\", description: \"\", doc: $$[$0 - 1] };\n break;\n case 19:\n var id = $$[$0];\n var description = $$[$0 - 2].trim();\n if ($$[$0].match(\":\")) {\n var parts = $$[$0].split(\":\");\n id = parts[0];\n description = [description, parts[1]];\n }\n this.$ = { stmt: \"state\", id, type: \"default\", description };\n break;\n case 20:\n this.$ = { stmt: \"state\", id: $$[$0 - 3], type: \"default\", description: $$[$0 - 5], doc: $$[$0 - 1] };\n break;\n case 21:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"fork\" };\n break;\n case 22:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"join\" };\n break;\n case 23:\n this.$ = { stmt: \"state\", id: $$[$0], type: \"choice\" };\n break;\n case 24:\n this.$ = { stmt: \"state\", id: yy.getDividerId(), type: \"divider\" };\n break;\n case 25:\n this.$ = { stmt: \"state\", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } };\n break;\n case 28:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 29:\n case 30:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 31:\n case 32:\n this.$ = { stmt: \"classDef\", id: $$[$0 - 1].trim(), classes: $$[$0].trim() };\n break;\n case 33:\n this.$ = { stmt: \"applyClass\", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };\n break;\n case 34:\n yy.setDirection(\"TB\");\n this.$ = { stmt: \"dir\", value: \"TB\" };\n break;\n case 35:\n yy.setDirection(\"BT\");\n this.$ = { stmt: \"dir\", value: \"BT\" };\n break;\n case 36:\n yy.setDirection(\"RL\");\n this.$ = { stmt: \"dir\", value: \"RL\" };\n break;\n case 37:\n yy.setDirection(\"LR\");\n this.$ = { stmt: \"dir\", value: \"LR\" };\n break;\n case 40:\n case 41:\n this.$ = { stmt: \"state\", id: $$[$0].trim(), type: \"default\", description: \"\" };\n break;\n case 42:\n this.$ = { stmt: \"state\", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: \"default\", description: \"\" };\n break;\n case 43:\n this.$ = { stmt: \"state\", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: \"default\", description: \"\" };\n break;\n }\n },\n table: [{ 3: 1, 4: $V0, 5: $V1, 6: $V2 }, { 1: [3] }, { 3: 5, 4: $V0, 5: $V1, 6: $V2 }, { 3: 6, 4: $V0, 5: $V1, 6: $V2 }, o([1, 4, 5, 15, 16, 18, 21, 23, 24, 25, 26, 27, 28, 32, 34, 36, 37, 41, 44, 45, 46, 47, 50], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 5]), { 9: 36, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 7]), o($Vq, [2, 8]), o($Vq, [2, 9]), o($Vq, [2, 10]), o($Vq, [2, 11], { 13: [1, 37], 14: [1, 38] }), o($Vq, [2, 15]), { 17: [1, 39] }, o($Vq, [2, 17], { 19: [1, 40] }), { 22: [1, 41] }, o($Vq, [2, 21]), o($Vq, [2, 22]), o($Vq, [2, 23]), o($Vq, [2, 24]), { 29: 42, 30: [1, 43], 52: [1, 44], 53: [1, 45] }, o($Vq, [2, 27]), { 33: [1, 46] }, { 35: [1, 47] }, o($Vq, [2, 30]), { 38: [1, 48], 40: [1, 49] }, { 42: [1, 50] }, o($Vr, [2, 40], { 51: [1, 51] }), o($Vr, [2, 41], { 51: [1, 52] }), o($Vq, [2, 34]), o($Vq, [2, 35]), o($Vq, [2, 36]), o($Vq, [2, 37]), o($Vq, [2, 6]), o($Vq, [2, 12]), { 12: 53, 23: $Va, 50: $Vp }, o($Vq, [2, 16]), o($Vs, $V3, { 7: 54 }), { 23: [1, 55] }, { 23: [1, 56] }, { 22: [1, 57] }, { 23: [2, 44] }, { 23: [2, 45] }, o($Vq, [2, 28]), o($Vq, [2, 29]), { 39: [1, 58] }, { 39: [1, 59] }, { 43: [1, 60] }, { 23: [1, 61] }, { 23: [1, 62] }, o($Vq, [2, 13], { 13: [1, 63] }), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 64], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 19], { 19: [1, 65] }), { 30: [1, 66] }, { 23: [1, 67] }, o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vr, [2, 42]), o($Vr, [2, 43]), o($Vq, [2, 14]), o($Vq, [2, 18]), o($Vs, $V3, { 7: 68 }), o($Vq, [2, 25]), o($Vq, [2, 26]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 15: $V6, 16: $V7, 18: $V8, 20: [1, 69], 21: $V9, 23: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 31: 24, 32: $Vg, 34: $Vh, 36: $Vi, 37: $Vj, 41: $Vk, 44: $Vl, 45: $Vm, 46: $Vn, 47: $Vo, 50: $Vp }, o($Vq, [2, 20])],\n defaultActions: { 5: [2, 1], 6: [2, 2], 44: [2, 44], 45: [2, 45] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: { \"case-insensitive\": true },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n return 40;\n case 1:\n return 44;\n case 2:\n return 45;\n case 3:\n return 46;\n case 4:\n return 47;\n case 5:\n break;\n case 6:\n break;\n case 7:\n return 5;\n case 8:\n break;\n case 9:\n break;\n case 10:\n break;\n case 11:\n break;\n case 12:\n this.pushState(\"SCALE\");\n return 16;\n case 13:\n return 17;\n case 14:\n this.popState();\n break;\n case 15:\n this.begin(\"acc_title\");\n return 32;\n case 16:\n this.popState();\n return \"acc_title_value\";\n case 17:\n this.begin(\"acc_descr\");\n return 34;\n case 18:\n this.popState();\n return \"acc_descr_value\";\n case 19:\n this.begin(\"acc_descr_multiline\");\n break;\n case 20:\n this.popState();\n break;\n case 21:\n return \"acc_descr_multiline_value\";\n case 22:\n this.pushState(\"CLASSDEF\");\n return 37;\n case 23:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return \"DEFAULT_CLASSDEF_ID\";\n case 24:\n this.popState();\n this.pushState(\"CLASSDEFID\");\n return 38;\n case 25:\n this.popState();\n return 39;\n case 26:\n this.pushState(\"CLASS\");\n return 41;\n case 27:\n this.popState();\n this.pushState(\"CLASS_STYLE\");\n return 42;\n case 28:\n this.popState();\n return 43;\n case 29:\n this.pushState(\"SCALE\");\n return 16;\n case 30:\n return 17;\n case 31:\n this.popState();\n break;\n case 32:\n this.pushState(\"STATE\");\n break;\n case 33:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 24;\n case 34:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 25;\n case 35:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -10).trim();\n return 26;\n case 36:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 24;\n case 37:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 25;\n case 38:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -10).trim();\n return 26;\n case 39:\n return 44;\n case 40:\n return 45;\n case 41:\n return 46;\n case 42:\n return 47;\n case 43:\n this.pushState(\"STATE_STRING\");\n break;\n case 44:\n this.pushState(\"STATE_ID\");\n return \"AS\";\n case 45:\n this.popState();\n return \"ID\";\n case 46:\n this.popState();\n break;\n case 47:\n return \"STATE_DESCR\";\n case 48:\n return 18;\n case 49:\n this.popState();\n break;\n case 50:\n this.popState();\n this.pushState(\"struct\");\n return 19;\n case 51:\n break;\n case 52:\n this.popState();\n return 20;\n case 53:\n break;\n case 54:\n this.begin(\"NOTE\");\n return 28;\n case 55:\n this.popState();\n this.pushState(\"NOTE_ID\");\n return 52;\n case 56:\n this.popState();\n this.pushState(\"NOTE_ID\");\n return 53;\n case 57:\n this.popState();\n this.pushState(\"FLOATING_NOTE\");\n break;\n case 58:\n this.popState();\n this.pushState(\"FLOATING_NOTE_ID\");\n return \"AS\";\n case 59:\n break;\n case 60:\n return \"NOTE_TEXT\";\n case 61:\n this.popState();\n return \"ID\";\n case 62:\n this.popState();\n this.pushState(\"NOTE_TEXT\");\n return 23;\n case 63:\n this.popState();\n yy_.yytext = yy_.yytext.substr(2).trim();\n return 30;\n case 64:\n this.popState();\n yy_.yytext = yy_.yytext.slice(0, -8).trim();\n return 30;\n case 65:\n return 6;\n case 66:\n return 6;\n case 67:\n return 15;\n case 68:\n return 50;\n case 69:\n return 23;\n case 70:\n yy_.yytext = yy_.yytext.trim();\n return 13;\n case 71:\n return 14;\n case 72:\n return 27;\n case 73:\n return 51;\n case 74:\n return 5;\n case 75:\n return \"INVALID\";\n }\n },\n rules: [/^(?:default\\b)/i, /^(?:.*direction\\s+TB[^\\n]*)/i, /^(?:.*direction\\s+BT[^\\n]*)/i, /^(?:.*direction\\s+RL[^\\n]*)/i, /^(?:.*direction\\s+LR[^\\n]*)/i, /^(?:%%(?!\\{)[^\\n]*)/i, /^(?:[^\\}]%%[^\\n]*)/i, /^(?:[\\n]+)/i, /^(?:[\\s]+)/i, /^(?:((?!\\n)\\s)+)/i, /^(?:#[^\\n]*)/i, /^(?:%[^\\n]*)/i, /^(?:scale\\s+)/i, /^(?:\\d+)/i, /^(?:\\s+width\\b)/i, /^(?:accTitle\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*:\\s*)/i, /^(?:(?!\\n||)*[^\\n]*)/i, /^(?:accDescr\\s*\\{\\s*)/i, /^(?:[\\}])/i, /^(?:[^\\}]*)/i, /^(?:classDef\\s+)/i, /^(?:DEFAULT\\s+)/i, /^(?:\\w+\\s+)/i, /^(?:[^\\n]*)/i, /^(?:class\\s+)/i, /^(?:(\\w+)+((,\\s*\\w+)*))/i, /^(?:[^\\n]*)/i, /^(?:scale\\s+)/i, /^(?:\\d+)/i, /^(?:\\s+width\\b)/i, /^(?:state\\s+)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*\\[\\[fork\\]\\])/i, /^(?:.*\\[\\[join\\]\\])/i, /^(?:.*\\[\\[choice\\]\\])/i, /^(?:.*direction\\s+TB[^\\n]*)/i, /^(?:.*direction\\s+BT[^\\n]*)/i, /^(?:.*direction\\s+RL[^\\n]*)/i, /^(?:.*direction\\s+LR[^\\n]*)/i, /^(?:[\"])/i, /^(?:\\s*as\\s+)/i, /^(?:[^\\n\\{]*)/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[^\\n\\s\\{]+)/i, /^(?:\\n)/i, /^(?:\\{)/i, /^(?:%%(?!\\{)[^\\n]*)/i, /^(?:\\})/i, /^(?:[\\n])/i, /^(?:note\\s+)/i, /^(?:left of\\b)/i, /^(?:right of\\b)/i, /^(?:\")/i, /^(?:\\s*as\\s*)/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[^\\n]*)/i, /^(?:\\s*[^:\\n\\s\\-]+)/i, /^(?:\\s*:[^:\\n;]+)/i, /^(?:[\\s\\S]*?end note\\b)/i, /^(?:stateDiagram\\s+)/i, /^(?:stateDiagram-v2\\s+)/i, /^(?:hide empty description\\b)/i, /^(?:\\[\\*\\])/i, /^(?:[^:\\n\\s\\-\\{]+)/i, /^(?:\\s*:[^:\\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: { \"LINE\": { \"rules\": [9, 10], \"inclusive\": false }, \"struct\": { \"rules\": [9, 10, 22, 26, 32, 39, 40, 41, 42, 51, 52, 53, 54, 68, 69, 70, 71, 72], \"inclusive\": false }, \"FLOATING_NOTE_ID\": { \"rules\": [61], \"inclusive\": false }, \"FLOATING_NOTE\": { \"rules\": [58, 59, 60], \"inclusive\": false }, \"NOTE_TEXT\": { \"rules\": [63, 64], \"inclusive\": false }, \"NOTE_ID\": { \"rules\": [62], \"inclusive\": false }, \"NOTE\": { \"rules\": [55, 56, 57], \"inclusive\": false }, \"CLASS_STYLE\": { \"rules\": [28], \"inclusive\": false }, \"CLASS\": { \"rules\": [27], \"inclusive\": false }, \"CLASSDEFID\": { \"rules\": [25], \"inclusive\": false }, \"CLASSDEF\": { \"rules\": [23, 24], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [20, 21], \"inclusive\": false }, \"acc_descr\": { \"rules\": [18], \"inclusive\": false }, \"acc_title\": { \"rules\": [16], \"inclusive\": false }, \"SCALE\": { \"rules\": [13, 14, 30, 31], \"inclusive\": false }, \"ALIAS\": { \"rules\": [], \"inclusive\": false }, \"STATE_ID\": { \"rules\": [45], \"inclusive\": false }, \"STATE_STRING\": { \"rules\": [46, 47], \"inclusive\": false }, \"FORK_STATE\": { \"rules\": [], \"inclusive\": false }, \"STATE\": { \"rules\": [9, 10, 33, 34, 35, 36, 37, 38, 43, 44, 48, 49, 50], \"inclusive\": false }, \"ID\": { \"rules\": [9, 10], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 15, 17, 19, 22, 26, 29, 32, 50, 54, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nconst DEFAULT_DIAGRAM_DIRECTION = \"LR\";\nconst DEFAULT_NESTED_DOC_DIR = \"TB\";\nconst STMT_STATE = \"state\";\nconst STMT_RELATION = \"relation\";\nconst STMT_CLASSDEF = \"classDef\";\nconst STMT_APPLYCLASS = \"applyClass\";\nconst DEFAULT_STATE_TYPE = \"default\";\nconst DIVIDER_TYPE = \"divider\";\nconst START_NODE = \"[*]\";\nconst START_TYPE = \"start\";\nconst END_NODE = START_NODE;\nconst END_TYPE = \"end\";\nconst COLOR_KEYWORD = \"color\";\nconst FILL_KEYWORD = \"fill\";\nconst BG_FILL = \"bgFill\";\nconst STYLECLASS_SEP = \",\";\nfunction newClassesList() {\n return {};\n}\nlet direction = DEFAULT_DIAGRAM_DIRECTION;\nlet rootDoc = [];\nlet classes = newClassesList();\nconst newDoc = () => {\n return {\n relations: [],\n states: {},\n documents: {}\n };\n};\nlet documents = {\n root: newDoc()\n};\nlet currentDocument = documents.root;\nlet startEndCount = 0;\nlet dividerCnt = 0;\nconst lineType = {\n LINE: 0,\n DOTTED_LINE: 1\n};\nconst relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3\n};\nconst clone = (o) => JSON.parse(JSON.stringify(o));\nconst setRootDoc = (o) => {\n log.info(\"Setting root doc\", o);\n rootDoc = o;\n};\nconst getRootDoc = () => rootDoc;\nconst docTranslator = (parent, node, first) => {\n if (node.stmt === STMT_RELATION) {\n docTranslator(parent, node.state1, true);\n docTranslator(parent, node.state2, false);\n } else {\n if (node.stmt === STMT_STATE) {\n if (node.id === \"[*]\") {\n node.id = first ? parent.id + \"_start\" : parent.id + \"_end\";\n node.start = first;\n } else {\n node.id = node.id.trim();\n }\n }\n if (node.doc) {\n const doc = [];\n let currentDoc = [];\n let i;\n for (i = 0; i < node.doc.length; i++) {\n if (node.doc[i].type === DIVIDER_TYPE) {\n const newNode = clone(node.doc[i]);\n newNode.doc = clone(currentDoc);\n doc.push(newNode);\n currentDoc = [];\n } else {\n currentDoc.push(node.doc[i]);\n }\n }\n if (doc.length > 0 && currentDoc.length > 0) {\n const newNode = {\n stmt: STMT_STATE,\n id: generateId(),\n type: \"divider\",\n doc: clone(currentDoc)\n };\n doc.push(clone(newNode));\n node.doc = doc;\n }\n node.doc.forEach((docNode) => docTranslator(node, docNode, true));\n }\n }\n};\nconst getRootDocV2 = () => {\n docTranslator({ id: \"root\" }, { id: \"root\", doc: rootDoc }, true);\n return { id: \"root\", doc: rootDoc };\n};\nconst extract = (_doc) => {\n let doc;\n if (_doc.doc) {\n doc = _doc.doc;\n } else {\n doc = _doc;\n }\n log.info(doc);\n clear(true);\n log.info(\"Extract\", doc);\n doc.forEach((item) => {\n switch (item.stmt) {\n case STMT_STATE:\n addState(\n item.id.trim(),\n item.type,\n item.doc,\n item.description,\n item.note,\n item.classes,\n item.styles,\n item.textStyles\n );\n break;\n case STMT_RELATION:\n addRelation(item.state1, item.state2, item.description);\n break;\n case STMT_CLASSDEF:\n addStyleClass(item.id.trim(), item.classes);\n break;\n case STMT_APPLYCLASS:\n setCssClass(item.id.trim(), item.styleClass);\n break;\n }\n });\n};\nconst addState = function(id, type = DEFAULT_STATE_TYPE, doc = null, descr = null, note = null, classes2 = null, styles2 = null, textStyles = null) {\n const trimmedId = id == null ? void 0 : id.trim();\n if (currentDocument.states[trimmedId] === void 0) {\n log.info(\"Adding state \", trimmedId, descr);\n currentDocument.states[trimmedId] = {\n id: trimmedId,\n descriptions: [],\n type,\n doc,\n note,\n classes: [],\n styles: [],\n textStyles: []\n };\n } else {\n if (!currentDocument.states[trimmedId].doc) {\n currentDocument.states[trimmedId].doc = doc;\n }\n if (!currentDocument.states[trimmedId].type) {\n currentDocument.states[trimmedId].type = type;\n }\n }\n if (descr) {\n log.info(\"Setting state description\", trimmedId, descr);\n if (typeof descr === \"string\") {\n addDescription(trimmedId, descr.trim());\n }\n if (typeof descr === \"object\") {\n descr.forEach((des) => addDescription(trimmedId, des.trim()));\n }\n }\n if (note) {\n currentDocument.states[trimmedId].note = note;\n currentDocument.states[trimmedId].note.text = common.sanitizeText(\n currentDocument.states[trimmedId].note.text,\n getConfig()\n );\n }\n if (classes2) {\n log.info(\"Setting state classes\", trimmedId, classes2);\n const classesList = typeof classes2 === \"string\" ? [classes2] : classes2;\n classesList.forEach((cssClass) => setCssClass(trimmedId, cssClass.trim()));\n }\n if (styles2) {\n log.info(\"Setting state styles\", trimmedId, styles2);\n const stylesList = typeof styles2 === \"string\" ? [styles2] : styles2;\n stylesList.forEach((style) => setStyle(trimmedId, style.trim()));\n }\n if (textStyles) {\n log.info(\"Setting state styles\", trimmedId, styles2);\n const textStylesList = typeof textStyles === \"string\" ? [textStyles] : textStyles;\n textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim()));\n }\n};\nconst clear = function(saveCommon) {\n documents = {\n root: newDoc()\n };\n currentDocument = documents.root;\n startEndCount = 0;\n classes = newClassesList();\n if (!saveCommon) {\n clear$1();\n }\n};\nconst getState = function(id) {\n return currentDocument.states[id];\n};\nconst getStates = function() {\n return currentDocument.states;\n};\nconst logDocuments = function() {\n log.info(\"Documents = \", documents);\n};\nconst getRelations = function() {\n return currentDocument.relations;\n};\nfunction startIdIfNeeded(id = \"\") {\n let fixedId = id;\n if (id === START_NODE) {\n startEndCount++;\n fixedId = `${START_TYPE}${startEndCount}`;\n }\n return fixedId;\n}\nfunction startTypeIfNeeded(id = \"\", type = DEFAULT_STATE_TYPE) {\n return id === START_NODE ? START_TYPE : type;\n}\nfunction endIdIfNeeded(id = \"\") {\n let fixedId = id;\n if (id === END_NODE) {\n startEndCount++;\n fixedId = `${END_TYPE}${startEndCount}`;\n }\n return fixedId;\n}\nfunction endTypeIfNeeded(id = \"\", type = DEFAULT_STATE_TYPE) {\n return id === END_NODE ? END_TYPE : type;\n}\nfunction addRelationObjs(item1, item2, relationTitle) {\n let id1 = startIdIfNeeded(item1.id.trim());\n let type1 = startTypeIfNeeded(item1.id.trim(), item1.type);\n let id2 = startIdIfNeeded(item2.id.trim());\n let type2 = startTypeIfNeeded(item2.id.trim(), item2.type);\n addState(\n id1,\n type1,\n item1.doc,\n item1.description,\n item1.note,\n item1.classes,\n item1.styles,\n item1.textStyles\n );\n addState(\n id2,\n type2,\n item2.doc,\n item2.description,\n item2.note,\n item2.classes,\n item2.styles,\n item2.textStyles\n );\n currentDocument.relations.push({\n id1,\n id2,\n relationTitle: common.sanitizeText(relationTitle, getConfig())\n });\n}\nconst addRelation = function(item1, item2, title) {\n if (typeof item1 === \"object\") {\n addRelationObjs(item1, item2, title);\n } else {\n const id1 = startIdIfNeeded(item1.trim());\n const type1 = startTypeIfNeeded(item1);\n const id2 = endIdIfNeeded(item2.trim());\n const type2 = endTypeIfNeeded(item2);\n addState(id1, type1);\n addState(id2, type2);\n currentDocument.relations.push({\n id1,\n id2,\n title: common.sanitizeText(title, getConfig())\n });\n }\n};\nconst addDescription = function(id, descr) {\n const theState = currentDocument.states[id];\n const _descr = descr.startsWith(\":\") ? descr.replace(\":\", \"\").trim() : descr;\n theState.descriptions.push(common.sanitizeText(_descr, getConfig()));\n};\nconst cleanupLabel = function(label) {\n if (label.substring(0, 1) === \":\") {\n return label.substr(2).trim();\n } else {\n return label.trim();\n }\n};\nconst getDividerId = () => {\n dividerCnt++;\n return \"divider-id-\" + dividerCnt;\n};\nconst addStyleClass = function(id, styleAttributes = \"\") {\n if (classes[id] === void 0) {\n classes[id] = { id, styles: [], textStyles: [] };\n }\n const foundClass = classes[id];\n if (styleAttributes !== void 0 && styleAttributes !== null) {\n styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => {\n const fixedAttrib = attrib.replace(/([^;]*);/, \"$1\").trim();\n if (attrib.match(COLOR_KEYWORD)) {\n const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL);\n const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD);\n foundClass.textStyles.push(newStyle2);\n }\n foundClass.styles.push(fixedAttrib);\n });\n }\n};\nconst getClasses = function() {\n return classes;\n};\nconst setCssClass = function(itemIds, cssClassName) {\n itemIds.split(\",\").forEach(function(id) {\n let foundState = getState(id);\n if (foundState === void 0) {\n const trimmedId = id.trim();\n addState(trimmedId);\n foundState = getState(trimmedId);\n }\n foundState.classes.push(cssClassName);\n });\n};\nconst setStyle = function(itemId, styleText) {\n const item = getState(itemId);\n if (item !== void 0) {\n item.textStyles.push(styleText);\n }\n};\nconst setTextStyle = function(itemId, cssClassName) {\n const item = getState(itemId);\n if (item !== void 0) {\n item.textStyles.push(cssClassName);\n }\n};\nconst getDirection = () => direction;\nconst setDirection = (dir) => {\n direction = dir;\n};\nconst trimColon = (str) => str && str[0] === \":\" ? str.substr(1).trim() : str.trim();\nconst db = {\n getConfig: () => getConfig().state,\n addState,\n clear,\n getState,\n getStates,\n getRelations,\n getClasses,\n getDirection,\n addRelation,\n getDividerId,\n setDirection,\n cleanupLabel,\n lineType,\n relationType,\n logDocuments,\n getRootDoc,\n setRootDoc,\n getRootDocV2,\n extract,\n trimColon,\n getAccTitle,\n setAccTitle,\n getAccDescription,\n setAccDescription,\n addStyleClass,\n setCssClass,\n addDescription,\n setDiagramTitle,\n getDiagramTitle\n};\nconst getStyles = (options) => `\ndefs #statediagram-barbEnd {\n fill: ${options.transitionColor};\n stroke: ${options.transitionColor};\n }\ng.stateGroup text {\n fill: ${options.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${options.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${options.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${options.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${options.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${options.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${options.noteBorderColor};\n fill: ${options.noteBkgColor};\n\n text {\n fill: ${options.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${options.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${options.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${options.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${options.specialStateColor};\n stroke: ${options.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${options.specialStateColor};\n stroke: ${options.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${options.innerEndBackground};\n stroke: ${options.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${options.compositeBackground || options.background};\n // stroke: ${options.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${options.stateBkg || options.mainBkg};\n stroke: ${options.stateBorder || options.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${options.mainBkg};\n stroke: ${options.stateBorder || options.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${options.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${options.compositeTitleBackground};\n stroke: ${options.stateBorder || options.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${options.stateLabelColor};\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${options.stateBorder || options.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${options.compositeBackground || options.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${options.altBackground ? options.altBackground : \"#efefef\"};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${options.altBackground ? options.altBackground : \"#efefef\"};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${options.noteBkgColor};\n stroke: ${options.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${options.noteBkgColor};\n stroke: ${options.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${options.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${options.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${options.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${options.lineColor};\n stroke: ${options.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n}\n`;\nconst styles = getStyles;\nexport {\n DEFAULT_STATE_TYPE as D,\n STMT_RELATION as S,\n DIVIDER_TYPE as a,\n STMT_STATE as b,\n DEFAULT_NESTED_DOC_DIR as c,\n db as d,\n parser$1 as p,\n styles as s\n};\n"], + "mappings": "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", + "names": ["parser", "o", "k", "v", "o2", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "parser2", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "stateStmt", "relDescription", "id", "description", "parts", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "TERROR", "EOF", "args", "lexer2", "sharedState", "yyloc", "ranges", "lex", "token", "symbol", "state", "action", "r", "yyval", "p", "len", "newState", "expected", "errStr", "lexer", "ch", "lines", "oldLines", "n", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "Parser", "parser$1", "DEFAULT_DIAGRAM_DIRECTION", "DEFAULT_NESTED_DOC_DIR", "STMT_STATE", "STMT_RELATION", "STMT_CLASSDEF", "STMT_APPLYCLASS", "DEFAULT_STATE_TYPE", "DIVIDER_TYPE", "START_NODE", "START_TYPE", "END_NODE", "END_TYPE", "COLOR_KEYWORD", "FILL_KEYWORD", "BG_FILL", "STYLECLASS_SEP", "newClassesList", "direction", "rootDoc", "classes", "newDoc", "documents", "currentDocument", "startEndCount", "dividerCnt", "lineType", "relationType", "clone", "setRootDoc", "log$1", "getRootDoc", "docTranslator", "parent", "node", "first", "doc", "currentDoc", "newNode", "generateId", "docNode", "getRootDocV2", "extract", "_doc", "clear", "item", "addState", "addRelation", "addStyleClass", "setCssClass", "type", "descr", "note", "classes2", "styles2", "textStyles", "trimmedId", "addDescription", "des", "common$1", "getConfig", "cssClass", "style", "setStyle", "textStyle", "setTextStyle", "saveCommon", "getState", "getStates", "logDocuments", "getRelations", "startIdIfNeeded", "fixedId", "startTypeIfNeeded", "endIdIfNeeded", "endTypeIfNeeded", "addRelationObjs", "item1", "item2", "relationTitle", "id1", "type1", "id2", "type2", "title", "theState", "_descr", "cleanupLabel", "label", "getDividerId", "styleAttributes", "foundClass", "attrib", "fixedAttrib", "newStyle2", "getClasses", "itemIds", "cssClassName", "foundState", "itemId", "styleText", "getDirection", "setDirection", "dir", "trimColon", "db", "getAccTitle", "setAccTitle", "getAccDescription", "setAccDescription", "setDiagramTitle", "getDiagramTitle", "getStyles", "options", "styles"] +} diff --git a/public/chunk-LUX5WYVM.min.js b/public/chunk-LUX5WYVM.min.js new file mode 100644 index 000000000..e4e815b02 --- /dev/null +++ b/public/chunk-LUX5WYVM.min.js @@ -0,0 +1,117 @@ +import{a as H}from"./chunk-5FWMXAFW.min.js";import{A as F}from"./chunk-K2MRC2FE.min.js";import{F as $,Ga as u,Ja as U,K as V,L as M,Na as A,Oa as B,T as R,Ta as L,Ua as E,ab as j,eb as K,h as _,i as P,ma as q,nb as v}from"./chunk-YEACHCAA.min.js";function ne(e,l){return!!e.children(l).length}function se(e){return I(e.v)+":"+I(e.w)+":"+I(e.name)}var Z=/:/g;function I(e){return e?String(e).replace(Z,"\\:"):""}function W(e,l){l&&e.attr("style",l)}function ie(e,l,c){l&&e.attr("class",l).attr("class",c+" "+e.attr("class"))}function ce(e,l){var c=l.graph();if(q(c)){var a=c.transition;if(R(a))return a(e)}return e}function X(e,l){var c=e.append("foreignObject").attr("width","100000"),a=c.append("xhtml:div");a.attr("xmlns","http://www.w3.org/1999/xhtml");var i=l.label;switch(typeof i){case"function":a.insert(i);break;case"object":a.insert(function(){return i});break;default:a.html(i)}W(a,l.labelStyle),a.style("display","inline-block"),a.style("white-space","nowrap");var d=a.node().getBoundingClientRect();return c.attr("width",d.width).attr("height",d.height),c}var J={},ee=function(e){let l=Object.keys(e);for(let c of l)J[c]=e[c]},Q=async function(e,l,c,a,i,d){let w=a.select(`[id="${c}"]`),n=Object.keys(e);for(let p of n){let r=e[p],y="default";r.classes.length>0&&(y=r.classes.join(" ")),y=y+" flowchart-label";let h=E(r.styles),t=r.text!==void 0?r.text:r.id,s;if(u.info("vertex",r,r.labelType),r.labelType==="markdown")u.info("vertex",r,r.labelType);else if(U(v().flowchart.htmlLabels))s=X(w,{label:t}).node(),s.parentNode.removeChild(s);else{let k=i.createElementNS("http://www.w3.org/2000/svg","text");k.setAttribute("style",h.labelStyle.replace("color:","fill:"));let C=t.split(B.lineBreakRegex);for(let N of C){let S=i.createElementNS("http://www.w3.org/2000/svg","tspan");S.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),S.setAttribute("dy","1em"),S.setAttribute("x","1"),S.textContent=N,k.appendChild(S)}s=k}let b=0,o="";switch(r.type){case"round":b=5,o="rect";break;case"square":o="rect";break;case"diamond":o="question";break;case"hexagon":o="hexagon";break;case"odd":o="rect_left_inv_arrow";break;case"lean_right":o="lean_right";break;case"lean_left":o="lean_left";break;case"trapezoid":o="trapezoid";break;case"inv_trapezoid":o="inv_trapezoid";break;case"odd_right":o="rect_left_inv_arrow";break;case"circle":o="circle";break;case"ellipse":o="ellipse";break;case"stadium":o="stadium";break;case"subroutine":o="subroutine";break;case"cylinder":o="cylinder";break;case"group":o="rect";break;case"doublecircle":o="doublecircle";break;default:o="rect"}let T=await A(t,v());l.setNode(r.id,{labelStyle:h.labelStyle,shape:o,labelText:T,labelType:r.labelType,rx:b,ry:b,class:y,style:h.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:d.db.getTooltip(r.id)||"",domId:d.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:r.type==="group"?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:v().flowchart.padding}),u.info("setNode",{labelStyle:h.labelStyle,labelType:r.labelType,shape:o,labelText:T,rx:b,ry:b,class:y,style:h.style,id:r.id,domId:d.db.lookUpDomId(r.id),width:r.type==="group"?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:v().flowchart.padding})}},Y=async function(e,l,c){u.info("abc78 edges = ",e);let a=0,i={},d,w;if(e.defaultStyle!==void 0){let n=E(e.defaultStyle);d=n.style,w=n.labelStyle}for(let n of e){a++;let p="L-"+n.start+"-"+n.end;i[p]===void 0?(i[p]=0,u.info("abc78 new entry",p,i[p])):(i[p]++,u.info("abc78 new entry",p,i[p]));let r=p+"-"+i[p];u.info("abc78 new link id to be used is",p,r,i[p]);let y="LS-"+n.start,h="LE-"+n.end,t={style:"",labelStyle:""};switch(t.minlen=n.length||1,n.type==="arrow_open"?t.arrowhead="none":t.arrowhead="normal",t.arrowTypeStart="arrow_open",t.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":t.arrowTypeStart="arrow_cross";case"arrow_cross":t.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":t.arrowTypeStart="arrow_point";case"arrow_point":t.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":t.arrowTypeStart="arrow_circle";case"arrow_circle":t.arrowTypeEnd="arrow_circle";break}let s="",b="";switch(n.stroke){case"normal":s="fill:none;",d!==void 0&&(s=d),w!==void 0&&(b=w),t.thickness="normal",t.pattern="solid";break;case"dotted":t.thickness="normal",t.pattern="dotted",t.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":t.thickness="thick",t.pattern="solid",t.style="stroke-width: 3.5px;fill:none;";break;case"invisible":t.thickness="invisible",t.pattern="solid",t.style="stroke-width: 0;fill:none;";break}if(n.style!==void 0){let o=E(n.style);s=o.style,b=o.labelStyle}t.style=t.style+=s,t.labelStyle=t.labelStyle+=b,n.interpolate!==void 0?t.curve=L(n.interpolate,$):e.defaultInterpolate!==void 0?t.curve=L(e.defaultInterpolate,$):t.curve=L(J.curve,$),n.text===void 0?n.style!==void 0&&(t.arrowheadStyle="fill: #333"):(t.arrowheadStyle="fill: #333",t.labelpos="c"),t.labelType=n.labelType,t.label=await A(n.text.replace(B.lineBreakRegex,` +`),v()),n.style===void 0&&(t.style=t.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),t.labelStyle=t.labelStyle.replace("color:","fill:"),t.id=r,t.classes="flowchart-link "+y+" "+h,l.setEdge(n.start,n.end,t,a)}},te=function(e,l){return l.db.getClasses()},re=async function(e,l,c,a){u.info("Drawing flowchart");let i=a.db.getDirection();i===void 0&&(i="TD");let{securityLevel:d,flowchart:w}=v(),n=w.nodeSpacing||50,p=w.rankSpacing||50,r;d==="sandbox"&&(r=_("#i"+l));let y=d==="sandbox"?_(r.nodes()[0].contentDocument.body):_("body"),h=d==="sandbox"?r.nodes()[0].contentDocument:document,t=new F({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:n,ranksep:p,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}}),s,b=a.db.getSubGraphs();u.info("Subgraphs - ",b);for(let f=b.length-1;f>=0;f--)s=b[f],u.info("Subgraph - ",s),a.db.addVertex(s.id,{text:s.title,type:s.labelType},"group",void 0,s.classes,s.dir);let o=a.db.getVertices(),T=a.db.getEdges();u.info("Edges",T);let k=0;for(k=b.length-1;k>=0;k--){s=b[k],P("cluster").append("text");for(let f=0;f{let c=M,a=c(e,"r"),i=c(e,"g"),d=c(e,"b");return V(a,i,d,l)},ae=e=>`.label { + font-family: ${e.fontFamily}; + color: ${e.nodeTextColor||e.textColor}; + } + .cluster-label text { + fill: ${e.titleColor}; + } + .cluster-label span,p { + color: ${e.titleColor}; + } + + .label text,span,p { + fill: ${e.nodeTextColor||e.textColor}; + color: ${e.nodeTextColor||e.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .katex path { + fill: #000; + stroke: #000; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${e.arrowheadColor}; + } + + .edgePath .path { + stroke: ${e.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${e.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${e.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${e.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${le(e.edgeLabelBackground,.5)}; + // background-color: + } + + .cluster rect { + fill: ${e.clusterBkg}; + stroke: ${e.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${e.titleColor}; + } + + .cluster span,p { + color: ${e.titleColor}; + } + /* .cluster div { + color: ${e.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${e.fontFamily}; + font-size: 12px; + background: ${e.tertiaryColor}; + border: 1px solid ${e.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${e.textColor}; + } +`,ye=ae;export{ne as a,se as b,W as c,ie as d,ce as e,X as f,ge as g,ye as h}; +//# sourceMappingURL=chunk-LUX5WYVM.min.js.map diff --git a/public/chunk-LUX5WYVM.min.js.map b/public/chunk-LUX5WYVM.min.js.map new file mode 100644 index 000000000..5ff98c2f2 --- /dev/null +++ b/public/chunk-LUX5WYVM.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/dagre-d3-es/src/dagre-js/util.js", "../../node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js", "../../node_modules/mermaid/dist/styles-483fbfea.js"], + "sourcesContent": ["import * as _ from 'lodash-es';\n\n// Public utility functions\nexport { isSubgraph, edgeToId, applyStyle, applyClass, applyTransition };\n\n/*\n * Returns true if the specified node in the graph is a subgraph node. A\n * subgraph node is one that contains other nodes.\n */\nfunction isSubgraph(g, v) {\n return !!g.children(v).length;\n}\n\nfunction edgeToId(e) {\n return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name);\n}\n\nvar ID_DELIM = /:/g;\nfunction escapeId(str) {\n return str ? String(str).replace(ID_DELIM, '\\\\:') : '';\n}\n\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr('style', styleFn);\n }\n}\n\nfunction applyClass(dom, classFn, otherClasses) {\n if (classFn) {\n dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class'));\n }\n}\n\nfunction applyTransition(selection, g) {\n var graph = g.graph();\n\n if (_.isPlainObject(graph)) {\n var transition = graph.transition;\n if (_.isFunction(transition)) {\n return transition(selection);\n }\n }\n\n return selection;\n}\n", "import * as util from '../util.js';\n\nexport { addHtmlLabel };\n\nfunction addHtmlLabel(root, node) {\n var fo = root.append('foreignObject').attr('width', '100000');\n\n var div = fo.append('xhtml:div');\n div.attr('xmlns', 'http://www.w3.org/1999/xhtml');\n\n var label = node.label;\n switch (typeof label) {\n case 'function':\n div.insert(label);\n break;\n case 'object':\n // Currently we assume this is a DOM object.\n div.insert(function () {\n return label;\n });\n break;\n default:\n div.html(label);\n }\n\n util.applyStyle(div, node.labelStyle);\n div.style('display', 'inline-block');\n // Fix for firefox\n div.style('white-space', 'nowrap');\n\n var client = div.node().getBoundingClientRect();\n fo.attr('width', client.width).attr('height', client.height);\n\n return fo;\n}\n", "import * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nimport { curveLinear, select, selectAll } from \"d3\";\nimport { k as getStylesFromArray, l as log, m as evaluate, c as getConfig, e as common, r as renderKatex, n as interpolateToCurve, u as utils, o as setupGraphViewbox } from \"./mermaid-6dc72991.js\";\nimport { r as render } from \"./index-01f381cb.js\";\nimport { addHtmlLabel } from \"dagre-d3-es/src/dagre-js/label/add-html-label.js\";\nimport * as khroma from \"khroma\";\nconst conf = {};\nconst setConf = function(cnf) {\n const keys = Object.keys(cnf);\n for (const key of keys) {\n conf[key] = cnf[key];\n }\n};\nconst addVertices = async function(vert, g, svgId, root, doc, diagObj) {\n const svg = root.select(`[id=\"${svgId}\"]`);\n const keys = Object.keys(vert);\n for (const id of keys) {\n const vertex = vert[id];\n let classStr = \"default\";\n if (vertex.classes.length > 0) {\n classStr = vertex.classes.join(\" \");\n }\n classStr = classStr + \" flowchart-label\";\n const styles = getStylesFromArray(vertex.styles);\n let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id;\n let vertexNode;\n log.info(\"vertex\", vertex, vertex.labelType);\n if (vertex.labelType === \"markdown\") {\n log.info(\"vertex\", vertex, vertex.labelType);\n } else {\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const node = {\n label: vertexText\n };\n vertexNode = addHtmlLabel(svg, node).node();\n vertexNode.parentNode.removeChild(vertexNode);\n } else {\n const svgLabel = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"style\", styles.labelStyle.replace(\"color:\", \"fill:\"));\n const rows = vertexText.split(common.lineBreakRegex);\n for (const row of rows) {\n const tspan = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"1\");\n tspan.textContent = row;\n svgLabel.appendChild(tspan);\n }\n vertexNode = svgLabel;\n }\n }\n let radius = 0;\n let _shape = \"\";\n switch (vertex.type) {\n case \"round\":\n radius = 5;\n _shape = \"rect\";\n break;\n case \"square\":\n _shape = \"rect\";\n break;\n case \"diamond\":\n _shape = \"question\";\n break;\n case \"hexagon\":\n _shape = \"hexagon\";\n break;\n case \"odd\":\n _shape = \"rect_left_inv_arrow\";\n break;\n case \"lean_right\":\n _shape = \"lean_right\";\n break;\n case \"lean_left\":\n _shape = \"lean_left\";\n break;\n case \"trapezoid\":\n _shape = \"trapezoid\";\n break;\n case \"inv_trapezoid\":\n _shape = \"inv_trapezoid\";\n break;\n case \"odd_right\":\n _shape = \"rect_left_inv_arrow\";\n break;\n case \"circle\":\n _shape = \"circle\";\n break;\n case \"ellipse\":\n _shape = \"ellipse\";\n break;\n case \"stadium\":\n _shape = \"stadium\";\n break;\n case \"subroutine\":\n _shape = \"subroutine\";\n break;\n case \"cylinder\":\n _shape = \"cylinder\";\n break;\n case \"group\":\n _shape = \"rect\";\n break;\n case \"doublecircle\":\n _shape = \"doublecircle\";\n break;\n default:\n _shape = \"rect\";\n }\n const labelText = await renderKatex(vertexText, getConfig());\n g.setNode(vertex.id, {\n labelStyle: styles.labelStyle,\n shape: _shape,\n labelText,\n labelType: vertex.labelType,\n rx: radius,\n ry: radius,\n class: classStr,\n style: styles.style,\n id: vertex.id,\n link: vertex.link,\n linkTarget: vertex.linkTarget,\n tooltip: diagObj.db.getTooltip(vertex.id) || \"\",\n domId: diagObj.db.lookUpDomId(vertex.id),\n haveCallback: vertex.haveCallback,\n width: vertex.type === \"group\" ? 500 : void 0,\n dir: vertex.dir,\n type: vertex.type,\n props: vertex.props,\n padding: getConfig().flowchart.padding\n });\n log.info(\"setNode\", {\n labelStyle: styles.labelStyle,\n labelType: vertex.labelType,\n shape: _shape,\n labelText,\n rx: radius,\n ry: radius,\n class: classStr,\n style: styles.style,\n id: vertex.id,\n domId: diagObj.db.lookUpDomId(vertex.id),\n width: vertex.type === \"group\" ? 500 : void 0,\n type: vertex.type,\n dir: vertex.dir,\n props: vertex.props,\n padding: getConfig().flowchart.padding\n });\n }\n};\nconst addEdges = async function(edges, g, diagObj) {\n log.info(\"abc78 edges = \", edges);\n let cnt = 0;\n let linkIdCnt = {};\n let defaultStyle;\n let defaultLabelStyle;\n if (edges.defaultStyle !== void 0) {\n const defaultStyles = getStylesFromArray(edges.defaultStyle);\n defaultStyle = defaultStyles.style;\n defaultLabelStyle = defaultStyles.labelStyle;\n }\n for (const edge of edges) {\n cnt++;\n const linkIdBase = \"L-\" + edge.start + \"-\" + edge.end;\n if (linkIdCnt[linkIdBase] === void 0) {\n linkIdCnt[linkIdBase] = 0;\n log.info(\"abc78 new entry\", linkIdBase, linkIdCnt[linkIdBase]);\n } else {\n linkIdCnt[linkIdBase]++;\n log.info(\"abc78 new entry\", linkIdBase, linkIdCnt[linkIdBase]);\n }\n let linkId = linkIdBase + \"-\" + linkIdCnt[linkIdBase];\n log.info(\"abc78 new link id to be used is\", linkIdBase, linkId, linkIdCnt[linkIdBase]);\n const linkNameStart = \"LS-\" + edge.start;\n const linkNameEnd = \"LE-\" + edge.end;\n const edgeData = { style: \"\", labelStyle: \"\" };\n edgeData.minlen = edge.length || 1;\n if (edge.type === \"arrow_open\") {\n edgeData.arrowhead = \"none\";\n } else {\n edgeData.arrowhead = \"normal\";\n }\n edgeData.arrowTypeStart = \"arrow_open\";\n edgeData.arrowTypeEnd = \"arrow_open\";\n switch (edge.type) {\n case \"double_arrow_cross\":\n edgeData.arrowTypeStart = \"arrow_cross\";\n case \"arrow_cross\":\n edgeData.arrowTypeEnd = \"arrow_cross\";\n break;\n case \"double_arrow_point\":\n edgeData.arrowTypeStart = \"arrow_point\";\n case \"arrow_point\":\n edgeData.arrowTypeEnd = \"arrow_point\";\n break;\n case \"double_arrow_circle\":\n edgeData.arrowTypeStart = \"arrow_circle\";\n case \"arrow_circle\":\n edgeData.arrowTypeEnd = \"arrow_circle\";\n break;\n }\n let style = \"\";\n let labelStyle = \"\";\n switch (edge.stroke) {\n case \"normal\":\n style = \"fill:none;\";\n if (defaultStyle !== void 0) {\n style = defaultStyle;\n }\n if (defaultLabelStyle !== void 0) {\n labelStyle = defaultLabelStyle;\n }\n edgeData.thickness = \"normal\";\n edgeData.pattern = \"solid\";\n break;\n case \"dotted\":\n edgeData.thickness = \"normal\";\n edgeData.pattern = \"dotted\";\n edgeData.style = \"fill:none;stroke-width:2px;stroke-dasharray:3;\";\n break;\n case \"thick\":\n edgeData.thickness = \"thick\";\n edgeData.pattern = \"solid\";\n edgeData.style = \"stroke-width: 3.5px;fill:none;\";\n break;\n case \"invisible\":\n edgeData.thickness = \"invisible\";\n edgeData.pattern = \"solid\";\n edgeData.style = \"stroke-width: 0;fill:none;\";\n break;\n }\n if (edge.style !== void 0) {\n const styles = getStylesFromArray(edge.style);\n style = styles.style;\n labelStyle = styles.labelStyle;\n }\n edgeData.style = edgeData.style += style;\n edgeData.labelStyle = edgeData.labelStyle += labelStyle;\n if (edge.interpolate !== void 0) {\n edgeData.curve = interpolateToCurve(edge.interpolate, curveLinear);\n } else if (edges.defaultInterpolate !== void 0) {\n edgeData.curve = interpolateToCurve(edges.defaultInterpolate, curveLinear);\n } else {\n edgeData.curve = interpolateToCurve(conf.curve, curveLinear);\n }\n if (edge.text === void 0) {\n if (edge.style !== void 0) {\n edgeData.arrowheadStyle = \"fill: #333\";\n }\n } else {\n edgeData.arrowheadStyle = \"fill: #333\";\n edgeData.labelpos = \"c\";\n }\n edgeData.labelType = edge.labelType;\n edgeData.label = await renderKatex(edge.text.replace(common.lineBreakRegex, \"\\n\"), getConfig());\n if (edge.style === void 0) {\n edgeData.style = edgeData.style || \"stroke: #333; stroke-width: 1.5px;fill:none;\";\n }\n edgeData.labelStyle = edgeData.labelStyle.replace(\"color:\", \"fill:\");\n edgeData.id = linkId;\n edgeData.classes = \"flowchart-link \" + linkNameStart + \" \" + linkNameEnd;\n g.setEdge(edge.start, edge.end, edgeData, cnt);\n }\n};\nconst getClasses = function(text, diagObj) {\n return diagObj.db.getClasses();\n};\nconst draw = async function(text, id, _version, diagObj) {\n log.info(\"Drawing flowchart\");\n let dir = diagObj.db.getDirection();\n if (dir === void 0) {\n dir = \"TD\";\n }\n const { securityLevel, flowchart: conf2 } = getConfig();\n const nodeSpacing = conf2.nodeSpacing || 50;\n const rankSpacing = conf2.rankSpacing || 50;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n const g = new graphlib.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: dir,\n nodesep: nodeSpacing,\n ranksep: rankSpacing,\n marginx: 0,\n marginy: 0\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n let subG;\n const subGraphs = diagObj.db.getSubGraphs();\n log.info(\"Subgraphs - \", subGraphs);\n for (let i2 = subGraphs.length - 1; i2 >= 0; i2--) {\n subG = subGraphs[i2];\n log.info(\"Subgraph - \", subG);\n diagObj.db.addVertex(\n subG.id,\n { text: subG.title, type: subG.labelType },\n \"group\",\n void 0,\n subG.classes,\n subG.dir\n );\n }\n const vert = diagObj.db.getVertices();\n const edges = diagObj.db.getEdges();\n log.info(\"Edges\", edges);\n let i = 0;\n for (i = subGraphs.length - 1; i >= 0; i--) {\n subG = subGraphs[i];\n selectAll(\"cluster\").append(\"text\");\n for (let j = 0; j < subG.nodes.length; j++) {\n log.info(\"Setting up subgraphs\", subG.nodes[j], subG.id);\n g.setParent(subG.nodes[j], subG.id);\n }\n }\n await addVertices(vert, g, id, root, doc, diagObj);\n await addEdges(edges, g);\n const svg = root.select(`[id=\"${id}\"]`);\n const element = root.select(\"#\" + id + \" g\");\n await render(element, g, [\"point\", \"circle\", \"cross\"], \"flowchart\", id);\n utils.insertTitle(svg, \"flowchartTitleText\", conf2.titleTopMargin, diagObj.db.getDiagramTitle());\n setupGraphViewbox(g, svg, conf2.diagramPadding, conf2.useMaxWidth);\n diagObj.db.indexNodes(\"subGraph\" + i);\n if (!conf2.htmlLabels) {\n const labels = doc.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n for (const label of labels) {\n const dim = label.getBBox();\n const rect = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"rx\", 0);\n rect.setAttribute(\"ry\", 0);\n rect.setAttribute(\"width\", dim.width);\n rect.setAttribute(\"height\", dim.height);\n label.insertBefore(rect, label.firstChild);\n }\n }\n const keys = Object.keys(vert);\n keys.forEach(function(key) {\n const vertex = vert[key];\n if (vertex.link) {\n const node = select(\"#\" + id + ' [id=\"' + key + '\"]');\n if (node) {\n const link = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"a\");\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"class\", vertex.classes.join(\" \"));\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"href\", vertex.link);\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"rel\", \"noopener\");\n if (securityLevel === \"sandbox\") {\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"target\", \"_top\");\n } else if (vertex.linkTarget) {\n link.setAttributeNS(\"http://www.w3.org/2000/svg\", \"target\", vertex.linkTarget);\n }\n const linkNode = node.insert(function() {\n return link;\n }, \":first-child\");\n const shape = node.select(\".label-container\");\n if (shape) {\n linkNode.append(function() {\n return shape.node();\n });\n }\n const label = node.select(\".label\");\n if (label) {\n linkNode.append(function() {\n return label.node();\n });\n }\n }\n }\n });\n};\nconst flowRendererV2 = {\n setConf,\n addVertices,\n addEdges,\n getClasses,\n draw\n};\nconst fade = (color, opacity) => {\n const channel = khroma.channel;\n const r = channel(color, \"r\");\n const g = channel(color, \"g\");\n const b = channel(color, \"b\");\n return khroma.rgba(r, g, b, opacity);\n};\nconst getStyles = (options) => `.label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n .cluster-label text {\n fill: ${options.titleColor};\n }\n .cluster-label span,p {\n color: ${options.titleColor};\n }\n\n .label text,span,p {\n fill: ${options.nodeTextColor || options.textColor};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .katex path {\n fill: #000;\n stroke: #000;\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${options.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${fade(options.edgeLabelBackground, 0.5)};\n // background-color: \n }\n\n .cluster rect {\n fill: ${options.clusterBkg};\n stroke: ${options.clusterBorder};\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n .cluster span,p {\n color: ${options.titleColor};\n }\n /* .cluster div {\n color: ${options.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${options.fontFamily};\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n`;\nconst flowStyles = getStyles;\nexport {\n flowStyles as a,\n flowRendererV2 as f\n};\n"], + "mappings": "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", + "names": ["isSubgraph", "g", "v", "edgeToId", "escapeId", "ID_DELIM", "str", "applyStyle", "dom", "styleFn", "applyClass", "classFn", "otherClasses", "applyTransition", "selection", "graph", "isPlainObject_default", "transition", "isFunction_default", "addHtmlLabel", "root", "node", "fo", "div", "label", "applyStyle", "client", "conf", "setConf", "cnf", "keys", "key", "addVertices", "vert", "g", "svgId", "root", "doc", "diagObj", "svg", "id", "vertex", "classStr", "styles", "getStylesFromArray", "vertexText", "vertexNode", "log$1", "evaluate", "getConfig", "addHtmlLabel", "svgLabel", "rows", "common$1", "row", "tspan", "radius", "_shape", "labelText", "renderKatex", "addEdges", "edges", "cnt", "linkIdCnt", "defaultStyle", "defaultLabelStyle", "defaultStyles", "edge", "linkIdBase", "linkId", "linkNameStart", "linkNameEnd", "edgeData", "style", "labelStyle", "interpolateToCurve", "linear_default", "getClasses", "text", "draw", "_version", "dir", "securityLevel", "conf2", "nodeSpacing", "rankSpacing", "sandboxElement", "select_default", "Graph", "subG", "subGraphs", "i2", "i", "selectAll_default", "j", "element", "render", "utils", "setupGraphViewbox$1", "labels", "label", "dim", "rect", "node", "link", "linkNode", "shape", "flowRendererV2", "fade", "color", "opacity", "channel", "channel_default", "r", "b", "rgba_default", "getStyles", "options", "flowStyles"] +} diff --git a/public/chunk-LXB37CFX.min.js b/public/chunk-LXB37CFX.min.js new file mode 100644 index 000000000..5b568c5d0 --- /dev/null +++ b/public/chunk-LXB37CFX.min.js @@ -0,0 +1,8 @@ +import{Ga as gt,a as xt,bb as dt}from"./chunk-YEACHCAA.min.js";import{c as ue}from"./chunk-XUHMPXWX.min.js";var ae={};function Un(n,r){let t=r||ae,e=typeof t.includeImageAlt=="boolean"?t.includeImageAlt:!0,u=typeof t.includeHtml=="boolean"?t.includeHtml:!0;return yt(n,e,u)}function yt(n,r,t){if(oe(n)){if("value"in n)return n.type==="html"&&!t?"":n.value;if(r&&"alt"in n&&n.alt)return n.alt;if("children"in n)return kt(n.children,r,t)}return Array.isArray(n)?kt(n,r,t):""}function kt(n,r,t){let e=[],u=-1;for(;++uu?0:u+r:r=r>u?u:r,t=t>0?t:0,e.length<1e4)i=Array.from(e),i.unshift(r,t),[].splice.apply(n,i);else for(t&&[].splice.apply(n,[r,t]);a0?(Z(n,n.length,0,r),n):r}var bt={}.hasOwnProperty;function St(n){let r={},t=-1;for(;++ti))return;let j=r.events.length,H=j,M,Q;for(;H--;)if(r.events[H][0]==="exit"&&r.events[H][1].type==="chunkFlow"){if(M){Q=r.events[H][1].end;break}M=!0}for(b(e),d=j;dw;){let _=t[P];r.containerState=_[1],_[0].exit.call(r,n)}t.length=w}function R(){u.write([null]),a=void 0,u=void 0,r.containerState._closeFlow=void 0}}function me(n,r,t){return C(n,n.attempt(this.parser.constructs.document,r,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Zn(n){if(n===null||V(n)||Ct(n))return 1;if(At(n))return 2}function yn(n,r,t){let e=[],u=-1;for(;++u1&&n[t][1].end.offset-n[t][1].start.offset>1?2:1;let y=Object.assign({},n[e][1].end),h=Object.assign({},n[t][1].start);Lt(y,-p),Lt(h,p),i={type:p>1?"strongSequence":"emphasisSequence",start:y,end:Object.assign({},n[e][1].end)},o={type:p>1?"strongSequence":"emphasisSequence",start:Object.assign({},n[t][1].start),end:h},a={type:p>1?"strongText":"emphasisText",start:Object.assign({},n[e][1].end),end:Object.assign({},n[t][1].start)},u={type:p>1?"strong":"emphasis",start:Object.assign({},i.start),end:Object.assign({},o.end)},n[e][1].end=Object.assign({},i.start),n[t][1].start=Object.assign({},o.end),m=[],n[e][1].end.offset-n[e][1].start.offset&&(m=J(m,[["enter",n[e][1],r],["exit",n[e][1],r]])),m=J(m,[["enter",u,r],["enter",i,r],["exit",i,r],["enter",a,r]]),m=J(m,yn(r.parser.constructs.insideSpan.null,n.slice(e+1,t),r)),m=J(m,[["exit",a,r],["enter",o,r],["exit",o,r],["exit",u,r]]),n[t][1].end.offset-n[t][1].start.offset?(c=2,m=J(m,[["enter",n[t][1],r],["exit",n[t][1],r]])):c=0,Z(n,e-1,t-e+3,m),t=e+m.length-c-2;break}}for(t=-1;++t=4?i(m):t(m)}function i(m){return m===null?p(m):S(m)?n.attempt(we,i,p)(m):(n.enter("codeFlowValue"),o(m))}function o(m){return m===null||S(m)?(n.exit("codeFlowValue"),i(m)):(n.consume(m),o)}function p(m){return n.exit("codeIndented"),r(m)}}function Ce(n,r,t){let e=this;return u;function u(i){return e.parser.lazy[e.now().line]?t(i):S(i)?(n.enter("lineEnding"),n.consume(i),n.exit("lineEnding"),u):C(n,a,"linePrefix",5)(i)}function a(i){let o=e.events[e.events.length-1];return o&&o[1].type==="linePrefix"&&o[2].sliceSerialize(o[1],!0).length>=4?r(i):S(i)?u(i):t(i)}}var Gn={name:"codeText",tokenize:Ie,resolve:Ae,previous:ze};function Ae(n){let r=n.length-4,t=3,e,u;if((n[t][1].type==="lineEnding"||n[t][1].type==="space")&&(n[r][1].type==="lineEnding"||n[r][1].type==="space")){for(e=t;++e=4?r(i):n.interrupt(e.parser.constructs.flow,t,r)(i)}}function Rn(n,r,t,e,u,a,i,o,p){let m=p||Number.POSITIVE_INFINITY,c=0;return y;function y(b){return b===60?(n.enter(e),n.enter(u),n.enter(a),n.consume(b),n.exit(a),h):b===null||b===41||In(b)?t(b):(n.enter(e),n.enter(i),n.enter(o),n.enter("chunkString",{contentType:"string"}),L(b))}function h(b){return b===62?(n.enter(a),n.consume(b),n.exit(a),n.exit(u),n.exit(e),r):(n.enter(o),n.enter("chunkString",{contentType:"string"}),x(b))}function x(b){return b===62?(n.exit("chunkString"),n.exit(o),h(b)):b===null||b===60||S(b)?t(b):(n.consume(b),b===92?g:x)}function g(b){return b===60||b===62||b===92?(n.consume(b),x):x(b)}function L(b){return b===40?++c>m?t(b):(n.consume(b),L):b===41?c--?(n.consume(b),L):(n.exit("chunkString"),n.exit(o),n.exit(i),n.exit(e),r(b)):b===null||V(b)?c?t(b):(n.exit("chunkString"),n.exit(o),n.exit(i),n.exit(e),r(b)):In(b)?t(b):(n.consume(b),b===92?O:L)}function O(b){return b===40||b===41||b===92?(n.consume(b),L):L(b)}}function jn(n,r,t,e,u,a){let i=this,o=0,p;return m;function m(x){return n.enter(e),n.enter(u),n.consume(x),n.exit(u),n.enter(a),c}function c(x){return x===null||x===91||x===93&&!p||x===94&&!o&&"_hiddenFootnoteSupport"in i.parser.constructs||o>999?t(x):x===93?(n.exit(a),n.enter(u),n.consume(x),n.exit(u),n.exit(e),r):S(x)?(n.enter("lineEnding"),n.consume(x),n.exit("lineEnding"),c):(n.enter("chunkString",{contentType:"string"}),y(x))}function y(x){return x===null||x===91||x===93||S(x)||o++>999?(n.exit("chunkString"),c(x)):(n.consume(x),p=p||!I(x),x===92?h:y)}function h(x){return x===91||x===92||x===93?(n.consume(x),o++,y):y(x)}}function qn(n,r,t,e,u,a){let i;return o;function o(h){return n.enter(e),n.enter(u),n.consume(h),n.exit(u),i=h===40?41:h,p}function p(h){return h===i?(n.enter(u),n.consume(h),n.exit(u),n.exit(e),r):(n.enter(a),m(h))}function m(h){return h===i?(n.exit(a),p(i)):h===null?t(h):S(h)?(n.enter("lineEnding"),n.consume(h),n.exit("lineEnding"),C(n,m,"linePrefix")):(n.enter("chunkString",{contentType:"string"}),c(h))}function c(h){return h===i||h===null||S(h)?(n.exit("chunkString"),m(h)):(n.consume(h),h===92?y:c)}function y(h){return h===i||h===92?(n.consume(h),c):c(h)}}function fn(n,r){let t;return e;function e(u){return S(u)?(n.enter("lineEnding"),n.consume(u),n.exit("lineEnding"),t=!0,e):I(u)?C(n,e,t?"linePrefix":"lineSuffix")(u):r(u)}}function on(n){return n.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}var Kn={name:"definition",tokenize:_e},Pe={tokenize:Me,partial:!0};function _e(n,r,t){let e=this,u;return a;function a(p){return n.enter("definition"),jn.call(e,n,i,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function i(p){return u=on(e.sliceSerialize(e.events[e.events.length-1][1]).slice(1,-1)),p===58?(n.enter("definitionMarker"),n.consume(p),n.exit("definitionMarker"),fn(n,Rn(n,n.attempt(Pe,C(n,o,"whitespace"),C(n,o,"whitespace")),t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString"))):t(p)}function o(p){return p===null||S(p)?(n.exit("definition"),e.parser.defined.includes(u)||e.parser.defined.push(u),r(p)):t(p)}}function Me(n,r,t){return e;function e(i){return V(i)?fn(n,u)(i):t(i)}function u(i){return i===34||i===39||i===40?qn(n,C(n,a,"whitespace"),t,"definitionTitle","definitionTitleMarker","definitionTitleString")(i):t(i)}function a(i){return i===null||S(i)?r(i):t(i)}}var Xn={name:"hardBreakEscape",tokenize:Re};function Re(n,r,t){return e;function e(a){return n.enter("hardBreakEscape"),n.enter("escapeMarker"),n.consume(a),u}function u(a){return S(a)?(n.exit("escapeMarker"),n.exit("hardBreakEscape"),r(a)):t(a)}}var vn={name:"headingAtx",tokenize:qe,resolve:je};function je(n,r){let t=n.length-2,e=3,u,a;return n[e][1].type==="whitespace"&&(e+=2),t-2>e&&n[t][1].type==="whitespace"&&(t-=2),n[t][1].type==="atxHeadingSequence"&&(e===t-1||t-4>e&&n[t-2][1].type==="whitespace")&&(t-=e+1===t?2:4),t>e&&(u={type:"atxHeadingText",start:n[e][1].start,end:n[t][1].end},a={type:"chunkText",start:n[e][1].start,end:n[t][1].end,contentType:"text"},Z(n,e,t-e+1,[["enter",u,r],["enter",a,r],["exit",a,r],["exit",u,r]])),n}function qe(n,r,t){let e=this,u=0;return a;function a(c){return n.enter("atxHeading"),n.enter("atxHeadingSequence"),i(c)}function i(c){return c===35&&u++<6?(n.consume(c),i):c===null||V(c)?(n.exit("atxHeadingSequence"),e.interrupt?r(c):o(c)):t(c)}function o(c){return c===35?(n.enter("atxHeadingSequence"),p(c)):c===null||S(c)?(n.exit("atxHeading"),r(c)):I(c)?C(n,o,"whitespace")(c):(n.enter("atxHeadingText"),m(c))}function p(c){return c===35?(n.consume(c),p):(n.exit("atxHeadingSequence"),o(c))}function m(c){return c===null||c===35||V(c)?(n.exit("atxHeadingText"),o(c)):(n.consume(c),m)}}var Ot=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],nt=["pre","script","style","textarea"];var tt={name:"htmlFlow",tokenize:Ve,resolveTo:Ne,concrete:!0},He={tokenize:We,partial:!0};function Ne(n){let r=n.length;for(;r--&&!(n[r][0]==="enter"&&n[r][1].type==="htmlFlow"););return r>1&&n[r-2][1].type==="linePrefix"&&(n[r][1].start=n[r-2][1].start,n[r+1][1].start=n[r-2][1].start,n.splice(r-2,2)),n}function Ve(n,r,t){let e=this,u,a,i,o,p;return m;function m(l){return n.enter("htmlFlow"),n.enter("htmlFlowData"),n.consume(l),c}function c(l){return l===33?(n.consume(l),y):l===47?(n.consume(l),g):l===63?(n.consume(l),u=3,e.interrupt?r:G):v(l)?(n.consume(l),i=String.fromCharCode(l),a=!0,L):t(l)}function y(l){return l===45?(n.consume(l),u=2,h):l===91?(n.consume(l),u=5,i="CDATA[",o=0,x):v(l)?(n.consume(l),u=4,e.interrupt?r:G):t(l)}function h(l){return l===45?(n.consume(l),e.interrupt?r:G):t(l)}function x(l){return l===i.charCodeAt(o++)?(n.consume(l),o===i.length?e.interrupt?r:A:x):t(l)}function g(l){return v(l)?(n.consume(l),i=String.fromCharCode(l),L):t(l)}function L(l){return l===null||l===47||l===62||V(l)?l!==47&&a&&nt.includes(i.toLowerCase())?(u=1,e.interrupt?r(l):A(l)):Ot.includes(i.toLowerCase())?(u=6,l===47?(n.consume(l),O):e.interrupt?r(l):A(l)):(u=7,e.interrupt&&!e.parser.lazy[e.now().line]?t(l):a?R(l):b(l)):l===45||K(l)?(n.consume(l),i+=String.fromCharCode(l),L):t(l)}function O(l){return l===62?(n.consume(l),e.interrupt?r:A):t(l)}function b(l){return I(l)?(n.consume(l),b):M(l)}function R(l){return l===47?(n.consume(l),M):l===58||l===95||v(l)?(n.consume(l),w):I(l)?(n.consume(l),R):M(l)}function w(l){return l===45||l===46||l===58||l===95||K(l)?(n.consume(l),w):P(l)}function P(l){return l===61?(n.consume(l),_):I(l)?(n.consume(l),P):R(l)}function _(l){return l===null||l===60||l===61||l===62||l===96?t(l):l===34||l===39?(n.consume(l),p=l,d):I(l)?(n.consume(l),_):(p=null,j(l))}function d(l){return l===null||S(l)?t(l):l===p?(n.consume(l),H):(n.consume(l),d)}function j(l){return l===null||l===34||l===39||l===60||l===61||l===62||l===96||V(l)?P(l):(n.consume(l),j)}function H(l){return l===47||l===62||I(l)?R(l):t(l)}function M(l){return l===62?(n.consume(l),Q):t(l)}function Q(l){return I(l)?(n.consume(l),Q):l===null||S(l)?A(l):t(l)}function A(l){return l===45&&u===2?(n.consume(l),U):l===60&&u===1?(n.consume(l),X):l===62&&u===4?(n.consume(l),N):l===63&&u===3?(n.consume(l),G):l===93&&u===5?(n.consume(l),W):S(l)&&(u===6||u===7)?n.check(He,N,D)(l):l===null||S(l)?D(l):(n.consume(l),A)}function D(l){return n.exit("htmlFlowData"),E(l)}function E(l){return l===null?s(l):S(l)?n.attempt({tokenize:z,partial:!0},E,s)(l):(n.enter("htmlFlowData"),A(l))}function z(l,En,mn){return dn;function dn(en){return l.enter("lineEnding"),l.consume(en),l.exit("lineEnding"),wn}function wn(en){return e.parser.lazy[e.now().line]?mn(en):En(en)}}function U(l){return l===45?(n.consume(l),G):A(l)}function X(l){return l===47?(n.consume(l),i="",nn):A(l)}function nn(l){return l===62&&nt.includes(i.toLowerCase())?(n.consume(l),N):v(l)&&i.length<8?(n.consume(l),i+=String.fromCharCode(l),nn):A(l)}function W(l){return l===93?(n.consume(l),G):A(l)}function G(l){return l===62?(n.consume(l),N):l===45&&u===2?(n.consume(l),G):A(l)}function N(l){return l===null||S(l)?(n.exit("htmlFlowData"),s(l)):(n.consume(l),N)}function s(l){return n.exit("htmlFlow"),r(l)}}function We(n,r,t){return e;function e(u){return n.exit("htmlFlowData"),n.enter("lineEndingBlank"),n.consume(u),n.exit("lineEndingBlank"),n.attempt(cn,r,t)}}var et={name:"htmlText",tokenize:Qe};function Qe(n,r,t){let e=this,u,a,i,o;return p;function p(s){return n.enter("htmlText"),n.enter("htmlTextData"),n.consume(s),m}function m(s){return s===33?(n.consume(s),c):s===47?(n.consume(s),j):s===63?(n.consume(s),_):v(s)?(n.consume(s),Q):t(s)}function c(s){return s===45?(n.consume(s),y):s===91?(n.consume(s),a="CDATA[",i=0,O):v(s)?(n.consume(s),P):t(s)}function y(s){return s===45?(n.consume(s),h):t(s)}function h(s){return s===null||s===62?t(s):s===45?(n.consume(s),x):g(s)}function x(s){return s===null||s===62?t(s):g(s)}function g(s){return s===null?t(s):s===45?(n.consume(s),L):S(s)?(o=g,W(s)):(n.consume(s),g)}function L(s){return s===45?(n.consume(s),N):g(s)}function O(s){return s===a.charCodeAt(i++)?(n.consume(s),i===a.length?b:O):t(s)}function b(s){return s===null?t(s):s===93?(n.consume(s),R):S(s)?(o=b,W(s)):(n.consume(s),b)}function R(s){return s===93?(n.consume(s),w):b(s)}function w(s){return s===62?N(s):s===93?(n.consume(s),w):b(s)}function P(s){return s===null||s===62?N(s):S(s)?(o=P,W(s)):(n.consume(s),P)}function _(s){return s===null?t(s):s===63?(n.consume(s),d):S(s)?(o=_,W(s)):(n.consume(s),_)}function d(s){return s===62?N(s):_(s)}function j(s){return v(s)?(n.consume(s),H):t(s)}function H(s){return s===45||K(s)?(n.consume(s),H):M(s)}function M(s){return S(s)?(o=M,W(s)):I(s)?(n.consume(s),M):N(s)}function Q(s){return s===45||K(s)?(n.consume(s),Q):s===47||s===62||V(s)?A(s):t(s)}function A(s){return s===47?(n.consume(s),N):s===58||s===95||v(s)?(n.consume(s),D):S(s)?(o=A,W(s)):I(s)?(n.consume(s),A):N(s)}function D(s){return s===45||s===46||s===58||s===95||K(s)?(n.consume(s),D):E(s)}function E(s){return s===61?(n.consume(s),z):S(s)?(o=E,W(s)):I(s)?(n.consume(s),E):A(s)}function z(s){return s===null||s===60||s===61||s===62||s===96?t(s):s===34||s===39?(n.consume(s),u=s,U):S(s)?(o=z,W(s)):I(s)?(n.consume(s),z):(n.consume(s),u=void 0,nn)}function U(s){return s===u?(n.consume(s),X):s===null?t(s):S(s)?(o=U,W(s)):(n.consume(s),U)}function X(s){return s===62||s===47||V(s)?A(s):t(s)}function nn(s){return s===null||s===34||s===39||s===60||s===61||s===96?t(s):s===62||V(s)?A(s):(n.consume(s),nn)}function W(s){return n.exit("htmlTextData"),n.enter("lineEnding"),n.consume(s),n.exit("lineEnding"),C(n,G,"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function G(s){return n.enter("htmlTextData"),o(s)}function N(s){return s===62?(n.consume(s),n.exit("htmlTextData"),n.exit("htmlText"),r):t(s)}}var xn={name:"labelEnd",tokenize:Je,resolveTo:Ge,resolveAll:Ye},Ue={tokenize:Ke},$e={tokenize:Xe},Ze={tokenize:ve};function Ye(n){let r=-1,t;for(;++r-1&&(i[0]=i[0].slice(e)),a>0&&i.push(n[u].slice(0,a))),i}function gr(n,r){let t=-1,e=[],u;for(;++tFr,contentInitial:()=>kr,disable:()=>Cr,document:()=>dr,flow:()=>br,flowInitial:()=>yr,insideSpan:()=>wr,string:()=>Sr,text:()=>Er});var dr={42:Y,43:Y,45:Y,48:Y,49:Y,50:Y,51:Y,52:Y,53:Y,54:Y,55:Y,56:Y,57:Y,62:On},kr={91:Kn},yr={[-2]:Ln,[-1]:Ln,32:Ln},br={35:vn,42:gn,45:[Hn,gn],60:tt,61:Hn,95:gn,96:_n,126:_n},Sr={38:Pn,92:Dn},Er={[-5]:Bn,[-4]:Bn,[-3]:Bn,33:rt,38:Pn,42:Tn,60:[Yn,et],91:it,92:[Xn,Dn],93:xn,95:Tn,96:Gn},wr={null:[Tn,Pt]},Fr={null:[42,95]},Cr={null:[]};function Ht(n={}){let r=St([ut].concat(n.extensions||[])),t={defined:[],lazy:{},constructs:r,content:e(zt),document:e(Tt),flow:e(Dt),string:e(_t),text:e(Mt)};return t;function e(u){return a;function a(i){return qt(t,u,i)}}}var Nt=/[\0\t\n\r]/g;function Vt(){let n=1,r="",t=!0,e;return u;function u(a,i,o){let p=[],m,c,y,h,x;for(a=r+a.toString(i),y=0,r="",t&&(a.charCodeAt(0)===65279&&y++,t=void 0);y13&&t<32||t>126&&t<160||t>55295&&t<57344||t>64975&&t<65008||(t&65535)===65535||(t&65535)===65534||t>1114111?"\uFFFD":String.fromCharCode(t)}var Ar=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Qt(n){return n.replace(Ar,zr)}function zr(n,r,t){if(r)return r;if(t.charCodeAt(0)===35){let u=t.charCodeAt(1),a=u===120||u===88;return Nn(t.slice(a?2:1),a?16:10)}return bn(t)||n}function Sn(n){return!n||typeof n!="object"?"":"position"in n||"type"in n?Ut(n.position):"start"in n||"end"in n?Ut(n):"line"in n||"column"in n?at(n):""}function at(n){return $t(n&&n.line)+":"+$t(n&&n.column)}function Ut(n){return at(n&&n.start)+"-"+at(n&&n.end)}function $t(n){return n&&typeof n=="number"?n:1}var Yt={}.hasOwnProperty,Vn=function(n,r,t){return typeof r!="string"&&(t=r,r=void 0),Ir(t)(Wt(Ht(t).document().write(Vt()(n,r,!0))))};function Ir(n){let r={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:o(ht),autolinkProtocol:A,autolinkEmail:A,atxHeading:o(ct),blockQuote:o(kn),characterEscape:A,characterReference:A,codeFenced:o(hn),codeFencedFenceInfo:p,codeFencedFenceMeta:p,codeIndented:o(hn,p),codeText:o(Wn,p),codeTextData:A,data:A,codeFlowValue:A,definition:o(Kt),definitionDestinationString:p,definitionLabelString:p,definitionTitleString:p,emphasis:o(Xt),hardBreakEscape:o(pt),hardBreakTrailing:o(pt),htmlFlow:o(mt,p),htmlFlowData:A,htmlText:o(mt,p),htmlTextData:A,image:o(vt),label:p,link:o(ht),listItem:o(ne),listItemValue:g,listOrdered:o(ft,x),listUnordered:o(ft),paragraph:o(te),reference:dn,referenceString:p,resourceDestinationString:p,resourceTitleString:p,setextHeading:o(ct),strong:o(ee),thematicBreak:o(ie)},exit:{atxHeading:c(),atxHeadingSequence:j,autolink:c(),autolinkEmail:rn,autolinkProtocol:Fn,blockQuote:c(),characterEscapeValue:D,characterReferenceMarkerHexadecimal:en,characterReferenceMarkerNumeric:en,characterReferenceValue:$,codeFenced:c(R),codeFencedFence:b,codeFencedFenceInfo:L,codeFencedFenceMeta:O,codeFlowValue:D,codeIndented:c(w),codeText:c(nn),codeTextData:D,data:D,definition:c(),definitionDestinationString:d,definitionLabelString:P,definitionTitleString:_,emphasis:c(),hardBreakEscape:c(z),hardBreakTrailing:c(z),htmlFlow:c(U),htmlFlowData:D,htmlText:c(X),htmlTextData:D,image:c(G),label:s,labelText:N,lineEnding:E,link:c(W),listItem:c(),listOrdered:c(),listUnordered:c(),paragraph:c(),referenceString:wn,resourceDestinationString:l,resourceTitleString:En,resource:mn,setextHeading:c(Q),setextHeadingLineSequence:M,setextHeadingText:H,strong:c(),thematicBreak:c()}};Gt(r,(n||{}).mdastExtensions||[]);let t={};return e;function e(f){let k={type:"root",children:[]},F={stack:[k],tokenStack:[],config:r,enter:m,exit:y,buffer:p,resume:h,setData:a,getData:i},T=[],B=-1;for(;++B0){let tn=F.tokenStack[F.tokenStack.length-1];(tn[1]||Zt).call(F,void 0,tn[0])}for(k.position={start:pn(f.length>0?f[0][1].start:{line:1,column:1,offset:0}),end:pn(f.length>0?f[f.length-2][1].end:{line:1,column:1,offset:0})},B=-1;++B{c!==0&&(u++,e.push([])),m.split(" ").forEach(y=>{y&&e[u].push({content:y,type:o})})}):(i.type==="strong"||i.type==="emphasis")&&i.children.forEach(p=>{a(p,i.type)})}return t.forEach(i=>{i.type==="paragraph"&&i.children.forEach(o=>{a(o)})}),e}function Or(n){let{children:r}=Vn(n);function t(e){return e.type==="text"?e.value.replace(/\n/g,"
"):e.type==="strong"?`${e.children.map(t).join("")}`:e.type==="emphasis"?`${e.children.map(t).join("")}`:e.type==="paragraph"?`

${e.children.map(t).join("")}

`:`Unsupported markdown: ${e.type}`}return r.map(t).join("")}function Dr(n){return Intl.Segmenter?[...new Intl.Segmenter().segment(n)].map(r=>r.segment):[...n]}function Pr(n,r){let t=Dr(r.content);return Jt(n,[],t,r.type)}function Jt(n,r,t,e){if(t.length===0)return[{content:r.join(""),type:e},{content:"",type:e}];let[u,...a]=t,i=[...r,u];return n([{content:i.join(""),type:e}])?Jt(n,i,a,e):(r.length===0&&u&&(r.push(u),t.shift()),[{content:r.join(""),type:e},{content:t.join(""),type:e}])}function _r(n,r){if(n.some(({content:t})=>t.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return ot(n,r)}function ot(n,r,t=[],e=[]){if(n.length===0)return e.length>0&&t.push(e),t.length>0?t:[];let u="";n[0].content===" "&&(u=" ",n.shift());let a=n.shift()??{content:" ",type:"normal"},i=[...e];if(u!==""&&i.push({content:u,type:"normal"}),i.push(a),r(i))return ot(n,r,t,i);if(e.length>0)t.push(e),n.unshift(a);else if(a.content){let[o,p]=Pr(r,a);t.push([o]),p.content&&n.unshift(p)}return ot(n,r,t)}function Mr(n,r){r&&n.attr("style",r)}function Rr(n,r,t,e,u=!1){let a=n.append("foreignObject"),i=a.append("xhtml:div"),o=r.label,p=r.isNode?"nodeLabel":"edgeLabel";i.html(` + "+o+""),Mr(i,r.labelStyle),i.style("display","table-cell"),i.style("white-space","nowrap"),i.style("max-width",t+"px"),i.attr("xmlns","http://www.w3.org/1999/xhtml"),u&&i.attr("class","labelBkg");let m=i.node().getBoundingClientRect();return m.width===t&&(i.style("display","table"),i.style("white-space","break-spaces"),i.style("width",t+"px"),m=i.node().getBoundingClientRect()),a.style("width",m.width),a.style("height",m.height),a.node()}function lt(n,r,t){return n.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",r*t-.1+"em").attr("dy",t+"em")}function jr(n,r,t){let e=n.append("text"),u=lt(e,1,r);st(u,t);let a=u.node().getComputedTextLength();return e.remove(),a}function to(n,r,t){var e;let u=n.append("text"),a=lt(u,1,r);st(a,[{content:t,type:"normal"}]);let i=(e=a.node())==null?void 0:e.getBoundingClientRect();return i&&u.remove(),i}function qr(n,r,t,e=!1){let a=r.append("g"),i=a.insert("rect").attr("class","background"),o=a.append("text").attr("y","-10.1"),p=0;for(let m of t){let c=h=>jr(a,1.1,h)<=n,y=c(m)?[m]:_r(m,c);for(let h of y){let x=lt(o,p,1.1);st(x,h),p++}}if(e){let m=o.node().getBBox(),c=2;return i.attr("x",-c).attr("y",-c).attr("width",m.width+2*c).attr("height",m.height+2*c),a.node()}else return o.node()}function st(n,r){n.text(""),r.forEach((t,e)=>{let u=n.append("tspan").attr("font-style",t.type==="emphasis"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",t.type==="strong"?"bold":"normal");e===0?u.text(t.content):u.text(" "+t.content)})}var eo=(n,r="",{style:t="",isTitle:e=!1,classes:u="",useHtmlLabels:a=!0,isNode:i=!0,width:o=200,addSvgBackground:p=!1}={})=>{if(gt.info("createText",r,t,e,u,a,i,p),a){let m=Or(r),c={isNode:i,label:dt(m).replace(/fa[blrs]?:fa-[\w-]+/g,h=>``),labelStyle:t.replace("fill:","color:")};return Rr(n,c,o,u,p)}else{let m=Br(r);return qr(o,n,m,p)}};export{to as a,eo as b}; +//# sourceMappingURL=chunk-LXB37CFX.min.js.map diff --git a/public/chunk-LXB37CFX.min.js.map b/public/chunk-LXB37CFX.min.js.map new file mode 100644 index 000000000..8944dcdcf --- /dev/null +++ b/public/chunk-LXB37CFX.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/mdast-util-to-string/lib/index.js", "../../node_modules/micromark-util-chunked/index.js", "../../node_modules/micromark-util-combine-extensions/index.js", "../../node_modules/micromark-util-character/lib/unicode-punctuation-regex.js", "../../node_modules/micromark-util-character/index.js", "../../node_modules/micromark-factory-space/index.js", "../../node_modules/micromark/lib/initialize/content.js", "../../node_modules/micromark/lib/initialize/document.js", "../../node_modules/micromark-util-classify-character/index.js", "../../node_modules/micromark-util-resolve-all/index.js", "../../node_modules/micromark-core-commonmark/lib/attention.js", "../../node_modules/micromark-core-commonmark/lib/autolink.js", "../../node_modules/micromark-core-commonmark/lib/blank-line.js", "../../node_modules/micromark-core-commonmark/lib/block-quote.js", "../../node_modules/micromark-core-commonmark/lib/character-escape.js", "../../node_modules/decode-named-character-reference/index.dom.js", "../../node_modules/micromark-core-commonmark/lib/character-reference.js", "../../node_modules/micromark-core-commonmark/lib/code-fenced.js", "../../node_modules/micromark-core-commonmark/lib/code-indented.js", "../../node_modules/micromark-core-commonmark/lib/code-text.js", "../../node_modules/micromark-util-subtokenize/index.js", "../../node_modules/micromark-core-commonmark/lib/content.js", "../../node_modules/micromark-factory-destination/index.js", "../../node_modules/micromark-factory-label/index.js", "../../node_modules/micromark-factory-title/index.js", "../../node_modules/micromark-factory-whitespace/index.js", "../../node_modules/micromark-util-normalize-identifier/index.js", "../../node_modules/micromark-core-commonmark/lib/definition.js", "../../node_modules/micromark-core-commonmark/lib/hard-break-escape.js", "../../node_modules/micromark-core-commonmark/lib/heading-atx.js", "../../node_modules/micromark-util-html-tag-name/index.js", "../../node_modules/micromark-core-commonmark/lib/html-flow.js", "../../node_modules/micromark-core-commonmark/lib/html-text.js", "../../node_modules/micromark-core-commonmark/lib/label-end.js", "../../node_modules/micromark-core-commonmark/lib/label-start-image.js", "../../node_modules/micromark-core-commonmark/lib/label-start-link.js", "../../node_modules/micromark-core-commonmark/lib/line-ending.js", "../../node_modules/micromark-core-commonmark/lib/thematic-break.js", "../../node_modules/micromark-core-commonmark/lib/list.js", "../../node_modules/micromark-core-commonmark/lib/setext-underline.js", "../../node_modules/micromark/lib/initialize/flow.js", "../../node_modules/micromark/lib/initialize/text.js", "../../node_modules/micromark/lib/create-tokenizer.js", "../../node_modules/micromark/lib/constructs.js", "../../node_modules/micromark/lib/parse.js", "../../node_modules/micromark/lib/preprocess.js", "../../node_modules/micromark/lib/postprocess.js", "../../node_modules/micromark-util-decode-numeric-character-reference/index.js", "../../node_modules/micromark-util-decode-string/index.js", "../../node_modules/unist-util-stringify-position/lib/index.js", "../../node_modules/mdast-util-from-markdown/lib/index.js", "../../node_modules/mermaid/dist/createText-ca0c5216.js"], + "sourcesContent": ["/**\n * @typedef {import('mdast').Root|import('mdast').Content} Node\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s.\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML.\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node\u2019s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} value\n * Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized `value`.\n */\nexport function toString(value, options) {\n const settings = options || emptyOptions\n const includeImageAlt =\n typeof settings.includeImageAlt === 'boolean'\n ? settings.includeImageAlt\n : true\n const includeHtml =\n typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n if (node(value)) {\n if ('value' in value) {\n return value.type === 'html' && !includeHtml ? '' : value.value\n }\n\n if (includeImageAlt && 'alt' in value && value.alt) {\n return value.alt\n }\n\n if ('children' in value) {\n return all(value.children, includeImageAlt, includeHtml)\n }\n }\n\n if (Array.isArray(value)) {\n return all(value, includeImageAlt, includeHtml)\n }\n\n return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array} values\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n /** @type {Array} */\n const result = []\n let index = -1\n\n while (++index < values.length) {\n result[index] = one(values[index], includeImageAlt, includeHtml)\n }\n\n return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n * Thing.\n * @returns {value is Node}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\n}\n", "/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n * @param {T[]} list\n * @param {number} start\n * @param {number} remove\n * @param {T[]} items\n * @returns {void}\n */\nexport function splice(list, start, remove, items) {\n const end = list.length\n let chunkStart = 0\n /** @type {unknown[]} */\n\n let parameters // Make start between zero and `end` (included).\n\n if (start < 0) {\n start = -start > end ? 0 : end + start\n } else {\n start = start > end ? end : start\n }\n\n remove = remove > 0 ? remove : 0 // No need to chunk the items if there\u2019s only a couple (10k) items.\n\n if (items.length < 10000) {\n parameters = Array.from(items)\n parameters.unshift(start, remove) // @ts-expect-error Hush, it\u2019s fine.\n ;[].splice.apply(list, parameters)\n } else {\n // Delete `remove` items starting from `start`\n if (remove) [].splice.apply(list, [start, remove]) // Insert the items in chunks to not cause stack overflows.\n\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000)\n parameters.unshift(start, 0) // @ts-expect-error Hush, it\u2019s fine.\n ;[].splice.apply(list, parameters)\n chunkStart += 10000\n start += 10000\n }\n }\n}\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n * @param {T[]} list\n * @param {T[]} items\n * @returns {T[]}\n */\n\nexport function push(list, items) {\n if (list.length > 0) {\n splice(list, list.length, 0, items)\n return list\n }\n\n return items\n}\n", "/**\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine several syntax extensions into one.\n *\n * @param {Extension[]} extensions List of syntax extensions.\n * @returns {NormalizedExtension} A single combined extension.\n */\nexport function combineExtensions(extensions) {\n /** @type {NormalizedExtension} */\n const all = {}\n let index = -1\n\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index])\n }\n\n return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all Extension to merge into.\n * @param {Extension} extension Extension to merge.\n * @returns {void}\n */\nfunction syntaxExtension(all, extension) {\n /** @type {string} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n const left = maybe || (all[hook] = {})\n const right = extension[hook]\n /** @type {string} */\n let code\n\n for (code in right) {\n if (!hasOwnProperty.call(left, code)) left[code] = []\n const value = right[code]\n constructs(\n // @ts-expect-error Looks like a list.\n left[code],\n Array.isArray(value) ? value : value ? [value] : []\n )\n }\n }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {unknown[]} existing\n * @param {unknown[]} list\n * @returns {void}\n */\nfunction constructs(existing, list) {\n let index = -1\n /** @type {unknown[]} */\n const before = []\n\n while (++index < list.length) {\n // @ts-expect-error Looks like an object.\n ;(list[index].add === 'after' ? existing : before).push(list[index])\n }\n\n splice(existing, 0, 0, before)\n}\n\n/**\n * Combine several HTML extensions into one.\n *\n * @param {HtmlExtension[]} htmlExtensions List of HTML extensions.\n * @returns {HtmlExtension} A single combined extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n /** @type {HtmlExtension} */\n const handlers = {}\n let index = -1\n\n while (++index < htmlExtensions.length) {\n htmlExtension(handlers, htmlExtensions[index])\n }\n\n return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all Extension to merge into.\n * @param {HtmlExtension} extension Extension to merge.\n * @returns {void}\n */\nfunction htmlExtension(all, extension) {\n /** @type {string} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n const left = maybe || (all[hook] = {})\n const right = extension[hook]\n /** @type {string} */\n let type\n\n if (right) {\n for (type in right) {\n left[type] = right[type]\n }\n }\n }\n}\n", "// This module is generated by `script/`.\n//\n// CommonMark handles attention (emphasis, strong) markers based on what comes\n// before or after them.\n// One such difference is if those characters are Unicode punctuation.\n// This script is generated from the Unicode data.\nexport const unicodePunctuationRegex =\n /[!-/:-@[-`{-~\\u00A1\\u00A7\\u00AB\\u00B6\\u00B7\\u00BB\\u00BF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {unicodePunctuationRegex} from './lib/unicode-punctuation-regex.js'\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n */\n\nexport const asciiAlpha = regexCheck(/[A-Za-z]/)\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n */\n\nexport const asciiDigit = regexCheck(/\\d/)\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n */\n\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n */\n\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n */\n\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n */\n\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * @returns {code is number}\n */\n\nexport function asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n )\n}\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * @returns {code is number}\n */\n\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32)\n}\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * @returns {code is number}\n */\n\nexport function markdownLineEnding(code) {\n return code !== null && code < -2\n}\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * @returns {code is number}\n */\n\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32\n}\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n */\n\nexport const unicodeWhitespace = regexCheck(/\\s/)\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n */\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n\nexport const unicodePunctuation = regexCheck(unicodePunctuationRegex)\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => code is number}\n */\n\nfunction regexCheck(regex) {\n return check\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code Character code\n * @returns {code is number} Whether the character code matches the bound regex\n */\n\n function check(code) {\n return code !== null && regex.test(String.fromCharCode(code))\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownSpace} from 'micromark-util-character'\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {string} type\n * @param {number} [max=Infinity]\n * @returns {State}\n */\n\nexport function factorySpace(effects, ok, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n let size = 0\n return start\n /** @type {State} */\n\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type)\n return prefix(code)\n }\n\n return ok(code)\n }\n /** @type {State} */\n\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code)\n return prefix\n }\n\n effects.exit(type)\n return ok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {InitialConstruct} */\nexport const content = {\n tokenize: initializeContent\n}\n/** @type {Initializer} */\n\nfunction initializeContent(effects) {\n const contentStart = effects.attempt(\n this.parser.constructs.contentInitial,\n afterContentStartConstruct,\n paragraphInitial\n )\n /** @type {Token} */\n\n let previous\n return contentStart\n /** @type {State} */\n\n function afterContentStartConstruct(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, contentStart, 'linePrefix')\n }\n /** @type {State} */\n\n function paragraphInitial(code) {\n effects.enter('paragraph')\n return lineStart(code)\n }\n /** @type {State} */\n\n function lineStart(code) {\n const token = effects.enter('chunkText', {\n contentType: 'text',\n previous\n })\n\n if (previous) {\n previous.next = token\n }\n\n previous = token\n return data(code)\n }\n /** @type {State} */\n\n function data(code) {\n if (code === null) {\n effects.exit('chunkText')\n effects.exit('paragraph')\n effects.consume(code)\n return\n }\n\n if (markdownLineEnding(code)) {\n effects.consume(code)\n effects.exit('chunkText')\n return lineStart\n } // Data.\n\n effects.consume(code)\n return data\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Point} Point\n */\n\n/**\n * @typedef {Record} StackState\n * @typedef {[Construct, StackState]} StackItem\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {InitialConstruct} */\n\nexport const document = {\n tokenize: initializeDocument\n}\n/** @type {Construct} */\n\nconst containerConstruct = {\n tokenize: tokenizeContainer\n}\n/** @type {Initializer} */\n\nfunction initializeDocument(effects) {\n const self = this\n /** @type {Array} */\n\n const stack = []\n let continued = 0\n /** @type {TokenizeContext|undefined} */\n\n let childFlow\n /** @type {Token|undefined} */\n\n let childToken\n /** @type {number} */\n\n let lineStartOffset\n return start\n /** @type {State} */\n\n function start(code) {\n // First we iterate through the open blocks, starting with the root\n // document, and descending through last children down to the last open\n // block.\n // Each block imposes a condition that the line must satisfy if the block is\n // to remain open.\n // For example, a block quote requires a `>` character.\n // A paragraph requires a non-blank line.\n // In this phase we may match all or just some of the open blocks.\n // But we cannot close unmatched blocks yet, because we may have a lazy\n // continuation line.\n if (continued < stack.length) {\n const item = stack[continued]\n self.containerState = item[1]\n return effects.attempt(\n item[0].continuation,\n documentContinue,\n checkNewContainers\n )(code)\n } // Done.\n\n return checkNewContainers(code)\n }\n /** @type {State} */\n\n function documentContinue(code) {\n continued++ // Note: this field is called `_closeFlow` but it also closes containers.\n // Perhaps a good idea to rename it but it\u2019s already used in the wild by\n // extensions.\n\n if (self.containerState._closeFlow) {\n self.containerState._closeFlow = undefined\n\n if (childFlow) {\n closeFlow()\n } // Note: this algorithm for moving events around is similar to the\n // algorithm when dealing with lazy lines in `writeToChild`.\n\n const indexBeforeExits = self.events.length\n let indexBeforeFlow = indexBeforeExits\n /** @type {Point|undefined} */\n\n let point // Find the flow chunk.\n\n while (indexBeforeFlow--) {\n if (\n self.events[indexBeforeFlow][0] === 'exit' &&\n self.events[indexBeforeFlow][1].type === 'chunkFlow'\n ) {\n point = self.events[indexBeforeFlow][1].end\n break\n }\n }\n\n exitContainers(continued) // Fix positions.\n\n let index = indexBeforeExits\n\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point)\n index++\n } // Inject the exits earlier (they\u2019re still also at the end).\n\n splice(\n self.events,\n indexBeforeFlow + 1,\n 0,\n self.events.slice(indexBeforeExits)\n ) // Discard the duplicate exits.\n\n self.events.length = index\n return checkNewContainers(code)\n }\n\n return start(code)\n }\n /** @type {State} */\n\n function checkNewContainers(code) {\n // Next, after consuming the continuation markers for existing blocks, we\n // look for new block starts (e.g. `>` for a block quote).\n // If we encounter a new block start, we close any blocks unmatched in\n // step 1 before creating the new block as a child of the last matched\n // block.\n if (continued === stack.length) {\n // No need to `check` whether there\u2019s a container, of `exitContainers`\n // would be moot.\n // We can instead immediately `attempt` to parse one.\n if (!childFlow) {\n return documentContinued(code)\n } // If we have concrete content, such as block HTML or fenced code,\n // we can\u2019t have containers \u201Cpierce\u201D into them, so we can immediately\n // start.\n\n if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n return flowStart(code)\n } // If we do have flow, it could still be a blank line,\n // but we\u2019d be interrupting it w/ a new container if there\u2019s a current\n // construct.\n\n self.interrupt = Boolean(\n childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n )\n } // Check if there is a new container.\n\n self.containerState = {}\n return effects.check(\n containerConstruct,\n thereIsANewContainer,\n thereIsNoNewContainer\n )(code)\n }\n /** @type {State} */\n\n function thereIsANewContainer(code) {\n if (childFlow) closeFlow()\n exitContainers(continued)\n return documentContinued(code)\n }\n /** @type {State} */\n\n function thereIsNoNewContainer(code) {\n self.parser.lazy[self.now().line] = continued !== stack.length\n lineStartOffset = self.now().offset\n return flowStart(code)\n }\n /** @type {State} */\n\n function documentContinued(code) {\n // Try new containers.\n self.containerState = {}\n return effects.attempt(\n containerConstruct,\n containerContinue,\n flowStart\n )(code)\n }\n /** @type {State} */\n\n function containerContinue(code) {\n continued++\n stack.push([self.currentConstruct, self.containerState]) // Try another.\n\n return documentContinued(code)\n }\n /** @type {State} */\n\n function flowStart(code) {\n if (code === null) {\n if (childFlow) closeFlow()\n exitContainers(0)\n effects.consume(code)\n return\n }\n\n childFlow = childFlow || self.parser.flow(self.now())\n effects.enter('chunkFlow', {\n contentType: 'flow',\n previous: childToken,\n _tokenizer: childFlow\n })\n return flowContinue(code)\n }\n /** @type {State} */\n\n function flowContinue(code) {\n if (code === null) {\n writeToChild(effects.exit('chunkFlow'), true)\n exitContainers(0)\n effects.consume(code)\n return\n }\n\n if (markdownLineEnding(code)) {\n effects.consume(code)\n writeToChild(effects.exit('chunkFlow')) // Get ready for the next line.\n\n continued = 0\n self.interrupt = undefined\n return start\n }\n\n effects.consume(code)\n return flowContinue\n }\n /**\n * @param {Token} token\n * @param {boolean} [eof]\n * @returns {void}\n */\n\n function writeToChild(token, eof) {\n const stream = self.sliceStream(token)\n if (eof) stream.push(null)\n token.previous = childToken\n if (childToken) childToken.next = token\n childToken = token\n childFlow.defineSkip(token.start)\n childFlow.write(stream) // Alright, so we just added a lazy line:\n //\n // ```markdown\n // > a\n // b.\n //\n // Or:\n //\n // > ~~~c\n // d\n //\n // Or:\n //\n // > | e |\n // f\n // ```\n //\n // The construct in the second example (fenced code) does not accept lazy\n // lines, so it marked itself as done at the end of its first line, and\n // then the content construct parses `d`.\n // Most constructs in markdown match on the first line: if the first line\n // forms a construct, a non-lazy line can\u2019t \u201Cunmake\u201D it.\n //\n // The construct in the third example is potentially a GFM table, and\n // those are *weird*.\n // It *could* be a table, from the first line, if the following line\n // matches a condition.\n // In this case, that second line is lazy, which \u201Cunmakes\u201D the first line\n // and turns the whole into one content block.\n //\n // We\u2019ve now parsed the non-lazy and the lazy line, and can figure out\n // whether the lazy line started a new flow block.\n // If it did, we exit the current containers between the two flow blocks.\n\n if (self.parser.lazy[token.start.line]) {\n let index = childFlow.events.length\n\n while (index--) {\n if (\n // The token starts before the line ending\u2026\n childFlow.events[index][1].start.offset < lineStartOffset && // \u2026and either is not ended yet\u2026\n (!childFlow.events[index][1].end || // \u2026or ends after it.\n childFlow.events[index][1].end.offset > lineStartOffset)\n ) {\n // Exit: there\u2019s still something open, which means it\u2019s a lazy line\n // part of something.\n return\n }\n } // Note: this algorithm for moving events around is similar to the\n // algorithm when closing flow in `documentContinue`.\n\n const indexBeforeExits = self.events.length\n let indexBeforeFlow = indexBeforeExits\n /** @type {boolean|undefined} */\n\n let seen\n /** @type {Point|undefined} */\n\n let point // Find the previous chunk (the one before the lazy line).\n\n while (indexBeforeFlow--) {\n if (\n self.events[indexBeforeFlow][0] === 'exit' &&\n self.events[indexBeforeFlow][1].type === 'chunkFlow'\n ) {\n if (seen) {\n point = self.events[indexBeforeFlow][1].end\n break\n }\n\n seen = true\n }\n }\n\n exitContainers(continued) // Fix positions.\n\n index = indexBeforeExits\n\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point)\n index++\n } // Inject the exits earlier (they\u2019re still also at the end).\n\n splice(\n self.events,\n indexBeforeFlow + 1,\n 0,\n self.events.slice(indexBeforeExits)\n ) // Discard the duplicate exits.\n\n self.events.length = index\n }\n }\n /**\n * @param {number} size\n * @returns {void}\n */\n\n function exitContainers(size) {\n let index = stack.length // Exit open containers.\n\n while (index-- > size) {\n const entry = stack[index]\n self.containerState = entry[1]\n entry[0].exit.call(self, effects)\n }\n\n stack.length = size\n }\n\n function closeFlow() {\n childFlow.write([null])\n childToken = undefined\n childFlow = undefined\n self.containerState._closeFlow = undefined\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeContainer(effects, ok, nok) {\n return factorySpace(\n effects,\n effects.attempt(this.parser.constructs.document, ok, nok),\n 'linePrefix',\n this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n )\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {\n markdownLineEndingOrSpace,\n unicodePunctuation,\n unicodeWhitespace\n} from 'micromark-util-character'\n\n/**\n * Classify whether a character code represents whitespace, punctuation, or\n * something else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * Note that eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * @returns {number|undefined}\n */\nexport function classifyCharacter(code) {\n if (\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return 1\n }\n\n if (unicodePunctuation(code)) {\n return 2\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {{resolveAll?: Resolver}[]} constructs\n * @param {Event[]} events\n * @param {TokenizeContext} context\n * @returns {Event[]}\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Resolver[]} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Point} Point\n */\nimport {push, splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n\n/** @type {Construct} */\nexport const attention = {\n name: 'attention',\n tokenize: tokenizeAttention,\n resolveAll: resolveAllAttention\n}\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n\nfunction resolveAllAttention(events, context) {\n let index = -1\n /** @type {number} */\n\n let open\n /** @type {Token} */\n\n let group\n /** @type {Token} */\n\n let text\n /** @type {Token} */\n\n let openingSequence\n /** @type {Token} */\n\n let closingSequence\n /** @type {number} */\n\n let use\n /** @type {Event[]} */\n\n let nextEvents\n /** @type {number} */\n\n let offset // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it\u2019s\n // a bottleneck for malicious stuff.\n\n while (++index < events.length) {\n // Find a token that can close.\n if (\n events[index][0] === 'enter' &&\n events[index][1].type === 'attentionSequence' &&\n events[index][1]._close\n ) {\n open = index // Now walk back to find an opener.\n\n while (open--) {\n // Find a token that can open the closer.\n if (\n events[open][0] === 'exit' &&\n events[open][1].type === 'attentionSequence' &&\n events[open][1]._open && // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) ===\n context.sliceSerialize(events[index][1]).charCodeAt(0)\n ) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don\u2019t match.\n if (\n (events[open][1]._close || events[index][1]._open) &&\n (events[index][1].end.offset - events[index][1].start.offset) % 3 &&\n !(\n (events[open][1].end.offset -\n events[open][1].start.offset +\n events[index][1].end.offset -\n events[index][1].start.offset) %\n 3\n )\n ) {\n continue\n } // Number of markers to use from the sequence.\n\n use =\n events[open][1].end.offset - events[open][1].start.offset > 1 &&\n events[index][1].end.offset - events[index][1].start.offset > 1\n ? 2\n : 1\n const start = Object.assign({}, events[open][1].end)\n const end = Object.assign({}, events[index][1].start)\n movePoint(start, -use)\n movePoint(end, use)\n openingSequence = {\n type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n start,\n end: Object.assign({}, events[open][1].end)\n }\n closingSequence = {\n type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n start: Object.assign({}, events[index][1].start),\n end\n }\n text = {\n type: use > 1 ? 'strongText' : 'emphasisText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n }\n group = {\n type: use > 1 ? 'strong' : 'emphasis',\n start: Object.assign({}, openingSequence.start),\n end: Object.assign({}, closingSequence.end)\n }\n events[open][1].end = Object.assign({}, openingSequence.start)\n events[index][1].start = Object.assign({}, closingSequence.end)\n nextEvents = [] // If there are more markers in the opening, add them before.\n\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [\n ['enter', events[open][1], context],\n ['exit', events[open][1], context]\n ])\n } // Opening.\n\n nextEvents = push(nextEvents, [\n ['enter', group, context],\n ['enter', openingSequence, context],\n ['exit', openingSequence, context],\n ['enter', text, context]\n ]) // Between.\n\n nextEvents = push(\n nextEvents,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + 1, index),\n context\n )\n ) // Closing.\n\n nextEvents = push(nextEvents, [\n ['exit', text, context],\n ['enter', closingSequence, context],\n ['exit', closingSequence, context],\n ['exit', group, context]\n ]) // If there are more markers in the closing, add them after.\n\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2\n nextEvents = push(nextEvents, [\n ['enter', events[index][1], context],\n ['exit', events[index][1], context]\n ])\n } else {\n offset = 0\n }\n\n splice(events, open - 1, index - open + 3, nextEvents)\n index = open + nextEvents.length - offset - 2\n break\n }\n }\n }\n } // Remove remaining sequences.\n\n index = -1\n\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data'\n }\n }\n\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null\n const previous = this.previous\n const before = classifyCharacter(previous)\n /** @type {NonNullable} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('attentionSequence')\n marker = code\n return sequence(code)\n }\n /** @type {State} */\n\n function sequence(code) {\n if (code === marker) {\n effects.consume(code)\n return sequence\n }\n\n const token = effects.exit('attentionSequence')\n const after = classifyCharacter(code)\n const open =\n !after || (after === 2 && before) || attentionMarkers.includes(code)\n const close =\n !before || (before === 2 && after) || attentionMarkers.includes(previous)\n token._open = Boolean(marker === 42 ? open : open && (before || !close))\n token._close = Boolean(marker === 42 ? close : close && (after || !open))\n return ok(code)\n }\n}\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It\u2019s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {void}\n */\n\nfunction movePoint(point, offset) {\n point.column += offset\n point.offset += offset\n point._bufferIndex += offset\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n asciiAtext,\n asciiControl\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 1\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('autolink')\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.enter('autolinkProtocol')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n return schemeOrEmailAtext\n }\n\n return asciiAtext(code) ? emailAtext(code) : nok(code)\n }\n /** @type {State} */\n\n function schemeOrEmailAtext(code) {\n return code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)\n ? schemeInsideOrEmailAtext(code)\n : emailAtext(code)\n }\n /** @type {State} */\n\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code)\n return urlInside\n }\n\n if (\n (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n size++ < 32\n ) {\n effects.consume(code)\n return schemeInsideOrEmailAtext\n }\n\n return emailAtext(code)\n }\n /** @type {State} */\n\n function urlInside(code) {\n if (code === 62) {\n effects.exit('autolinkProtocol')\n return end(code)\n }\n\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code)\n }\n\n effects.consume(code)\n return urlInside\n }\n /** @type {State} */\n\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code)\n size = 0\n return emailAtSignOrDot\n }\n\n if (asciiAtext(code)) {\n effects.consume(code)\n return emailAtext\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n }\n /** @type {State} */\n\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code)\n size = 0\n return emailAtSignOrDot\n }\n\n if (code === 62) {\n // Exit, then change the type.\n effects.exit('autolinkProtocol').type = 'autolinkEmail'\n return end(code)\n }\n\n return emailValue(code)\n }\n /** @type {State} */\n\n function emailValue(code) {\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n effects.consume(code)\n return code === 45 ? emailValue : emailLabel\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function end(code) {\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.exit('autolink')\n return ok\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlankLine(effects, ok, nok) {\n return factorySpace(effects, afterWhitespace, 'linePrefix')\n /** @type {State} */\n\n function afterWhitespace(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownSpace} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const blockQuote = {\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart,\n continuation: {\n tokenize: tokenizeBlockQuoteContinuation\n },\n exit\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n if (code === 62) {\n const state = self.containerState\n\n if (!state.open) {\n effects.enter('blockQuote', {\n _container: true\n })\n state.open = true\n }\n\n effects.enter('blockQuotePrefix')\n effects.enter('blockQuoteMarker')\n effects.consume(code)\n effects.exit('blockQuoteMarker')\n return after\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n if (markdownSpace(code)) {\n effects.enter('blockQuotePrefixWhitespace')\n effects.consume(code)\n effects.exit('blockQuotePrefixWhitespace')\n effects.exit('blockQuotePrefix')\n return ok\n }\n\n effects.exit('blockQuotePrefix')\n return ok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n return factorySpace(\n effects,\n effects.attempt(blockQuote, ok, nok),\n 'linePrefix',\n this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n )\n}\n/** @type {Exiter} */\n\nfunction exit(effects) {\n effects.exit('blockQuote')\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {asciiPunctuation} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('characterEscape')\n effects.enter('escapeMarker')\n effects.consume(code)\n effects.exit('escapeMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (asciiPunctuation(code)) {\n effects.enter('characterEscapeValue')\n effects.consume(code)\n effects.exit('characterEscapeValue')\n effects.exit('characterEscape')\n return ok\n }\n\n return nok(code)\n }\n}\n", "/// \n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n const characterReference = '&' + value + ';'\n element.innerHTML = characterReference\n const char = element.textContent\n\n // Some named character references do not require the closing semicolon\n // (`¬`, for instance), which leads to situations where parsing the assumed\n // named reference of `¬it;` will result in the string `\u00ACit;`.\n // When we encounter a trailing semicolon after parsing, and the character\n // reference to decode was not a semicolon (`;`), we can assume that the\n // matching was not complete.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n return false\n }\n\n // If the decoded string is equal to the input, the character reference was\n // not valid.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n return char === characterReference ? false : char\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {\n asciiAlphanumeric,\n asciiDigit,\n asciiHexDigit\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this\n let size = 0\n /** @type {number} */\n\n let max\n /** @type {(code: Code) => code is number} */\n\n let test\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('characterReference')\n effects.enter('characterReferenceMarker')\n effects.consume(code)\n effects.exit('characterReferenceMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 35) {\n effects.enter('characterReferenceMarkerNumeric')\n effects.consume(code)\n effects.exit('characterReferenceMarkerNumeric')\n return numeric\n }\n\n effects.enter('characterReferenceValue')\n max = 31\n test = asciiAlphanumeric\n return value(code)\n }\n /** @type {State} */\n\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter('characterReferenceMarkerHexadecimal')\n effects.consume(code)\n effects.exit('characterReferenceMarkerHexadecimal')\n effects.enter('characterReferenceValue')\n max = 6\n test = asciiHexDigit\n return value\n }\n\n effects.enter('characterReferenceValue')\n max = 7\n test = asciiDigit\n return value(code)\n }\n /** @type {State} */\n\n function value(code) {\n /** @type {Token} */\n let token\n\n if (code === 59 && size) {\n token = effects.exit('characterReferenceValue')\n\n if (\n test === asciiAlphanumeric &&\n !decodeNamedCharacterReference(self.sliceSerialize(token))\n ) {\n return nok(code)\n }\n\n effects.enter('characterReferenceMarker')\n effects.consume(code)\n effects.exit('characterReferenceMarker')\n effects.exit('characterReference')\n return ok\n }\n\n if (test(code) && size++ < max) {\n effects.consume(code)\n return value\n }\n\n return nok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeFenced = {\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced,\n concrete: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this\n /** @type {Construct} */\n\n const closingFenceConstruct = {\n tokenize: tokenizeClosingFence,\n partial: true\n }\n /** @type {Construct} */\n\n const nonLazyLine = {\n tokenize: tokenizeNonLazyLine,\n partial: true\n }\n const tail = this.events[this.events.length - 1]\n const initialPrefix =\n tail && tail[1].type === 'linePrefix'\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n let sizeOpen = 0\n /** @type {NonNullable} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('codeFenced')\n effects.enter('codeFencedFence')\n effects.enter('codeFencedFenceSequence')\n marker = code\n return sequenceOpen(code)\n }\n /** @type {State} */\n\n function sequenceOpen(code) {\n if (code === marker) {\n effects.consume(code)\n sizeOpen++\n return sequenceOpen\n }\n\n effects.exit('codeFencedFenceSequence')\n return sizeOpen < 3\n ? nok(code)\n : factorySpace(effects, infoOpen, 'whitespace')(code)\n }\n /** @type {State} */\n\n function infoOpen(code) {\n if (code === null || markdownLineEnding(code)) {\n return openAfter(code)\n }\n\n effects.enter('codeFencedFenceInfo')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return info(code)\n }\n /** @type {State} */\n\n function info(code) {\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceInfo')\n return factorySpace(effects, infoAfter, 'whitespace')(code)\n }\n\n if (code === 96 && code === marker) return nok(code)\n effects.consume(code)\n return info\n }\n /** @type {State} */\n\n function infoAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n return openAfter(code)\n }\n\n effects.enter('codeFencedFenceMeta')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return meta(code)\n }\n /** @type {State} */\n\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceMeta')\n return openAfter(code)\n }\n\n if (code === 96 && code === marker) return nok(code)\n effects.consume(code)\n return meta\n }\n /** @type {State} */\n\n function openAfter(code) {\n effects.exit('codeFencedFence')\n return self.interrupt ? ok(code) : contentStart(code)\n }\n /** @type {State} */\n\n function contentStart(code) {\n if (code === null) {\n return after(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.attempt(\n nonLazyLine,\n effects.attempt(\n closingFenceConstruct,\n after,\n initialPrefix\n ? factorySpace(\n effects,\n contentStart,\n 'linePrefix',\n initialPrefix + 1\n )\n : contentStart\n ),\n after\n )(code)\n }\n\n effects.enter('codeFlowValue')\n return contentContinue(code)\n }\n /** @type {State} */\n\n function contentContinue(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return contentStart(code)\n }\n\n effects.consume(code)\n return contentContinue\n }\n /** @type {State} */\n\n function after(code) {\n effects.exit('codeFenced')\n return ok(code)\n }\n /** @type {Tokenizer} */\n\n function tokenizeNonLazyLine(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return lineStart\n }\n /** @type {State} */\n\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n }\n /** @type {Tokenizer} */\n\n function tokenizeClosingFence(effects, ok, nok) {\n let size = 0\n return factorySpace(\n effects,\n closingSequenceStart,\n 'linePrefix',\n this.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )\n /** @type {State} */\n\n function closingSequenceStart(code) {\n effects.enter('codeFencedFence')\n effects.enter('codeFencedFenceSequence')\n return closingSequence(code)\n }\n /** @type {State} */\n\n function closingSequence(code) {\n if (code === marker) {\n effects.consume(code)\n size++\n return closingSequence\n }\n\n if (size < sizeOpen) return nok(code)\n effects.exit('codeFencedFenceSequence')\n return factorySpace(effects, closingSequenceEnd, 'whitespace')(code)\n }\n /** @type {State} */\n\n function closingSequenceEnd(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFencedFence')\n return ok(code)\n }\n\n return nok(code)\n }\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeIndented = {\n name: 'codeIndented',\n tokenize: tokenizeCodeIndented\n}\n/** @type {Construct} */\n\nconst indentedContent = {\n tokenize: tokenizeIndentedContent,\n partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeIndented(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('codeIndented')\n return factorySpace(effects, afterStartPrefix, 'linePrefix', 4 + 1)(code)\n }\n /** @type {State} */\n\n function afterStartPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ? afterPrefix(code)\n : nok(code)\n }\n /** @type {State} */\n\n function afterPrefix(code) {\n if (code === null) {\n return after(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.attempt(indentedContent, afterPrefix, after)(code)\n }\n\n effects.enter('codeFlowValue')\n return content(code)\n }\n /** @type {State} */\n\n function content(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return afterPrefix(code)\n }\n\n effects.consume(code)\n return content\n }\n /** @type {State} */\n\n function after(code) {\n effects.exit('codeIndented')\n return ok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeIndentedContent(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n // If this is a lazy line, it can\u2019t be code.\n if (self.parser.lazy[self.now().line]) {\n return nok(code)\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return start\n }\n\n return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n }\n /** @type {State} */\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ? ok(code)\n : markdownLineEnding(code)\n ? start(code)\n : nok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n tokenize: tokenizeCodeText,\n resolve: resolveCodeText,\n previous\n}\n/** @type {Resolver} */\n\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4\n let headEnterIndex = 3\n /** @type {number} */\n\n let index\n /** @type {number|undefined} */\n\n let enter // If we start and end with an EOL or a space.\n\n if (\n (events[headEnterIndex][1].type === 'lineEnding' ||\n events[headEnterIndex][1].type === 'space') &&\n (events[tailExitIndex][1].type === 'lineEnding' ||\n events[tailExitIndex][1].type === 'space')\n ) {\n index = headEnterIndex // And we have data.\n\n while (++index < tailExitIndex) {\n if (events[index][1].type === 'codeTextData') {\n // Then we have padding.\n events[headEnterIndex][1].type = 'codeTextPadding'\n events[tailExitIndex][1].type = 'codeTextPadding'\n headEnterIndex += 2\n tailExitIndex -= 2\n break\n }\n }\n } // Merge adjacent spaces and data.\n\n index = headEnterIndex - 1\n tailExitIndex++\n\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n enter = index\n }\n } else if (\n index === tailExitIndex ||\n events[index][1].type === 'lineEnding'\n ) {\n events[enter][1].type = 'codeTextData'\n\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n tailExitIndex -= index - enter - 2\n index = enter + 2\n }\n\n enter = undefined\n }\n }\n\n return events\n}\n/** @type {Previous} */\n\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return (\n code !== 96 ||\n this.events[this.events.length - 1][1].type === 'characterEscape'\n )\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this\n let sizeOpen = 0\n /** @type {number} */\n\n let size\n /** @type {Token} */\n\n let token\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('codeText')\n effects.enter('codeTextSequence')\n return openingSequence(code)\n }\n /** @type {State} */\n\n function openingSequence(code) {\n if (code === 96) {\n effects.consume(code)\n sizeOpen++\n return openingSequence\n }\n\n effects.exit('codeTextSequence')\n return gap(code)\n }\n /** @type {State} */\n\n function gap(code) {\n // EOF.\n if (code === null) {\n return nok(code)\n } // Closing fence?\n // Could also be data.\n\n if (code === 96) {\n token = effects.enter('codeTextSequence')\n size = 0\n return closingSequence(code)\n } // Tabs don\u2019t work, and virtual spaces don\u2019t make sense.\n\n if (code === 32) {\n effects.enter('space')\n effects.consume(code)\n effects.exit('space')\n return gap\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return gap\n } // Data.\n\n effects.enter('codeTextData')\n return data(code)\n } // In code.\n\n /** @type {State} */\n\n function data(code) {\n if (\n code === null ||\n code === 32 ||\n code === 96 ||\n markdownLineEnding(code)\n ) {\n effects.exit('codeTextData')\n return gap(code)\n }\n\n effects.consume(code)\n return data\n } // Closing fence.\n\n /** @type {State} */\n\n function closingSequence(code) {\n // More.\n if (code === 96) {\n effects.consume(code)\n size++\n return closingSequence\n } // Done!\n\n if (size === sizeOpen) {\n effects.exit('codeTextSequence')\n effects.exit('codeText')\n return ok(code)\n } // More or less accents: mark as data.\n\n token.type = 'codeTextData'\n return data(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n */\nimport {splice} from 'micromark-util-chunked'\n\n/**\n * Tokenize subcontent.\n *\n * @param {Event[]} events\n * @returns {boolean}\n */\nexport function subtokenize(events) {\n /** @type {Record} */\n const jumps = {}\n let index = -1\n /** @type {Event} */\n\n let event\n /** @type {number|undefined} */\n\n let lineIndex\n /** @type {number} */\n\n let otherIndex\n /** @type {Event} */\n\n let otherEvent\n /** @type {Event[]} */\n\n let parameters\n /** @type {Event[]} */\n\n let subevents\n /** @type {boolean|undefined} */\n\n let more\n\n while (++index < events.length) {\n while (index in jumps) {\n index = jumps[index]\n }\n\n event = events[index] // Add a hook for the GFM tasklist extension, which needs to know if text\n // is in the first content of a list item.\n\n if (\n index &&\n event[1].type === 'chunkFlow' &&\n events[index - 1][1].type === 'listItemPrefix'\n ) {\n subevents = event[1]._tokenizer.events\n otherIndex = 0\n\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === 'lineEndingBlank'\n ) {\n otherIndex += 2\n }\n\n if (\n otherIndex < subevents.length &&\n subevents[otherIndex][1].type === 'content'\n ) {\n while (++otherIndex < subevents.length) {\n if (subevents[otherIndex][1].type === 'content') {\n break\n }\n\n if (subevents[otherIndex][1].type === 'chunkText') {\n subevents[otherIndex][1]._isInFirstContentOfListItem = true\n otherIndex++\n }\n }\n }\n } // Enter.\n\n if (event[0] === 'enter') {\n if (event[1].contentType) {\n Object.assign(jumps, subcontent(events, index))\n index = jumps[index]\n more = true\n }\n } // Exit.\n else if (event[1]._container) {\n otherIndex = index\n lineIndex = undefined\n\n while (otherIndex--) {\n otherEvent = events[otherIndex]\n\n if (\n otherEvent[1].type === 'lineEnding' ||\n otherEvent[1].type === 'lineEndingBlank'\n ) {\n if (otherEvent[0] === 'enter') {\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank'\n }\n\n otherEvent[1].type = 'lineEnding'\n lineIndex = otherIndex\n }\n } else {\n break\n }\n }\n\n if (lineIndex) {\n // Fix position.\n event[1].end = Object.assign({}, events[lineIndex][1].start) // Switch container exit w/ line endings.\n\n parameters = events.slice(lineIndex, index)\n parameters.unshift(event)\n splice(events, lineIndex, index - lineIndex + 1, parameters)\n }\n }\n }\n\n return !more\n}\n/**\n * Tokenize embedded tokens.\n *\n * @param {Event[]} events\n * @param {number} eventIndex\n * @returns {Record}\n */\n\nfunction subcontent(events, eventIndex) {\n const token = events[eventIndex][1]\n const context = events[eventIndex][2]\n let startPosition = eventIndex - 1\n /** @type {number[]} */\n\n const startPositions = []\n const tokenizer =\n token._tokenizer || context.parser[token.contentType](token.start)\n const childEvents = tokenizer.events\n /** @type {[number, number][]} */\n\n const jumps = []\n /** @type {Record} */\n\n const gaps = {}\n /** @type {Chunk[]} */\n\n let stream\n /** @type {Token|undefined} */\n\n let previous\n let index = -1\n /** @type {Token|undefined} */\n\n let current = token\n let adjust = 0\n let start = 0\n const breaks = [start] // Loop forward through the linked tokens to pass them in order to the\n // subtokenizer.\n\n while (current) {\n // Find the position of the event for this token.\n while (events[++startPosition][1] !== current) {\n // Empty.\n }\n\n startPositions.push(startPosition)\n\n if (!current._tokenizer) {\n stream = context.sliceStream(current)\n\n if (!current.next) {\n stream.push(null)\n }\n\n if (previous) {\n tokenizer.defineSkip(current.start)\n }\n\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = true\n }\n\n tokenizer.write(stream)\n\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = undefined\n }\n } // Unravel the next token.\n\n previous = current\n current = current.next\n } // Now, loop back through all events (and linked tokens), to figure out which\n // parts belong where.\n\n current = token\n\n while (++index < childEvents.length) {\n if (\n // Find a void token that includes a break.\n childEvents[index][0] === 'exit' &&\n childEvents[index - 1][0] === 'enter' &&\n childEvents[index][1].type === childEvents[index - 1][1].type &&\n childEvents[index][1].start.line !== childEvents[index][1].end.line\n ) {\n start = index + 1\n breaks.push(start) // Help GC.\n\n current._tokenizer = undefined\n current.previous = undefined\n current = current.next\n }\n } // Help GC.\n\n tokenizer.events = [] // If there\u2019s one more token (which is the cases for lines that end in an\n // EOF), that\u2019s perfect: the last point we found starts it.\n // If there isn\u2019t then make sure any remaining content is added to it.\n\n if (current) {\n // Help GC.\n current._tokenizer = undefined\n current.previous = undefined\n } else {\n breaks.pop()\n } // Now splice the events from the subtokenizer into the current events,\n // moving back to front so that splice indices aren\u2019t affected.\n\n index = breaks.length\n\n while (index--) {\n const slice = childEvents.slice(breaks[index], breaks[index + 1])\n const start = startPositions.pop()\n jumps.unshift([start, start + slice.length - 1])\n splice(events, start, 2, slice)\n }\n\n index = -1\n\n while (++index < jumps.length) {\n gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n adjust += jumps[index][1] - jumps[index][0] - 1\n }\n\n return gaps\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n tokenize: tokenizeContent,\n resolve: resolveContent\n}\n/** @type {Construct} */\n\nconst continuationConstruct = {\n tokenize: tokenizeContinuation,\n partial: true\n}\n/**\n * Content is transparent: it\u2019s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\n\nfunction resolveContent(events) {\n subtokenize(events)\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeContent(effects, ok) {\n /** @type {Token} */\n let previous\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('content')\n previous = effects.enter('chunkContent', {\n contentType: 'content'\n })\n return data(code)\n }\n /** @type {State} */\n\n function data(code) {\n if (code === null) {\n return contentEnd(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.check(\n continuationConstruct,\n contentContinue,\n contentEnd\n )(code)\n } // Data.\n\n effects.consume(code)\n return data\n }\n /** @type {State} */\n\n function contentEnd(code) {\n effects.exit('chunkContent')\n effects.exit('content')\n return ok(code)\n }\n /** @type {State} */\n\n function contentContinue(code) {\n effects.consume(code)\n effects.exit('chunkContent')\n previous.next = effects.enter('chunkContent', {\n contentType: 'content',\n previous\n })\n previous = previous.next\n return data\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeContinuation(effects, ok, nok) {\n const self = this\n return startLookahead\n /** @type {State} */\n\n function startLookahead(code) {\n effects.exit('chunkContent')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, prefixed, 'linePrefix')\n }\n /** @type {State} */\n\n function prefixed(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n\n const tail = self.events[self.events.length - 1]\n\n if (\n !self.parser.constructs.disable.null.includes('codeIndented') &&\n tail &&\n tail[1].type === 'linePrefix' &&\n tail[2].sliceSerialize(tail[1], true).length >= 4\n ) {\n return ok(code)\n }\n\n return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport {\n asciiControl,\n markdownLineEndingOrSpace,\n markdownLineEnding\n} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} literalType\n * @param {string} literalMarkerType\n * @param {string} rawType\n * @param {string} stringType\n * @param {number} [max=Infinity]\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryDestination(\n effects,\n ok,\n nok,\n type,\n literalType,\n literalMarkerType,\n rawType,\n stringType,\n max\n) {\n const limit = max || Number.POSITIVE_INFINITY\n let balance = 0\n return start\n /** @type {State} */\n\n function start(code) {\n if (code === 60) {\n effects.enter(type)\n effects.enter(literalType)\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n return destinationEnclosedBefore\n }\n\n if (code === null || code === 41 || asciiControl(code)) {\n return nok(code)\n }\n\n effects.enter(type)\n effects.enter(rawType)\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return destinationRaw(code)\n }\n /** @type {State} */\n\n function destinationEnclosedBefore(code) {\n if (code === 62) {\n effects.enter(literalMarkerType)\n effects.consume(code)\n effects.exit(literalMarkerType)\n effects.exit(literalType)\n effects.exit(type)\n return ok\n }\n\n effects.enter(stringType)\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return destinationEnclosed(code)\n }\n /** @type {State} */\n\n function destinationEnclosed(code) {\n if (code === 62) {\n effects.exit('chunkString')\n effects.exit(stringType)\n return destinationEnclosedBefore(code)\n }\n\n if (code === null || code === 60 || markdownLineEnding(code)) {\n return nok(code)\n }\n\n effects.consume(code)\n return code === 92 ? destinationEnclosedEscape : destinationEnclosed\n }\n /** @type {State} */\n\n function destinationEnclosedEscape(code) {\n if (code === 60 || code === 62 || code === 92) {\n effects.consume(code)\n return destinationEnclosed\n }\n\n return destinationEnclosed(code)\n }\n /** @type {State} */\n\n function destinationRaw(code) {\n if (code === 40) {\n if (++balance > limit) return nok(code)\n effects.consume(code)\n return destinationRaw\n }\n\n if (code === 41) {\n if (!balance--) {\n effects.exit('chunkString')\n effects.exit(stringType)\n effects.exit(rawType)\n effects.exit(type)\n return ok(code)\n }\n\n effects.consume(code)\n return destinationRaw\n }\n\n if (code === null || markdownLineEndingOrSpace(code)) {\n if (balance) return nok(code)\n effects.exit('chunkString')\n effects.exit(stringType)\n effects.exit(rawType)\n effects.exit(type)\n return ok(code)\n }\n\n if (asciiControl(code)) return nok(code)\n effects.consume(code)\n return code === 92 ? destinationRawEscape : destinationRaw\n }\n /** @type {State} */\n\n function destinationRawEscape(code) {\n if (code === 40 || code === 41 || code === 92) {\n effects.consume(code)\n return destinationRaw\n }\n\n return destinationRaw(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/**\n * @this {TokenizeContext}\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} markerType\n * @param {string} stringType\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n const self = this\n let size = 0\n /** @type {boolean} */\n\n let data\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.enter(stringType)\n return atBreak\n }\n /** @type {State} */\n\n function atBreak(code) {\n if (\n code === null ||\n code === 91 ||\n (code === 93 && !data) ||\n /* To do: remove in the future once we\u2019ve switched from\n * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n * which doesn\u2019t need this */\n\n /* Hidden footnotes hook */\n\n /* c8 ignore next 3 */\n (code === 94 &&\n !size &&\n '_hiddenFootnoteSupport' in self.parser.constructs) ||\n size > 999\n ) {\n return nok(code)\n }\n\n if (code === 93) {\n effects.exit(stringType)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return atBreak\n }\n\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return label(code)\n }\n /** @type {State} */\n\n function label(code) {\n if (\n code === null ||\n code === 91 ||\n code === 93 ||\n markdownLineEnding(code) ||\n size++ > 999\n ) {\n effects.exit('chunkString')\n return atBreak(code)\n }\n\n effects.consume(code)\n data = data || !markdownSpace(code)\n return code === 92 ? labelEscape : label\n }\n /** @type {State} */\n\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code)\n size++\n return label\n }\n\n return label(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} markerType\n * @param {string} stringType\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n /** @type {NonNullable} */\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter(type)\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n marker = code === 40 ? 41 : code\n return atFirstTitleBreak\n }\n /** @type {State} */\n\n function atFirstTitleBreak(code) {\n if (code === marker) {\n effects.enter(markerType)\n effects.consume(code)\n effects.exit(markerType)\n effects.exit(type)\n return ok\n }\n\n effects.enter(stringType)\n return atTitleBreak(code)\n }\n /** @type {State} */\n\n function atTitleBreak(code) {\n if (code === marker) {\n effects.exit(stringType)\n return atFirstTitleBreak(marker)\n }\n\n if (code === null) {\n return nok(code)\n } // Note: blank lines can\u2019t exist in content.\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, atTitleBreak, 'linePrefix')\n }\n\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return title(code)\n }\n /** @type {State} */\n\n function title(code) {\n if (code === marker || code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n return atTitleBreak(code)\n }\n\n effects.consume(code)\n return code === 92 ? titleEscape : title\n }\n /** @type {State} */\n\n function titleEscape(code) {\n if (code === marker || code === 92) {\n effects.consume(code)\n return title\n }\n\n return title(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n */\nexport function factoryWhitespace(effects, ok) {\n /** @type {boolean} */\n let seen\n return start\n /** @type {State} */\n\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n seen = true\n return start\n }\n\n if (markdownSpace(code)) {\n return factorySpace(\n effects,\n start,\n seen ? 'linePrefix' : 'lineSuffix'\n )(code)\n }\n\n return ok(code)\n }\n}\n", "/**\n * Normalize an identifier (such as used in definitions).\n *\n * @param {string} value\n * @returns {string}\n */\nexport function normalizeIdentifier(value) {\n return (\n value // Collapse Markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, ' ') // Trim.\n .replace(/^ | $/g, '') // Some characters are considered \u201Cuppercase\u201D, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no method is uppercase.\n .toLowerCase()\n .toUpperCase()\n )\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factorySpace} from 'micromark-factory-space'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const definition = {\n name: 'definition',\n tokenize: tokenizeDefinition\n}\n/** @type {Construct} */\n\nconst titleConstruct = {\n tokenize: tokenizeTitle,\n partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeDefinition(effects, ok, nok) {\n const self = this\n /** @type {string} */\n\n let identifier\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('definition')\n return factoryLabel.call(\n self,\n effects,\n labelAfter,\n nok,\n 'definitionLabel',\n 'definitionLabelMarker',\n 'definitionLabelString'\n )(code)\n }\n /** @type {State} */\n\n function labelAfter(code) {\n identifier = normalizeIdentifier(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n\n if (code === 58) {\n effects.enter('definitionMarker')\n effects.consume(code)\n effects.exit('definitionMarker') // Note: blank lines can\u2019t exist in content.\n\n return factoryWhitespace(\n effects,\n factoryDestination(\n effects,\n effects.attempt(\n titleConstruct,\n factorySpace(effects, after, 'whitespace'),\n factorySpace(effects, after, 'whitespace')\n ),\n nok,\n 'definitionDestination',\n 'definitionDestinationLiteral',\n 'definitionDestinationLiteralMarker',\n 'definitionDestinationRaw',\n 'definitionDestinationString'\n )\n )\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('definition')\n\n if (!self.parser.defined.includes(identifier)) {\n self.parser.defined.push(identifier)\n }\n\n return ok(code)\n }\n\n return nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeTitle(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, before)(code)\n : nok(code)\n }\n /** @type {State} */\n\n function before(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(\n effects,\n factorySpace(effects, after, 'whitespace'),\n nok,\n 'definitionTitle',\n 'definitionTitleMarker',\n 'definitionTitleString'\n )(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('hardBreakEscape')\n effects.enter('escapeMarker')\n effects.consume(code)\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (markdownLineEnding(code)) {\n effects.exit('escapeMarker')\n effects.exit('hardBreakEscape')\n return ok(code)\n }\n\n return nok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n\n/** @type {Construct} */\nexport const headingAtx = {\n name: 'headingAtx',\n tokenize: tokenizeHeadingAtx,\n resolve: resolveHeadingAtx\n}\n/** @type {Resolver} */\n\nfunction resolveHeadingAtx(events, context) {\n let contentEnd = events.length - 2\n let contentStart = 3\n /** @type {Token} */\n\n let content\n /** @type {Token} */\n\n let text // Prefix whitespace, part of the opening.\n\n if (events[contentStart][1].type === 'whitespace') {\n contentStart += 2\n } // Suffix whitespace, part of the closing.\n\n if (\n contentEnd - 2 > contentStart &&\n events[contentEnd][1].type === 'whitespace'\n ) {\n contentEnd -= 2\n }\n\n if (\n events[contentEnd][1].type === 'atxHeadingSequence' &&\n (contentStart === contentEnd - 1 ||\n (contentEnd - 4 > contentStart &&\n events[contentEnd - 2][1].type === 'whitespace'))\n ) {\n contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n }\n\n if (contentEnd > contentStart) {\n content = {\n type: 'atxHeadingText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end\n }\n text = {\n type: 'chunkText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end,\n // @ts-expect-error Constants are fine to assign.\n contentType: 'text'\n }\n splice(events, contentStart, contentEnd - contentStart + 1, [\n ['enter', content, context],\n ['enter', text, context],\n ['exit', text, context],\n ['exit', content, context]\n ])\n }\n\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n const self = this\n let size = 0\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('atxHeading')\n effects.enter('atxHeadingSequence')\n return fenceOpenInside(code)\n }\n /** @type {State} */\n\n function fenceOpenInside(code) {\n if (code === 35 && size++ < 6) {\n effects.consume(code)\n return fenceOpenInside\n }\n\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingSequence')\n return self.interrupt ? ok(code) : headingBreak(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function headingBreak(code) {\n if (code === 35) {\n effects.enter('atxHeadingSequence')\n return sequence(code)\n }\n\n if (code === null || markdownLineEnding(code)) {\n effects.exit('atxHeading')\n return ok(code)\n }\n\n if (markdownSpace(code)) {\n return factorySpace(effects, headingBreak, 'whitespace')(code)\n }\n\n effects.enter('atxHeadingText')\n return data(code)\n }\n /** @type {State} */\n\n function sequence(code) {\n if (code === 35) {\n effects.consume(code)\n return sequence\n }\n\n effects.exit('atxHeadingSequence')\n return headingBreak(code)\n }\n /** @type {State} */\n\n function data(code) {\n if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingText')\n return headingBreak(code)\n }\n\n effects.consume(code)\n return data\n }\n}\n", "/**\n * List of lowercase HTML tag names which when parsing HTML (flow), result\n * in more relaxed rules (condition 6): because they are known blocks, the\n * HTML-like syntax doesn\u2019t have to be strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * .\n */\nexport const htmlBlockNames = [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n\n/**\n * List of lowercase HTML tag names which when parsing HTML (flow), result in\n * HTML that can include lines w/o exiting, until a closing tag also in this\n * list is found (condition 1).\n *\n * This module is copied from:\n * .\n *\n * Note that `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name'\nimport {blankLine} from './blank-line.js'\n/** @type {Construct} */\n\nexport const htmlFlow = {\n name: 'htmlFlow',\n tokenize: tokenizeHtmlFlow,\n resolveTo: resolveToHtmlFlow,\n concrete: true\n}\n/** @type {Construct} */\n\nconst nextBlankConstruct = {\n tokenize: tokenizeNextBlank,\n partial: true\n}\n/** @type {Resolver} */\n\nfunction resolveToHtmlFlow(events) {\n let index = events.length\n\n while (index--) {\n if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n break\n }\n }\n\n if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n // Add the prefix start to the HTML token.\n events[index][1].start = events[index - 2][1].start // Add the prefix start to the HTML line token.\n\n events[index + 1][1].start = events[index - 2][1].start // Remove the line prefix.\n\n events.splice(index - 2, 2)\n }\n\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n const self = this\n /** @type {number} */\n\n let kind\n /** @type {boolean} */\n\n let startTag\n /** @type {string} */\n\n let buffer\n /** @type {number} */\n\n let index\n /** @type {Code} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('htmlFlow')\n effects.enter('htmlFlowData')\n effects.consume(code)\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationStart\n }\n\n if (code === 47) {\n effects.consume(code)\n return tagCloseStart\n }\n\n if (code === 63) {\n effects.consume(code)\n kind = 3 // While we\u2019re in an instruction instead of a declaration, we\u2019re on a `?`\n // right now, so we do need to search for `>`, similar to declarations.\n\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n buffer = String.fromCharCode(code)\n startTag = true\n return tagName\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function declarationStart(code) {\n if (code === 45) {\n effects.consume(code)\n kind = 2\n return commentOpenInside\n }\n\n if (code === 91) {\n effects.consume(code)\n kind = 5\n buffer = 'CDATA['\n index = 0\n return cdataOpenInside\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n kind = 4\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code)\n return self.interrupt ? ok : continuationDeclarationInside\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function cdataOpenInside(code) {\n if (code === buffer.charCodeAt(index++)) {\n effects.consume(code)\n return index === buffer.length\n ? self.interrupt\n ? ok\n : continuation\n : cdataOpenInside\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n buffer = String.fromCharCode(code)\n return tagName\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagName(code) {\n if (\n code === null ||\n code === 47 ||\n code === 62 ||\n markdownLineEndingOrSpace(code)\n ) {\n if (\n code !== 47 &&\n startTag &&\n htmlRawNames.includes(buffer.toLowerCase())\n ) {\n kind = 1\n return self.interrupt ? ok(code) : continuation(code)\n }\n\n if (htmlBlockNames.includes(buffer.toLowerCase())) {\n kind = 6\n\n if (code === 47) {\n effects.consume(code)\n return basicSelfClosing\n }\n\n return self.interrupt ? ok(code) : continuation(code)\n }\n\n kind = 7 // Do not support complete HTML when interrupting\n\n return self.interrupt && !self.parser.lazy[self.now().line]\n ? nok(code)\n : startTag\n ? completeAttributeNameBefore(code)\n : completeClosingTagAfter(code)\n }\n\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n buffer += String.fromCharCode(code)\n return tagName\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function basicSelfClosing(code) {\n if (code === 62) {\n effects.consume(code)\n return self.interrupt ? ok : continuation\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function completeClosingTagAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeClosingTagAfter\n }\n\n return completeEnd(code)\n }\n /** @type {State} */\n\n function completeAttributeNameBefore(code) {\n if (code === 47) {\n effects.consume(code)\n return completeEnd\n }\n\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return completeAttributeName\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameBefore\n }\n\n return completeEnd(code)\n }\n /** @type {State} */\n\n function completeAttributeName(code) {\n if (\n code === 45 ||\n code === 46 ||\n code === 58 ||\n code === 95 ||\n asciiAlphanumeric(code)\n ) {\n effects.consume(code)\n return completeAttributeName\n }\n\n return completeAttributeNameAfter(code)\n }\n /** @type {State} */\n\n function completeAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameAfter\n }\n\n return completeAttributeNameBefore(code)\n }\n /** @type {State} */\n\n function completeAttributeValueBefore(code) {\n if (\n code === null ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 34 || code === 39) {\n effects.consume(code)\n marker = code\n return completeAttributeValueQuoted\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n\n marker = null\n return completeAttributeValueUnquoted(code)\n }\n /** @type {State} */\n\n function completeAttributeValueQuoted(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n\n if (code === marker) {\n effects.consume(code)\n return completeAttributeValueQuotedAfter\n }\n\n effects.consume(code)\n return completeAttributeValueQuoted\n }\n /** @type {State} */\n\n function completeAttributeValueUnquoted(code) {\n if (\n code === null ||\n code === 34 ||\n code === 39 ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96 ||\n markdownLineEndingOrSpace(code)\n ) {\n return completeAttributeNameAfter(code)\n }\n\n effects.consume(code)\n return completeAttributeValueUnquoted\n }\n /** @type {State} */\n\n function completeAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownSpace(code)) {\n return completeAttributeNameBefore(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function completeEnd(code) {\n if (code === 62) {\n effects.consume(code)\n return completeAfter\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function completeAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAfter\n }\n\n return code === null || markdownLineEnding(code)\n ? continuation(code)\n : nok(code)\n }\n /** @type {State} */\n\n function continuation(code) {\n if (code === 45 && kind === 2) {\n effects.consume(code)\n return continuationCommentInside\n }\n\n if (code === 60 && kind === 1) {\n effects.consume(code)\n return continuationRawTagOpen\n }\n\n if (code === 62 && kind === 4) {\n effects.consume(code)\n return continuationClose\n }\n\n if (code === 63 && kind === 3) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n if (code === 93 && kind === 5) {\n effects.consume(code)\n return continuationCharacterDataInside\n }\n\n if (markdownLineEnding(code) && (kind === 6 || kind === 7)) {\n return effects.check(\n nextBlankConstruct,\n continuationClose,\n continuationAtLineEnding\n )(code)\n }\n\n if (code === null || markdownLineEnding(code)) {\n return continuationAtLineEnding(code)\n }\n\n effects.consume(code)\n return continuation\n }\n /** @type {State} */\n\n function continuationAtLineEnding(code) {\n effects.exit('htmlFlowData')\n return htmlContinueStart(code)\n }\n /** @type {State} */\n\n function htmlContinueStart(code) {\n if (code === null) {\n return done(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.attempt(\n {\n tokenize: htmlLineEnd,\n partial: true\n },\n htmlContinueStart,\n done\n )(code)\n }\n\n effects.enter('htmlFlowData')\n return continuation(code)\n }\n /** @type {Tokenizer} */\n\n function htmlLineEnd(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return lineStart\n }\n /** @type {State} */\n\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n }\n /** @type {State} */\n\n function continuationCommentInside(code) {\n if (code === 45) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code)\n buffer = ''\n return continuationRawEndTag\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationRawEndTag(code) {\n if (code === 62 && htmlRawNames.includes(buffer.toLowerCase())) {\n effects.consume(code)\n return continuationClose\n }\n\n if (asciiAlpha(code) && buffer.length < 8) {\n effects.consume(code)\n buffer += String.fromCharCode(code)\n return continuationRawEndTag\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationCharacterDataInside(code) {\n if (code === 93) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code)\n return continuationClose\n } // More dashes.\n\n if (code === 45 && kind === 2) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n\n return continuation(code)\n }\n /** @type {State} */\n\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('htmlFlowData')\n return done(code)\n }\n\n effects.consume(code)\n return continuationClose\n }\n /** @type {State} */\n\n function done(code) {\n effects.exit('htmlFlow')\n return ok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeNextBlank(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.exit('htmlFlowData')\n effects.enter('lineEndingBlank')\n effects.consume(code)\n effects.exit('lineEndingBlank')\n return effects.attempt(blankLine, ok, nok)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this\n /** @type {NonNullable|undefined} */\n\n let marker\n /** @type {string} */\n\n let buffer\n /** @type {number} */\n\n let index\n /** @type {State} */\n\n let returnState\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('htmlText')\n effects.enter('htmlTextData')\n effects.consume(code)\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationOpen\n }\n\n if (code === 47) {\n effects.consume(code)\n return tagCloseStart\n }\n\n if (code === 63) {\n effects.consume(code)\n return instruction\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagOpen\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code)\n return commentOpen\n }\n\n if (code === 91) {\n effects.consume(code)\n buffer = 'CDATA['\n index = 0\n return cdataOpen\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code)\n return declaration\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function commentOpen(code) {\n if (code === 45) {\n effects.consume(code)\n return commentStart\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function commentStart(code) {\n if (code === null || code === 62) {\n return nok(code)\n }\n\n if (code === 45) {\n effects.consume(code)\n return commentStartDash\n }\n\n return comment(code)\n }\n /** @type {State} */\n\n function commentStartDash(code) {\n if (code === null || code === 62) {\n return nok(code)\n }\n\n return comment(code)\n }\n /** @type {State} */\n\n function comment(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 45) {\n effects.consume(code)\n return commentClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = comment\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return comment\n }\n /** @type {State} */\n\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code)\n return end\n }\n\n return comment(code)\n }\n /** @type {State} */\n\n function cdataOpen(code) {\n if (code === buffer.charCodeAt(index++)) {\n effects.consume(code)\n return index === buffer.length ? cdata : cdataOpen\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function cdata(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 93) {\n effects.consume(code)\n return cdataClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = cdata\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return cdata\n }\n /** @type {State} */\n\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n\n return cdata(code)\n }\n /** @type {State} */\n\n function cdataEnd(code) {\n if (code === 62) {\n return end(code)\n }\n\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n\n return cdata(code)\n }\n /** @type {State} */\n\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code)\n }\n\n if (markdownLineEnding(code)) {\n returnState = declaration\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return declaration\n }\n /** @type {State} */\n\n function instruction(code) {\n if (code === null) {\n return nok(code)\n }\n\n if (code === 63) {\n effects.consume(code)\n return instructionClose\n }\n\n if (markdownLineEnding(code)) {\n returnState = instruction\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return instruction\n }\n /** @type {State} */\n\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code)\n }\n /** @type {State} */\n\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagClose\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagClose(code) {\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagClose\n }\n\n return tagCloseBetween(code)\n }\n /** @type {State} */\n\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagCloseBetween\n }\n\n return end(code)\n }\n /** @type {State} */\n\n function tagOpen(code) {\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagOpen\n }\n\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code)\n return end\n }\n\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenBetween\n }\n\n return end(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeName(code) {\n if (\n code === 45 ||\n code === 46 ||\n code === 58 ||\n code === 95 ||\n asciiAlphanumeric(code)\n ) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n\n return tagOpenAttributeNameAfter(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeNameAfter\n }\n\n return tagOpenBetween(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeValueBefore(code) {\n if (\n code === null ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 34 || code === 39) {\n effects.consume(code)\n marker = code\n return tagOpenAttributeValueQuoted\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore\n return atLineEnding(code)\n }\n\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n\n effects.consume(code)\n marker = undefined\n return tagOpenAttributeValueUnquoted\n }\n /** @type {State} */\n\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code)\n return tagOpenAttributeValueQuotedAfter\n }\n\n if (code === null) {\n return nok(code)\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted\n return atLineEnding(code)\n }\n\n effects.consume(code)\n return tagOpenAttributeValueQuoted\n }\n /** @type {State} */\n\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 62 || code === 47 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function tagOpenAttributeValueUnquoted(code) {\n if (\n code === null ||\n code === 34 ||\n code === 39 ||\n code === 60 ||\n code === 61 ||\n code === 96\n ) {\n return nok(code)\n }\n\n if (code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n\n effects.consume(code)\n return tagOpenAttributeValueUnquoted\n } // We can\u2019t have blank lines in content, so no need to worry about empty\n // tokens.\n\n /** @type {State} */\n\n function atLineEnding(code) {\n effects.exit('htmlTextData')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(\n effects,\n afterPrefix,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )\n }\n /** @type {State} */\n\n function afterPrefix(code) {\n effects.enter('htmlTextData')\n return returnState(code)\n }\n /** @type {State} */\n\n function end(code) {\n if (code === 62) {\n effects.consume(code)\n effects.exit('htmlTextData')\n effects.exit('htmlText')\n return ok\n }\n\n return nok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {resolveAll} from 'micromark-util-resolve-all'\n\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n tokenize: tokenizeLabelEnd,\n resolveTo: resolveToLabelEnd,\n resolveAll: resolveAllLabelEnd\n}\n/** @type {Construct} */\n\nconst resourceConstruct = {\n tokenize: tokenizeResource\n}\n/** @type {Construct} */\n\nconst fullReferenceConstruct = {\n tokenize: tokenizeFullReference\n}\n/** @type {Construct} */\n\nconst collapsedReferenceConstruct = {\n tokenize: tokenizeCollapsedReference\n}\n/** @type {Resolver} */\n\nfunction resolveAllLabelEnd(events) {\n let index = -1\n /** @type {Token} */\n\n let token\n\n while (++index < events.length) {\n token = events[index][1]\n\n if (\n token.type === 'labelImage' ||\n token.type === 'labelLink' ||\n token.type === 'labelEnd'\n ) {\n // Remove the marker.\n events.splice(index + 1, token.type === 'labelImage' ? 4 : 2)\n token.type = 'data'\n index++\n }\n }\n\n return events\n}\n/** @type {Resolver} */\n\nfunction resolveToLabelEnd(events, context) {\n let index = events.length\n let offset = 0\n /** @type {Token} */\n\n let token\n /** @type {number|undefined} */\n\n let open\n /** @type {number|undefined} */\n\n let close\n /** @type {Event[]} */\n\n let media // Find an opening.\n\n while (index--) {\n token = events[index][1]\n\n if (open) {\n // If we see another link, or inactive link label, we\u2019ve been here before.\n if (\n token.type === 'link' ||\n (token.type === 'labelLink' && token._inactive)\n ) {\n break\n } // Mark other link openings as inactive, as we can\u2019t have links in\n // links.\n\n if (events[index][0] === 'enter' && token.type === 'labelLink') {\n token._inactive = true\n }\n } else if (close) {\n if (\n events[index][0] === 'enter' &&\n (token.type === 'labelImage' || token.type === 'labelLink') &&\n !token._balanced\n ) {\n open = index\n\n if (token.type !== 'labelLink') {\n offset = 2\n break\n }\n }\n } else if (token.type === 'labelEnd') {\n close = index\n }\n }\n\n const group = {\n type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n }\n const label = {\n type: 'label',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[close][1].end)\n }\n const text = {\n type: 'labelText',\n start: Object.assign({}, events[open + offset + 2][1].end),\n end: Object.assign({}, events[close - 2][1].start)\n }\n media = [\n ['enter', group, context],\n ['enter', label, context]\n ] // Opening marker.\n\n media = push(media, events.slice(open + 1, open + offset + 3)) // Text open.\n\n media = push(media, [['enter', text, context]]) // Between.\n\n media = push(\n media,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + offset + 4, close - 3),\n context\n )\n ) // Text close, marker close, label close.\n\n media = push(media, [\n ['exit', text, context],\n events[close - 2],\n events[close - 1],\n ['exit', label, context]\n ]) // Reference, resource, or so.\n\n media = push(media, events.slice(close + 1)) // Media close.\n\n media = push(media, [['exit', group, context]])\n splice(events, open, events.length, media)\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this\n let index = self.events.length\n /** @type {Token} */\n\n let labelStart\n /** @type {boolean} */\n\n let defined // Find an opening.\n\n while (index--) {\n if (\n (self.events[index][1].type === 'labelImage' ||\n self.events[index][1].type === 'labelLink') &&\n !self.events[index][1]._balanced\n ) {\n labelStart = self.events[index][1]\n break\n }\n }\n\n return start\n /** @type {State} */\n\n function start(code) {\n if (!labelStart) {\n return nok(code)\n } // It\u2019s a balanced bracket, but contains a link.\n\n if (labelStart._inactive) return balanced(code)\n defined = self.parser.defined.includes(\n normalizeIdentifier(\n self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })\n )\n )\n effects.enter('labelEnd')\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelEnd')\n return afterLabelEnd\n }\n /** @type {State} */\n\n function afterLabelEnd(code) {\n // Resource: `[asd](fgh)`.\n if (code === 40) {\n return effects.attempt(\n resourceConstruct,\n ok,\n defined ? ok : balanced\n )(code)\n } // Collapsed (`[asd][]`) or full (`[asd][fgh]`) reference?\n\n if (code === 91) {\n return effects.attempt(\n fullReferenceConstruct,\n ok,\n defined\n ? effects.attempt(collapsedReferenceConstruct, ok, balanced)\n : balanced\n )(code)\n } // Shortcut reference: `[asd]`?\n\n return defined ? ok(code) : balanced(code)\n }\n /** @type {State} */\n\n function balanced(code) {\n labelStart._balanced = true\n return nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeResource(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('resource')\n effects.enter('resourceMarker')\n effects.consume(code)\n effects.exit('resourceMarker')\n return factoryWhitespace(effects, open)\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 41) {\n return end(code)\n }\n\n return factoryDestination(\n effects,\n destinationAfter,\n nok,\n 'resourceDestination',\n 'resourceDestinationLiteral',\n 'resourceDestinationLiteralMarker',\n 'resourceDestinationRaw',\n 'resourceDestinationString',\n 32\n )(code)\n }\n /** @type {State} */\n\n function destinationAfter(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, between)(code)\n : end(code)\n }\n /** @type {State} */\n\n function between(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(\n effects,\n factoryWhitespace(effects, end),\n nok,\n 'resourceTitle',\n 'resourceTitleMarker',\n 'resourceTitleString'\n )(code)\n }\n\n return end(code)\n }\n /** @type {State} */\n\n function end(code) {\n if (code === 41) {\n effects.enter('resourceMarker')\n effects.consume(code)\n effects.exit('resourceMarker')\n effects.exit('resource')\n return ok\n }\n\n return nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeFullReference(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n return factoryLabel.call(\n self,\n effects,\n afterLabel,\n nok,\n 'reference',\n 'referenceMarker',\n 'referenceString'\n )(code)\n }\n /** @type {State} */\n\n function afterLabel(code) {\n return self.parser.defined.includes(\n normalizeIdentifier(\n self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n )\n )\n ? ok(code)\n : nok(code)\n }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCollapsedReference(effects, ok, nok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('reference')\n effects.enter('referenceMarker')\n effects.consume(code)\n effects.exit('referenceMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 93) {\n effects.enter('referenceMarker')\n effects.consume(code)\n effects.exit('referenceMarker')\n effects.exit('reference')\n return ok\n }\n\n return nok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {labelEnd} from './label-end.js'\n/** @type {Construct} */\n\nexport const labelStartImage = {\n name: 'labelStartImage',\n tokenize: tokenizeLabelStartImage,\n resolveAll: labelEnd.resolveAll\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('labelImage')\n effects.enter('labelImageMarker')\n effects.consume(code)\n effects.exit('labelImageMarker')\n return open\n }\n /** @type {State} */\n\n function open(code) {\n if (code === 91) {\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelImage')\n return after\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function after(code) {\n /* To do: remove in the future once we\u2019ve switched from\n * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n * which doesn\u2019t need this */\n\n /* Hidden footnotes hook */\n\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n ? nok(code)\n : ok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {labelEnd} from './label-end.js'\n/** @type {Construct} */\n\nexport const labelStartLink = {\n name: 'labelStartLink',\n tokenize: tokenizeLabelStartLink,\n resolveAll: labelEnd.resolveAll\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('labelLink')\n effects.enter('labelMarker')\n effects.consume(code)\n effects.exit('labelMarker')\n effects.exit('labelLink')\n return after\n }\n /** @type {State} */\n\n function after(code) {\n /* To do: remove in the future once we\u2019ve switched from\n * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n * which doesn\u2019t need this */\n\n /* Hidden footnotes hook. */\n\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n ? nok(code)\n : ok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLineEnding(effects, ok) {\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return factorySpace(effects, ok, 'linePrefix')\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeThematicBreak(effects, ok, nok) {\n let size = 0\n /** @type {NonNullable} */\n\n let marker\n return start\n /** @type {State} */\n\n function start(code) {\n effects.enter('thematicBreak')\n marker = code\n return atBreak(code)\n }\n /** @type {State} */\n\n function atBreak(code) {\n if (code === marker) {\n effects.enter('thematicBreakSequence')\n return sequence(code)\n }\n\n if (markdownSpace(code)) {\n return factorySpace(effects, atBreak, 'whitespace')(code)\n }\n\n if (size < 3 || (code !== null && !markdownLineEnding(code))) {\n return nok(code)\n }\n\n effects.exit('thematicBreak')\n return ok(code)\n }\n /** @type {State} */\n\n function sequence(code) {\n if (code === marker) {\n effects.consume(code)\n size++\n return sequence\n }\n\n effects.exit('thematicBreakSequence')\n return atBreak(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * @typedef {Record & {marker: Code, type: string, size: number}} ListContainerState\n * @typedef {TokenizeContext & {containerState: ListContainerState}} TokenizeContextWithState\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {asciiDigit, markdownSpace} from 'micromark-util-character'\nimport {blankLine} from './blank-line.js'\nimport {thematicBreak} from './thematic-break.js'\n/** @type {Construct} */\n\nexport const list = {\n name: 'list',\n tokenize: tokenizeListStart,\n continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd\n}\n/** @type {Construct} */\n\nconst listItemPrefixWhitespaceConstruct = {\n tokenize: tokenizeListItemPrefixWhitespace,\n partial: true\n}\n/** @type {Construct} */\n\nconst indentConstruct = {\n tokenize: tokenizeIndent,\n partial: true\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListStart(effects, ok, nok) {\n const self = this\n const tail = self.events[self.events.length - 1]\n let initialSize =\n tail && tail[1].type === 'linePrefix'\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n let size = 0\n return start\n /** @type {State} */\n\n function start(code) {\n const kind =\n self.containerState.type ||\n (code === 42 || code === 43 || code === 45\n ? 'listUnordered'\n : 'listOrdered')\n\n if (\n kind === 'listUnordered'\n ? !self.containerState.marker || code === self.containerState.marker\n : asciiDigit(code)\n ) {\n if (!self.containerState.type) {\n self.containerState.type = kind\n effects.enter(kind, {\n _container: true\n })\n }\n\n if (kind === 'listUnordered') {\n effects.enter('listItemPrefix')\n return code === 42 || code === 45\n ? effects.check(thematicBreak, nok, atMarker)(code)\n : atMarker(code)\n }\n\n if (!self.interrupt || code === 49) {\n effects.enter('listItemPrefix')\n effects.enter('listItemValue')\n return inside(code)\n }\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function inside(code) {\n if (asciiDigit(code) && ++size < 10) {\n effects.consume(code)\n return inside\n }\n\n if (\n (!self.interrupt || size < 2) &&\n (self.containerState.marker\n ? code === self.containerState.marker\n : code === 41 || code === 46)\n ) {\n effects.exit('listItemValue')\n return atMarker(code)\n }\n\n return nok(code)\n }\n /**\n * @type {State}\n **/\n\n function atMarker(code) {\n effects.enter('listItemMarker')\n effects.consume(code)\n effects.exit('listItemMarker')\n self.containerState.marker = self.containerState.marker || code\n return effects.check(\n blankLine, // Can\u2019t be empty when interrupting.\n self.interrupt ? nok : onBlank,\n effects.attempt(\n listItemPrefixWhitespaceConstruct,\n endOfPrefix,\n otherPrefix\n )\n )\n }\n /** @type {State} */\n\n function onBlank(code) {\n self.containerState.initialBlankLine = true\n initialSize++\n return endOfPrefix(code)\n }\n /** @type {State} */\n\n function otherPrefix(code) {\n if (markdownSpace(code)) {\n effects.enter('listItemPrefixWhitespace')\n effects.consume(code)\n effects.exit('listItemPrefixWhitespace')\n return endOfPrefix\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function endOfPrefix(code) {\n self.containerState.size =\n initialSize +\n self.sliceSerialize(effects.exit('listItemPrefix'), true).length\n return ok(code)\n }\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListContinuation(effects, ok, nok) {\n const self = this\n self.containerState._closeFlow = undefined\n return effects.check(blankLine, onBlank, notBlank)\n /** @type {State} */\n\n function onBlank(code) {\n self.containerState.furtherBlankLines =\n self.containerState.furtherBlankLines ||\n self.containerState.initialBlankLine // We have a blank line.\n // Still, try to consume at most the items size.\n\n return factorySpace(\n effects,\n ok,\n 'listItemIndent',\n self.containerState.size + 1\n )(code)\n }\n /** @type {State} */\n\n function notBlank(code) {\n if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n self.containerState.furtherBlankLines = undefined\n self.containerState.initialBlankLine = undefined\n return notInCurrentItem(code)\n }\n\n self.containerState.furtherBlankLines = undefined\n self.containerState.initialBlankLine = undefined\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n }\n /** @type {State} */\n\n function notInCurrentItem(code) {\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true // As we\u2019re closing flow, we\u2019re no longer interrupting.\n\n self.interrupt = undefined\n return factorySpace(\n effects,\n effects.attempt(list, ok, nok),\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n }\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this\n return factorySpace(\n effects,\n afterPrefix,\n 'listItemIndent',\n self.containerState.size + 1\n )\n /** @type {State} */\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'listItemIndent' &&\n tail[2].sliceSerialize(tail[1], true).length === self.containerState.size\n ? ok(code)\n : nok(code)\n }\n}\n/**\n * @type {Exiter}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type)\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this\n return factorySpace(\n effects,\n afterPrefix,\n 'listItemPrefixWhitespace',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4 + 1\n )\n /** @type {State} */\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return !markdownSpace(code) &&\n tail &&\n tail[1].type === 'listItemPrefixWhitespace'\n ? ok(code)\n : nok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const setextUnderline = {\n name: 'setextUnderline',\n tokenize: tokenizeSetextUnderline,\n resolveTo: resolveToSetextUnderline\n}\n/** @type {Resolver} */\n\nfunction resolveToSetextUnderline(events, context) {\n let index = events.length\n /** @type {number|undefined} */\n\n let content\n /** @type {number|undefined} */\n\n let text\n /** @type {number|undefined} */\n\n let definition // Find the opening of the content.\n // It\u2019ll always exist: we don\u2019t tokenize if it isn\u2019t there.\n\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === 'content') {\n content = index\n break\n }\n\n if (events[index][1].type === 'paragraph') {\n text = index\n }\n } // Exit\n else {\n if (events[index][1].type === 'content') {\n // Remove the content end (if needed we\u2019ll add it later)\n events.splice(index, 1)\n }\n\n if (!definition && events[index][1].type === 'definition') {\n definition = index\n }\n }\n }\n\n const heading = {\n type: 'setextHeading',\n start: Object.assign({}, events[text][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n } // Change the paragraph to setext heading text.\n\n events[text][1].type = 'setextHeadingText' // If we have definitions in the content, we\u2019ll keep on having content,\n // but we need move it.\n\n if (definition) {\n events.splice(text, 0, ['enter', heading, context])\n events.splice(definition + 1, 0, ['exit', events[content][1], context])\n events[content][1].end = Object.assign({}, events[definition][1].end)\n } else {\n events[content][1] = heading\n } // Add the heading exit at the end.\n\n events.push(['exit', heading, context])\n return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n const self = this\n let index = self.events.length\n /** @type {NonNullable} */\n\n let marker\n /** @type {boolean} */\n\n let paragraph // Find an opening.\n\n while (index--) {\n // Skip enter/exit of line ending, line prefix, and content.\n // We can now either have a definition or a paragraph.\n if (\n self.events[index][1].type !== 'lineEnding' &&\n self.events[index][1].type !== 'linePrefix' &&\n self.events[index][1].type !== 'content'\n ) {\n paragraph = self.events[index][1].type === 'paragraph'\n break\n }\n }\n\n return start\n /** @type {State} */\n\n function start(code) {\n if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n effects.enter('setextHeadingLine')\n effects.enter('setextHeadingLineSequence')\n marker = code\n return closingSequence(code)\n }\n\n return nok(code)\n }\n /** @type {State} */\n\n function closingSequence(code) {\n if (code === marker) {\n effects.consume(code)\n return closingSequence\n }\n\n effects.exit('setextHeadingLineSequence')\n return factorySpace(effects, closingSequenceEnd, 'lineSuffix')(code)\n }\n /** @type {State} */\n\n function closingSequenceEnd(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('setextHeadingLine')\n return ok(code)\n }\n\n return nok(code)\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {InitialConstruct} */\nexport const flow = {\n tokenize: initializeFlow\n}\n/** @type {Initializer} */\n\nfunction initializeFlow(effects) {\n const self = this\n const initial = effects.attempt(\n // Try to parse a blank line.\n blankLine,\n atBlankEnding, // Try to parse initial flow (essentially, only code).\n effects.attempt(\n this.parser.constructs.flowInitial,\n afterConstruct,\n factorySpace(\n effects,\n effects.attempt(\n this.parser.constructs.flow,\n afterConstruct,\n effects.attempt(content, afterConstruct)\n ),\n 'linePrefix'\n )\n )\n )\n return initial\n /** @type {State} */\n\n function atBlankEnding(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('lineEndingBlank')\n effects.consume(code)\n effects.exit('lineEndingBlank')\n self.currentConstruct = undefined\n return initial\n }\n /** @type {State} */\n\n function afterConstruct(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n self.currentConstruct = undefined\n return initial\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nexport const resolver = {\n resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n/**\n * @param {'string'|'text'} field\n * @returns {InitialConstruct}\n */\n\nfunction initializeFactory(field) {\n return {\n tokenize: initializeText,\n resolveAll: createResolver(\n field === 'text' ? resolveAllLineSuffixes : undefined\n )\n }\n /** @type {Initializer} */\n\n function initializeText(effects) {\n const self = this\n const constructs = this.parser.constructs[field]\n const text = effects.attempt(constructs, start, notText)\n return start\n /** @type {State} */\n\n function start(code) {\n return atBreak(code) ? text(code) : notText(code)\n }\n /** @type {State} */\n\n function notText(code) {\n if (code === null) {\n effects.consume(code)\n return\n }\n\n effects.enter('data')\n effects.consume(code)\n return data\n }\n /** @type {State} */\n\n function data(code) {\n if (atBreak(code)) {\n effects.exit('data')\n return text(code)\n } // Data.\n\n effects.consume(code)\n return data\n }\n /**\n * @param {Code} code\n * @returns {boolean}\n */\n\n function atBreak(code) {\n if (code === null) {\n return true\n }\n\n const list = constructs[code]\n let index = -1\n\n if (list) {\n while (++index < list.length) {\n const item = list[index]\n\n if (!item.previous || item.previous.call(self, self.previous)) {\n return true\n }\n }\n }\n\n return false\n }\n }\n}\n/**\n * @param {Resolver} [extraResolver]\n * @returns {Resolver}\n */\n\nfunction createResolver(extraResolver) {\n return resolveAllText\n /** @type {Resolver} */\n\n function resolveAllText(events, context) {\n let index = -1\n /** @type {number|undefined} */\n\n let enter // A rather boring computation (to merge adjacent `data` events) which\n // improves mm performance by 29%.\n\n while (++index <= events.length) {\n if (enter === undefined) {\n if (events[index] && events[index][1].type === 'data') {\n enter = index\n index++\n }\n } else if (!events[index] || events[index][1].type !== 'data') {\n // Don\u2019t do anything if there is one data token.\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n index = enter + 2\n }\n\n enter = undefined\n }\n }\n\n return extraResolver ? extraResolver(events, context) : events\n }\n}\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can\u2019t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\n\nfunction resolveAllLineSuffixes(events, context) {\n let eventIndex = 0 // Skip first.\n\n while (++eventIndex <= events.length) {\n if (\n (eventIndex === events.length ||\n events[eventIndex][1].type === 'lineEnding') &&\n events[eventIndex - 1][1].type === 'data'\n ) {\n const data = events[eventIndex - 1][1]\n const chunks = context.sliceStream(data)\n let index = chunks.length\n let bufferIndex = -1\n let size = 0\n /** @type {boolean|undefined} */\n\n let tabs\n\n while (index--) {\n const chunk = chunks[index]\n\n if (typeof chunk === 'string') {\n bufferIndex = chunk.length\n\n while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n size++\n bufferIndex--\n }\n\n if (bufferIndex) break\n bufferIndex = -1\n } // Number\n else if (chunk === -2) {\n tabs = true\n size++\n } else if (chunk === -1) {\n // Empty\n } else {\n // Replacement character, exit.\n index++\n break\n }\n }\n\n if (size) {\n const token = {\n type:\n eventIndex === events.length || tabs || size < 2\n ? 'lineSuffix'\n : 'hardBreakTrailing',\n start: {\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size,\n _index: data.start._index + index,\n _bufferIndex: index\n ? bufferIndex\n : data.start._bufferIndex + bufferIndex\n },\n end: Object.assign({}, data.end)\n }\n data.end = Object.assign({}, token.start)\n\n if (data.start.offset === data.end.offset) {\n Object.assign(data, token)\n } else {\n events.splice(\n eventIndex,\n 0,\n ['enter', token, context],\n ['exit', token, context]\n )\n eventIndex += 2\n }\n }\n\n eventIndex++\n }\n }\n\n return events\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n */\n\n/**\n * @typedef Info\n * @property {() => void} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {void}\n */\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn\u2019t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = Object.assign(\n from\n ? Object.assign({}, from)\n : {\n line: 1,\n column: 1,\n offset: 0\n },\n {\n _index: 0,\n _bufferIndex: -1\n }\n )\n /** @type {Record} */\n\n const columnStart = {}\n /** @type {Array} */\n\n const resolveAllConstructs = []\n /** @type {Array} */\n\n let chunks = []\n /** @type {Array} */\n\n let stack = []\n /** @type {boolean|undefined} */\n\n let consumed = true\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n\n const effects = {\n consume,\n enter,\n exit,\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n }\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n\n const context = {\n previous: null,\n code: null,\n containerState: {},\n events: [],\n parser,\n sliceStream,\n sliceSerialize,\n now,\n defineSkip,\n write\n }\n /**\n * The state function.\n *\n * @type {State|void}\n */\n\n let state = initialize.tokenize.call(context, effects)\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n\n let expectedCode\n\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize)\n }\n\n return context\n /** @type {TokenizeContext['write']} */\n\n function write(slice) {\n chunks = push(chunks, slice)\n main() // Exit if we\u2019re not done, resolve might change stuff.\n\n if (chunks[chunks.length - 1] !== null) {\n return []\n }\n\n addResult(initialize, 0) // Otherwise, resolve, and exit.\n\n context.events = resolveAll(resolveAllConstructs, context.events, context)\n return context.events\n } //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs)\n }\n /** @type {TokenizeContext['sliceStream']} */\n\n function sliceStream(token) {\n return sliceChunks(chunks, token)\n }\n /** @type {TokenizeContext['now']} */\n\n function now() {\n return Object.assign({}, point)\n }\n /** @type {TokenizeContext['defineSkip']} */\n\n function defineSkip(value) {\n columnStart[value.line] = value.column\n accountForPotentialSkip()\n } //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {void}\n */\n\n function main() {\n /** @type {number} */\n let chunkIndex\n\n while (point._index < chunks.length) {\n const chunk = chunks[point._index] // If we\u2019re in a buffer chunk, loop through it.\n\n if (typeof chunk === 'string') {\n chunkIndex = point._index\n\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0\n }\n\n while (\n point._index === chunkIndex &&\n point._bufferIndex < chunk.length\n ) {\n go(chunk.charCodeAt(point._bufferIndex))\n }\n } else {\n go(chunk)\n }\n }\n }\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * @returns {void}\n */\n\n function go(code) {\n consumed = undefined\n expectedCode = code\n state = state(code)\n }\n /** @type {Effects['consume']} */\n\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++\n point.column = 1\n point.offset += code === -3 ? 2 : 1\n accountForPotentialSkip()\n } else if (code !== -1) {\n point.column++\n point.offset++\n } // Not in a string chunk.\n\n if (point._bufferIndex < 0) {\n point._index++\n } else {\n point._bufferIndex++ // At end of string chunk.\n // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n // strings.\n\n if (point._bufferIndex === chunks[point._index].length) {\n point._bufferIndex = -1\n point._index++\n }\n } // Expose the previous character.\n\n context.previous = code // Mark as consumed.\n\n consumed = true\n }\n /** @type {Effects['enter']} */\n\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {}\n token.type = type\n token.start = now()\n context.events.push(['enter', token, context])\n stack.push(token)\n return token\n }\n /** @type {Effects['exit']} */\n\n function exit(type) {\n const token = stack.pop()\n token.end = now()\n context.events.push(['exit', token, context])\n return token\n }\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from)\n }\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n\n function onsuccessfulcheck(_, info) {\n info.restore()\n }\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * @param {Record} [fields]\n */\n\n function constructFactory(onreturn, fields) {\n return hook\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Construct|Array|ConstructRecord} constructs\n * @param {State} returnState\n * @param {State} [bogusState]\n * @returns {State}\n */\n\n function hook(constructs, returnState, bogusState) {\n /** @type {Array} */\n let listOfConstructs\n /** @type {number} */\n\n let constructIndex\n /** @type {Construct} */\n\n let currentConstruct\n /** @type {Info} */\n\n let info\n return Array.isArray(constructs)\n ? /* c8 ignore next 1 */\n handleListOfConstructs(constructs)\n : 'tokenize' in constructs // @ts-expect-error Looks like a construct.\n ? handleListOfConstructs([constructs])\n : handleMapOfConstructs(constructs)\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * @returns {State}\n */\n\n function handleMapOfConstructs(map) {\n return start\n /** @type {State} */\n\n function start(code) {\n const def = code !== null && map[code]\n const all = code !== null && map.null\n const list = [\n // To do: add more extension tests.\n\n /* c8 ignore next 2 */\n ...(Array.isArray(def) ? def : def ? [def] : []),\n ...(Array.isArray(all) ? all : all ? [all] : [])\n ]\n return handleListOfConstructs(list)(code)\n }\n }\n /**\n * Handle a list of construct.\n *\n * @param {Array} list\n * @returns {State}\n */\n\n function handleListOfConstructs(list) {\n listOfConstructs = list\n constructIndex = 0\n\n if (list.length === 0) {\n return bogusState\n }\n\n return handleConstruct(list[constructIndex])\n }\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * @returns {State}\n */\n\n function handleConstruct(construct) {\n return start\n /** @type {State} */\n\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn\u2019t work because `inspect` in document does a check\n // w/o a bogus, which doesn\u2019t make sense. But it does seem to help perf\n // by not storing.\n info = store()\n currentConstruct = construct\n\n if (!construct.partial) {\n context.currentConstruct = construct\n }\n\n if (\n construct.name &&\n context.parser.constructs.disable.null.includes(construct.name)\n ) {\n return nok(code)\n }\n\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a \u201Clive binding\u201D, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context,\n effects,\n ok,\n nok\n )(code)\n }\n }\n /** @type {State} */\n\n function ok(code) {\n consumed = true\n onreturn(currentConstruct, info)\n return returnState\n }\n /** @type {State} */\n\n function nok(code) {\n consumed = true\n info.restore()\n\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex])\n }\n\n return bogusState\n }\n }\n }\n /**\n * @param {Construct} construct\n * @param {number} from\n * @returns {void}\n */\n\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct)\n }\n\n if (construct.resolve) {\n splice(\n context.events,\n from,\n context.events.length - from,\n construct.resolve(context.events.slice(from), context)\n )\n }\n\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context)\n }\n }\n /**\n * Store state.\n *\n * @returns {Info}\n */\n\n function store() {\n const startPoint = now()\n const startPrevious = context.previous\n const startCurrentConstruct = context.currentConstruct\n const startEventsIndex = context.events.length\n const startStack = Array.from(stack)\n return {\n restore,\n from: startEventsIndex\n }\n /**\n * Restore state.\n *\n * @returns {void}\n */\n\n function restore() {\n point = startPoint\n context.previous = startPrevious\n context.currentConstruct = startCurrentConstruct\n context.events.length = startEventsIndex\n stack = startStack\n accountForPotentialSkip()\n }\n }\n /**\n * Move the current point a bit forward in the line when it\u2019s on a column\n * skip.\n *\n * @returns {void}\n */\n\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line]\n point.offset += columnStart[point.line] - 1\n }\n }\n}\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array} chunks\n * @param {Pick} token\n * @returns {Array}\n */\n\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index\n const startBufferIndex = token.start._bufferIndex\n const endIndex = token.end._index\n const endBufferIndex = token.end._bufferIndex\n /** @type {Array} */\n\n let view\n\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n } else {\n view = chunks.slice(startIndex, endIndex)\n\n if (startBufferIndex > -1) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view[0] = view[0].slice(startBufferIndex)\n }\n\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex))\n }\n }\n\n return view\n}\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array} chunks\n * @param {boolean} [expandTabs=false]\n * @returns {string}\n */\n\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1\n /** @type {Array} */\n\n const result = []\n /** @type {boolean|undefined} */\n\n let atTab\n\n while (++index < chunks.length) {\n const chunk = chunks[index]\n /** @type {string} */\n\n let value\n\n if (typeof chunk === 'string') {\n value = chunk\n } else\n switch (chunk) {\n case -5: {\n value = '\\r'\n break\n }\n\n case -4: {\n value = '\\n'\n break\n }\n\n case -3: {\n value = '\\r' + '\\n'\n break\n }\n\n case -2: {\n value = expandTabs ? ' ' : '\\t'\n break\n }\n\n case -1: {\n if (!expandTabs && atTab) continue\n value = ' '\n break\n }\n\n default: {\n // Currently only replacement character.\n value = String.fromCharCode(chunk)\n }\n }\n\n atTab = chunk === -2\n result.push(value)\n }\n\n return result.join('')\n}\n", "/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\nimport {\n attention,\n autolink,\n blockQuote,\n characterEscape,\n characterReference,\n codeFenced,\n codeIndented,\n codeText,\n definition,\n hardBreakEscape,\n headingAtx,\n htmlFlow,\n htmlText,\n labelEnd,\n labelStartImage,\n labelStartLink,\n lineEnding,\n list,\n setextUnderline,\n thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n/** @type {Extension['document']} */\n\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n}\n/** @type {Extension['contentInitial']} */\n\nexport const contentInitial = {\n [91]: definition\n}\n/** @type {Extension['flowInitial']} */\n\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n}\n/** @type {Extension['flow']} */\n\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n}\n/** @type {Extension['string']} */\n\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n}\n/** @type {Extension['text']} */\n\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n}\n/** @type {Extension['insideSpan']} */\n\nexport const insideSpan = {\n null: [attention, resolveText]\n}\n/** @type {Extension['attentionMarkers']} */\n\nexport const attentionMarkers = {\n null: [42, 95]\n}\n/** @type {Extension['disable']} */\n\nexport const disable = {\n null: []\n}\n", "/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Create} Create\n */\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {text, string} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n/**\n * @param {ParseOptions} [options]\n * @returns {ParseContext}\n */\n\nexport function parse(options = {}) {\n /** @type {FullNormalizedExtension} */\n // @ts-expect-error `defaultConstructs` is full, so the result will be too.\n const constructs = combineExtensions(\n // @ts-expect-error Same as above.\n [defaultConstructs].concat(options.extensions || [])\n )\n /** @type {ParseContext} */\n\n const parser = {\n defined: [],\n lazy: {},\n constructs,\n content: create(content),\n document: create(document),\n flow: create(flow),\n string: create(string),\n text: create(text)\n }\n return parser\n /**\n * @param {InitialConstruct} initial\n */\n\n function create(initial) {\n return creator\n /** @type {Create} */\n\n function creator(from) {\n return createTokenizer(parser, initial, from)\n }\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding} [encoding]\n * @param {boolean} [end=false]\n * @returns {Array}\n */\nconst search = /[\\0\\t\\n\\r]/g\n/**\n * @returns {Preprocessor}\n */\n\nexport function preprocess() {\n let column = 1\n let buffer = ''\n /** @type {boolean|undefined} */\n\n let start = true\n /** @type {boolean|undefined} */\n\n let atCarriageReturn\n return preprocessor\n /** @type {Preprocessor} */\n\n function preprocessor(value, encoding, end) {\n /** @type {Array} */\n const chunks = []\n /** @type {RegExpMatchArray|null} */\n\n let match\n /** @type {number} */\n\n let next\n /** @type {number} */\n\n let startPosition\n /** @type {number} */\n\n let endPosition\n /** @type {Code} */\n\n let code // @ts-expect-error `Buffer` does allow an encoding.\n\n value = buffer + value.toString(encoding)\n startPosition = 0\n buffer = ''\n\n if (start) {\n if (value.charCodeAt(0) === 65279) {\n startPosition++\n }\n\n start = undefined\n }\n\n while (startPosition < value.length) {\n search.lastIndex = startPosition\n match = search.exec(value)\n endPosition =\n match && match.index !== undefined ? match.index : value.length\n code = value.charCodeAt(endPosition)\n\n if (!match) {\n buffer = value.slice(startPosition)\n break\n }\n\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3)\n atCarriageReturn = undefined\n } else {\n if (atCarriageReturn) {\n chunks.push(-5)\n atCarriageReturn = undefined\n }\n\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition))\n column += endPosition - startPosition\n }\n\n switch (code) {\n case 0: {\n chunks.push(65533)\n column++\n break\n }\n\n case 9: {\n next = Math.ceil(column / 4) * 4\n chunks.push(-2)\n\n while (column++ < next) chunks.push(-1)\n\n break\n }\n\n case 10: {\n chunks.push(-4)\n column = 1\n break\n }\n\n default: {\n atCarriageReturn = true\n column = 1\n }\n }\n }\n\n startPosition = endPosition + 1\n }\n\n if (end) {\n if (atCarriageReturn) chunks.push(-5)\n if (buffer) chunks.push(buffer)\n chunks.push(null)\n }\n\n return chunks\n }\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n */\nimport {subtokenize} from 'micromark-util-subtokenize'\n/**\n * @param {Array} events\n * @returns {Array}\n */\n\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n\n return events\n}\n", "/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base)\n\n if (\n // C0 except for HT, LF, FF, CR, space\n code < 9 ||\n code === 11 ||\n (code > 13 && code < 32) || // Control character (DEL) of the basic block and C1 controls.\n (code > 126 && code < 160) || // Lone high surrogates and low surrogates.\n (code > 55295 && code < 57344) || // Noncharacters.\n (code > 64975 && code < 65008) ||\n (code & 65535) === 65535 ||\n (code & 65535) === 65534 || // Out of range\n code > 1114111\n ) {\n return '\\uFFFD'\n }\n\n return String.fromCharCode(code)\n}\n", "import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n/**\n * Utility to decode markdown strings (which occur in places such as fenced\n * code info strings, destinations, labels, and titles).\n * The \u201Cstring\u201D content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * @returns {string}\n */\n\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode)\n}\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\n\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1\n } // Reference.\n\n const head = $2.charCodeAt(0)\n\n if (head === 35) {\n const head = $2.charCodeAt(1)\n const hex = head === 120 || head === 88\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n }\n\n return decodeNamedCharacterReference($2) || $0\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n", "/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').HTML} HTML\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Root | Content} Node\n * @typedef {Extract} Parent\n *\n * @typedef {Omit & {type: 'fragment', children: Array}} Fragment\n */\n\n/**\n * @callback Transform\n * Extra transform, to change the AST afterwards.\n * @param {Root} tree\n * Tree to transform.\n * @returns {Root | undefined | null | void}\n * New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n * Handle a token.\n * @param {CompileContext} this\n * Context.\n * @param {Token} token\n * Current token.\n * @returns {void}\n * Nothing.\n *\n * @typedef {Record} Handles\n * Token types mapping to handles\n *\n * @callback OnEnterError\n * Handle the case where the `right` token is open, but it is closed (by the\n * `left` token) or because we reached the end of the document.\n * @param {Omit} this\n * Context.\n * @param {Token | undefined} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {void}\n * Nothing.\n *\n * @callback OnExitError\n * Handle the case where the `right` token is open but it is closed by\n * exiting the `left` token.\n * @param {Omit} this\n * Context.\n * @param {Token} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {void}\n * Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n * Open token on the stack, with an optional error handler for when\n * that token isn\u2019t closed properly.\n */\n\n/**\n * @typedef Config\n * Configuration.\n *\n * We have our defaults, but extensions will add more.\n * @property {Array} canContainEols\n * Token types where line endings are used.\n * @property {Handles} enter\n * Opening handles.\n * @property {Handles} exit\n * Closing handles.\n * @property {Array} transforms\n * Tree transforms.\n *\n * @typedef {Partial} Extension\n * Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n * mdast compiler context.\n * @property {Array} stack\n * Stack of nodes.\n * @property {Array} tokenStack\n * Stack of tokens.\n * @property {(key: Key) => CompileData[Key]} getData\n * Get data from the key/value store.\n * @property {(key: Key, value?: CompileData[Key]) => void} setData\n * Set data into the key/value store.\n * @property {(this: CompileContext) => void} buffer\n * Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n * Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter\n * Enter a token.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit\n * Exit a token.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n * Get the string value of a token.\n * @property {Config} config\n * Configuration.\n *\n * @typedef FromMarkdownOptions\n * Configuration for how to build mdast.\n * @property {Array> | null | undefined} [mdastExtensions]\n * Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n * Configuration.\n */\n\n// To do: micromark: create a registry of tokens?\n// To do: next major: don\u2019t return given `Node` from `enter`.\n// To do: next major: remove setter/getter.\n\nimport {toString} from 'mdast-util-to-string'\nimport {parse} from 'micromark/lib/parse.js'\nimport {preprocess} from 'micromark/lib/preprocess.js'\nimport {postprocess} from 'micromark/lib/postprocess.js'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nimport {decodeString} from 'micromark-util-decode-string'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {stringifyPosition} from 'unist-util-stringify-position'\nconst own = {}.hasOwnProperty\n\n/**\n * @param value\n * Markdown to parse.\n * @param encoding\n * Character encoding for when `value` is `Buffer`.\n * @param options\n * Configuration.\n * @returns\n * mdast tree.\n */\nexport const fromMarkdown =\n /**\n * @type {(\n * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) &\n * ((value: Value, options?: Options | null | undefined) => Root)\n * )}\n */\n\n /**\n * @param {Value} value\n * @param {Encoding | Options | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n */\n function (value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding\n encoding = undefined\n }\n return compiler(options)(\n postprocess(\n // @ts-expect-error: micromark types need to accept `null`.\n parse(options).document().write(preprocess()(value, encoding, true))\n )\n )\n }\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n }\n configure(config, (options || {}).mdastExtensions || [])\n\n /** @type {CompileData} */\n const data = {}\n return compile\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: []\n }\n /** @type {Omit} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n setData,\n getData\n }\n /** @type {Array} */\n const listStack = []\n let index = -1\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (\n events[index][1].type === 'listOrdered' ||\n events[index][1].type === 'listUnordered'\n ) {\n if (events[index][0] === 'enter') {\n listStack.push(index)\n } else {\n const tail = listStack.pop()\n index = prepareList(events, tail, index)\n }\n }\n }\n index = -1\n while (++index < events.length) {\n const handler = config[events[index][0]]\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(\n Object.assign(\n {\n sliceSerialize: events[index][2].sliceSerialize\n },\n context\n ),\n events[index][1]\n )\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1]\n const handler = tail[1] || defaultOnError\n handler.call(context, undefined, tail[0])\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(\n events.length > 0\n ? events[0][1].start\n : {\n line: 1,\n column: 1,\n offset: 0\n }\n ),\n end: point(\n events.length > 0\n ? events[events.length - 2][1].end\n : {\n line: 1,\n column: 1,\n offset: 0\n }\n )\n }\n\n // Call transforms.\n index = -1\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree\n }\n return tree\n }\n\n /**\n * @param {Array} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n function prepareList(events, start, length) {\n let index = start - 1\n let containerBalance = -1\n let listSpread = false\n /** @type {Token | undefined} */\n let listItem\n /** @type {number | undefined} */\n let lineIndex\n /** @type {number | undefined} */\n let firstBlankLineIndex\n /** @type {boolean | undefined} */\n let atMarker\n while (++index <= length) {\n const event = events[index]\n if (\n event[1].type === 'listUnordered' ||\n event[1].type === 'listOrdered' ||\n event[1].type === 'blockQuote'\n ) {\n if (event[0] === 'enter') {\n containerBalance++\n } else {\n containerBalance--\n }\n atMarker = undefined\n } else if (event[1].type === 'lineEndingBlank') {\n if (event[0] === 'enter') {\n if (\n listItem &&\n !atMarker &&\n !containerBalance &&\n !firstBlankLineIndex\n ) {\n firstBlankLineIndex = index\n }\n atMarker = undefined\n }\n } else if (\n event[1].type === 'linePrefix' ||\n event[1].type === 'listItemValue' ||\n event[1].type === 'listItemMarker' ||\n event[1].type === 'listItemPrefix' ||\n event[1].type === 'listItemPrefixWhitespace'\n ) {\n // Empty.\n } else {\n atMarker = undefined\n }\n if (\n (!containerBalance &&\n event[0] === 'enter' &&\n event[1].type === 'listItemPrefix') ||\n (containerBalance === -1 &&\n event[0] === 'exit' &&\n (event[1].type === 'listUnordered' ||\n event[1].type === 'listOrdered'))\n ) {\n if (listItem) {\n let tailIndex = index\n lineIndex = undefined\n while (tailIndex--) {\n const tailEvent = events[tailIndex]\n if (\n tailEvent[1].type === 'lineEnding' ||\n tailEvent[1].type === 'lineEndingBlank'\n ) {\n if (tailEvent[0] === 'exit') continue\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank'\n listSpread = true\n }\n tailEvent[1].type = 'lineEnding'\n lineIndex = tailIndex\n } else if (\n tailEvent[1].type === 'linePrefix' ||\n tailEvent[1].type === 'blockQuotePrefix' ||\n tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n tailEvent[1].type === 'blockQuoteMarker' ||\n tailEvent[1].type === 'listItemIndent'\n ) {\n // Empty\n } else {\n break\n }\n }\n if (\n firstBlankLineIndex &&\n (!lineIndex || firstBlankLineIndex < lineIndex)\n ) {\n // @ts-expect-error Patched.\n listItem._spread = true\n }\n\n // Fix position.\n listItem.end = Object.assign(\n {},\n lineIndex ? events[lineIndex][1].start : event[1].end\n )\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n index++\n length++\n }\n\n // Create a new list item.\n if (event[1].type === 'listItemPrefix') {\n listItem = {\n type: 'listItem',\n // @ts-expect-error Patched\n _spread: false,\n start: Object.assign({}, event[1].start)\n }\n // @ts-expect-error: `listItem` is most definitely defined, TS...\n events.splice(index, 0, ['enter', listItem, event[2]])\n index++\n length++\n firstBlankLineIndex = undefined\n atMarker = true\n }\n }\n }\n\n // @ts-expect-error Patched.\n events[start][1]._spread = listSpread\n return length\n }\n\n /**\n * Set data.\n *\n * @template {keyof CompileData} Key\n * Field type.\n * @param {Key} key\n * Key of field.\n * @param {CompileData[Key]} [value]\n * New value.\n * @returns {void}\n * Nothing.\n */\n function setData(key, value) {\n data[key] = value\n }\n\n /**\n * Get data.\n *\n * @template {keyof CompileData} Key\n * Field type.\n * @param {Key} key\n * Key of field.\n * @returns {CompileData[Key]}\n * Value.\n */\n function getData(key) {\n return data[key]\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Node} create\n * Create a node.\n * @param {Handle} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {void}\n */\n function open(token) {\n enter.call(this, create(token), token)\n if (and) and.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @returns {void}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n })\n }\n\n /**\n * @template {Node} Kind\n * Node type.\n * @this {CompileContext}\n * Context.\n * @param {Kind} node\n * Node to enter.\n * @param {Token} token\n * Corresponding token.\n * @param {OnEnterError | undefined} [errorHandler]\n * Handle the case where this token is open, but it is closed by something else.\n * @returns {Kind}\n * The given node.\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1]\n // @ts-expect-error: Assume `Node` can exist as a child of `parent`.\n parent.children.push(node)\n this.stack.push(node)\n this.tokenStack.push([token, errorHandler])\n // @ts-expect-error: `end` will be patched later.\n node.position = {\n start: point(token.start)\n }\n return node\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {void}\n */\n function close(token) {\n if (and) and.call(this, token)\n exit.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * Context.\n * @param {Token} token\n * Corresponding token.\n * @param {OnExitError | undefined} [onExitError]\n * Handle the case where another token is open.\n * @returns {Node}\n * The closed node.\n */\n function exit(token, onExitError) {\n const node = this.stack.pop()\n const open = this.tokenStack.pop()\n if (!open) {\n throw new Error(\n 'Cannot close `' +\n token.type +\n '` (' +\n stringifyPosition({\n start: token.start,\n end: token.end\n }) +\n '): it\u2019s not open'\n )\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0])\n } else {\n const handler = open[1] || defaultOnError\n handler.call(this, token, open[0])\n }\n }\n node.position.end = point(token.end)\n return node\n }\n\n /**\n * @this {CompileContext}\n * @returns {string}\n */\n function resume() {\n return toString(this.stack.pop())\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n setData('expectingFirstListItemValue', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (getData('expectingFirstListItemValue')) {\n const ancestor = this.stack[this.stack.length - 2]\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10)\n setData('expectingFirstListItemValue')\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.lang = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.meta = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (getData('flowCodeInside')) return\n this.buffer()\n setData('flowCodeInside', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n setData('flowCodeInside')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1]\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length\n node.depth = depth\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n setData('setextHeadingSlurpLineEnding', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1]\n node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n setData('setextHeadingSlurpLineEnding')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1]\n let tail = node.children[node.children.length - 1]\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text()\n // @ts-expect-error: we\u2019ll add `end` later.\n tail.position = {\n start: point(token.start)\n }\n // @ts-expect-error: Assume `parent` accepts `text`.\n node.children.push(tail)\n }\n this.stack.push(tail)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop()\n tail.value += this.sliceSerialize(token)\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1]\n // If we\u2019re at a hard break, include the line ending in there.\n if (getData('atHardBreak')) {\n const tail = context.children[context.children.length - 1]\n tail.position.end = point(token.end)\n setData('atHardBreak')\n return\n }\n if (\n !getData('setextHeadingSlurpLineEnding') &&\n config.canContainEols.includes(context.type)\n ) {\n onenterdata.call(this, token)\n onexitdata.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n setData('atHardBreak', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1]\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (getData('inReference')) {\n /** @type {ReferenceType} */\n const referenceType = getData('referenceType') || 'shortcut'\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n setData('referenceType')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1]\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (getData('inReference')) {\n /** @type {ReferenceType} */\n const referenceType = getData('referenceType') || 'shortcut'\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n setData('referenceType')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token)\n const ancestor = this.stack[this.stack.length - 2]\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string)\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1]\n const value = this.resume()\n const node = this.stack[this.stack.length - 1]\n // Assume a reference.\n setData('inReference', true)\n if (node.type === 'link') {\n /** @type {Array} */\n // @ts-expect-error: Assume static phrasing content.\n const children = fragment.children\n node.children = children\n } else {\n node.alt = value\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n setData('inReference')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n setData('referenceType', 'collapsed')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n setData('referenceType', 'full')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n setData('characterReferenceType', token.type)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token)\n const type = getData('characterReferenceType')\n /** @type {string} */\n let value\n if (type) {\n value = decodeNumericCharacterReference(\n data,\n type === 'characterReferenceMarkerNumeric' ? 10 : 16\n )\n setData('characterReferenceType')\n } else {\n const result = decodeNamedCharacterReference(data)\n value = result\n }\n const tail = this.stack.pop()\n tail.value += value\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n node.url = this.sliceSerialize(token)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n node.url = 'mailto:' + this.sliceSerialize(token)\n }\n\n //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: []\n }\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: ''\n }\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: ''\n }\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n }\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: []\n }\n }\n\n /** @returns {Heading} */\n function heading() {\n // @ts-expect-error `depth` will be set later.\n return {\n type: 'heading',\n depth: undefined,\n children: []\n }\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break'\n }\n }\n\n /** @returns {HTML} */\n function html() {\n return {\n type: 'html',\n value: ''\n }\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null\n }\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: []\n }\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n // @ts-expect-error Patched.\n spread: token._spread,\n children: []\n }\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n // @ts-expect-error Patched.\n spread: token._spread,\n checked: null,\n children: []\n }\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: []\n }\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: []\n }\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: ''\n }\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak'\n }\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Array>} extensions\n * @returns {void}\n */\nfunction configure(combined, extensions) {\n let index = -1\n while (++index < extensions.length) {\n const value = extensions[index]\n if (Array.isArray(value)) {\n configure(combined, value)\n } else {\n extension(combined, value)\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {void}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key\n for (key in extension) {\n if (own.call(extension, key)) {\n if (key === 'canContainEols') {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n } else if (key === 'transforms') {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n } else if (key === 'enter' || key === 'exit') {\n const right = extension[key]\n if (right) {\n Object.assign(combined[key], right)\n }\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error(\n 'Cannot close `' +\n left.type +\n '` (' +\n stringifyPosition({\n start: left.start,\n end: left.end\n }) +\n '): a different token (`' +\n right.type +\n '`, ' +\n stringifyPosition({\n start: right.start,\n end: right.end\n }) +\n ') is open'\n )\n } else {\n throw new Error(\n 'Cannot close document, a token (`' +\n right.type +\n '`, ' +\n stringifyPosition({\n start: right.start,\n end: right.end\n }) +\n ') is still open'\n )\n }\n}\n", "import { l as log, M as decodeEntities } from \"./mermaid-6dc72991.js\";\nimport { fromMarkdown } from \"mdast-util-from-markdown\";\nimport { dedent } from \"ts-dedent\";\nfunction preprocessMarkdown(markdown) {\n const withoutMultipleNewlines = markdown.replace(/\\n{2,}/g, \"\\n\");\n const withoutExtraSpaces = dedent(withoutMultipleNewlines);\n return withoutExtraSpaces;\n}\nfunction markdownToLines(markdown) {\n const preprocessedMarkdown = preprocessMarkdown(markdown);\n const { children } = fromMarkdown(preprocessedMarkdown);\n const lines = [[]];\n let currentLine = 0;\n function processNode(node, parentType = \"normal\") {\n if (node.type === \"text\") {\n const textLines = node.value.split(\"\\n\");\n textLines.forEach((textLine, index) => {\n if (index !== 0) {\n currentLine++;\n lines.push([]);\n }\n textLine.split(\" \").forEach((word) => {\n if (word) {\n lines[currentLine].push({ content: word, type: parentType });\n }\n });\n });\n } else if (node.type === \"strong\" || node.type === \"emphasis\") {\n node.children.forEach((contentNode) => {\n processNode(contentNode, node.type);\n });\n }\n }\n children.forEach((treeNode) => {\n if (treeNode.type === \"paragraph\") {\n treeNode.children.forEach((contentNode) => {\n processNode(contentNode);\n });\n }\n });\n return lines;\n}\nfunction markdownToHTML(markdown) {\n const { children } = fromMarkdown(markdown);\n function output(node) {\n if (node.type === \"text\") {\n return node.value.replace(/\\n/g, \"
\");\n } else if (node.type === \"strong\") {\n return `${node.children.map(output).join(\"\")}`;\n } else if (node.type === \"emphasis\") {\n return `${node.children.map(output).join(\"\")}`;\n } else if (node.type === \"paragraph\") {\n return `

${node.children.map(output).join(\"\")}

`;\n }\n return `Unsupported markdown: ${node.type}`;\n }\n return children.map(output).join(\"\");\n}\nfunction splitTextToChars(text) {\n if (Intl.Segmenter) {\n return [...new Intl.Segmenter().segment(text)].map((s) => s.segment);\n }\n return [...text];\n}\nfunction splitWordToFitWidth(checkFit, word) {\n const characters = splitTextToChars(word.content);\n return splitWordToFitWidthRecursion(checkFit, [], characters, word.type);\n}\nfunction splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) {\n if (remainingChars.length === 0) {\n return [\n { content: usedChars.join(\"\"), type },\n { content: \"\", type }\n ];\n }\n const [nextChar, ...rest] = remainingChars;\n const newWord = [...usedChars, nextChar];\n if (checkFit([{ content: newWord.join(\"\"), type }])) {\n return splitWordToFitWidthRecursion(checkFit, newWord, rest, type);\n }\n if (usedChars.length === 0 && nextChar) {\n usedChars.push(nextChar);\n remainingChars.shift();\n }\n return [\n { content: usedChars.join(\"\"), type },\n { content: remainingChars.join(\"\"), type }\n ];\n}\nfunction splitLineToFitWidth(line, checkFit) {\n if (line.some(({ content }) => content.includes(\"\\n\"))) {\n throw new Error(\"splitLineToFitWidth does not support newlines in the line\");\n }\n return splitLineToFitWidthRecursion(line, checkFit);\n}\nfunction splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) {\n if (words.length === 0) {\n if (newLine.length > 0) {\n lines.push(newLine);\n }\n return lines.length > 0 ? lines : [];\n }\n let joiner = \"\";\n if (words[0].content === \" \") {\n joiner = \" \";\n words.shift();\n }\n const nextWord = words.shift() ?? { content: \" \", type: \"normal\" };\n const lineWithNextWord = [...newLine];\n if (joiner !== \"\") {\n lineWithNextWord.push({ content: joiner, type: \"normal\" });\n }\n lineWithNextWord.push(nextWord);\n if (checkFit(lineWithNextWord)) {\n return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord);\n }\n if (newLine.length > 0) {\n lines.push(newLine);\n words.unshift(nextWord);\n } else if (nextWord.content) {\n const [line, rest] = splitWordToFitWidth(checkFit, nextWord);\n lines.push([line]);\n if (rest.content) {\n words.unshift(rest);\n }\n }\n return splitLineToFitWidthRecursion(words, checkFit, lines);\n}\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\nfunction addHtmlSpan(element, node, width, classes, addBackground = false) {\n const fo = element.append(\"foreignObject\");\n const div = fo.append(\"xhtml:div\");\n const label = node.label;\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n div.html(\n `\n \" + label + \"\"\n );\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"table-cell\");\n div.style(\"white-space\", \"nowrap\");\n div.style(\"max-width\", width + \"px\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n if (addBackground) {\n div.attr(\"class\", \"labelBkg\");\n }\n let bbox = div.node().getBoundingClientRect();\n if (bbox.width === width) {\n div.style(\"display\", \"table\");\n div.style(\"white-space\", \"break-spaces\");\n div.style(\"width\", width + \"px\");\n bbox = div.node().getBoundingClientRect();\n }\n fo.style(\"width\", bbox.width);\n fo.style(\"height\", bbox.height);\n return fo.node();\n}\nfunction createTspan(textElement, lineIndex, lineHeight) {\n return textElement.append(\"tspan\").attr(\"class\", \"text-outer-tspan\").attr(\"x\", 0).attr(\"y\", lineIndex * lineHeight - 0.1 + \"em\").attr(\"dy\", lineHeight + \"em\");\n}\nfunction computeWidthOfText(parentNode, lineHeight, line) {\n const testElement = parentNode.append(\"text\");\n const testSpan = createTspan(testElement, 1, lineHeight);\n updateTextContentAndStyles(testSpan, line);\n const textLength = testSpan.node().getComputedTextLength();\n testElement.remove();\n return textLength;\n}\nfunction computeDimensionOfText(parentNode, lineHeight, text) {\n var _a;\n const testElement = parentNode.append(\"text\");\n const testSpan = createTspan(testElement, 1, lineHeight);\n updateTextContentAndStyles(testSpan, [{ content: text, type: \"normal\" }]);\n const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect();\n if (textDimension) {\n testElement.remove();\n }\n return textDimension;\n}\nfunction createFormattedText(width, g, structuredText, addBackground = false) {\n const lineHeight = 1.1;\n const labelGroup = g.append(\"g\");\n const bkg = labelGroup.insert(\"rect\").attr(\"class\", \"background\");\n const textElement = labelGroup.append(\"text\").attr(\"y\", \"-10.1\");\n let lineIndex = 0;\n for (const line of structuredText) {\n const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width;\n const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth);\n for (const preparedLine of linesUnderWidth) {\n const tspan = createTspan(textElement, lineIndex, lineHeight);\n updateTextContentAndStyles(tspan, preparedLine);\n lineIndex++;\n }\n }\n if (addBackground) {\n const bbox = textElement.node().getBBox();\n const padding = 2;\n bkg.attr(\"x\", -padding).attr(\"y\", -padding).attr(\"width\", bbox.width + 2 * padding).attr(\"height\", bbox.height + 2 * padding);\n return labelGroup.node();\n } else {\n return textElement.node();\n }\n}\nfunction updateTextContentAndStyles(tspan, wrappedLine) {\n tspan.text(\"\");\n wrappedLine.forEach((word, index) => {\n const innerTspan = tspan.append(\"tspan\").attr(\"font-style\", word.type === \"emphasis\" ? \"italic\" : \"normal\").attr(\"class\", \"text-inner-tspan\").attr(\"font-weight\", word.type === \"strong\" ? \"bold\" : \"normal\");\n if (index === 0) {\n innerTspan.text(word.content);\n } else {\n innerTspan.text(\" \" + word.content);\n }\n });\n}\nconst createText = (el, text = \"\", {\n style = \"\",\n isTitle = false,\n classes = \"\",\n useHtmlLabels = true,\n isNode = true,\n width = 200,\n addSvgBackground = false\n} = {}) => {\n log.info(\"createText\", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground);\n if (useHtmlLabels) {\n const htmlText = markdownToHTML(text);\n const node = {\n isNode,\n label: decodeEntities(htmlText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n // cspell: disable-line\n (s) => ``\n ),\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground);\n return vertexNode;\n } else {\n const structuredText = markdownToLines(text);\n const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground);\n return svgLabel;\n }\n};\nexport {\n createText as a,\n computeDimensionOfText as c\n};\n"], + "mappings": "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", + "names": ["emptyOptions", "toString", "value", "options", "settings", "includeImageAlt", "includeHtml", "one", "node", "all", "values", "result", "index", "splice", "list", "start", "remove", "items", "end", "chunkStart", "parameters", "push", "hasOwnProperty", "combineExtensions", "extensions", "all", "index", "syntaxExtension", "extension", "hook", "left", "right", "code", "value", "constructs", "existing", "list", "before", "splice", "unicodePunctuationRegex", "asciiAlpha", "regexCheck", "asciiDigit", "asciiHexDigit", "asciiAlphanumeric", "asciiPunctuation", "asciiAtext", "asciiControl", "code", "markdownLineEndingOrSpace", "markdownLineEnding", "markdownSpace", "unicodeWhitespace", "unicodePunctuation", "unicodePunctuationRegex", "regex", "check", "factorySpace", "effects", "ok", "type", "max", "limit", "size", "start", "code", "markdownSpace", "prefix", "content", "initializeContent", "effects", "contentStart", "afterContentStartConstruct", "paragraphInitial", "previous", "code", "factorySpace", "lineStart", "token", "data", "markdownLineEnding", "document", "initializeDocument", "containerConstruct", "tokenizeContainer", "effects", "self", "stack", "continued", "childFlow", "childToken", "lineStartOffset", "start", "code", "item", "documentContinue", "checkNewContainers", "closeFlow", "indexBeforeExits", "indexBeforeFlow", "point", "exitContainers", "index", "splice", "documentContinued", "flowStart", "thereIsANewContainer", "thereIsNoNewContainer", "containerContinue", "flowContinue", "writeToChild", "markdownLineEnding", "token", "eof", "stream", "seen", "size", "entry", "ok", "nok", "factorySpace", "classifyCharacter", "code", "markdownLineEndingOrSpace", "unicodeWhitespace", "unicodePunctuation", "resolveAll", "constructs", "events", "context", "called", "index", "resolve", "attention", "tokenizeAttention", "resolveAllAttention", "events", "context", "index", "open", "group", "text", "openingSequence", "closingSequence", "use", "nextEvents", "offset", "start", "end", "movePoint", "push", "resolveAll", "splice", "effects", "ok", "attentionMarkers", "previous", "before", "classifyCharacter", "marker", "code", "sequence", "token", "after", "close", "point", "autolink", "tokenizeAutolink", "effects", "ok", "nok", "size", "start", "code", "open", "asciiAlpha", "schemeOrEmailAtext", "asciiAtext", "emailAtext", "asciiAlphanumeric", "schemeInsideOrEmailAtext", "urlInside", "end", "asciiControl", "emailAtSignOrDot", "emailLabel", "emailValue", "blankLine", "tokenizeBlankLine", "effects", "ok", "nok", "factorySpace", "afterWhitespace", "code", "markdownLineEnding", "blockQuote", "tokenizeBlockQuoteStart", "tokenizeBlockQuoteContinuation", "exit", "effects", "ok", "nok", "self", "start", "code", "state", "after", "markdownSpace", "factorySpace", "characterEscape", "tokenizeCharacterEscape", "effects", "ok", "nok", "start", "code", "open", "asciiPunctuation", "element", "decodeNamedCharacterReference", "value", "characterReference", "char", "characterReference", "tokenizeCharacterReference", "effects", "ok", "nok", "self", "size", "max", "test", "start", "code", "open", "numeric", "asciiAlphanumeric", "value", "asciiHexDigit", "asciiDigit", "token", "decodeNamedCharacterReference", "codeFenced", "tokenizeCodeFenced", "effects", "ok", "nok", "self", "closingFenceConstruct", "tokenizeClosingFence", "nonLazyLine", "tokenizeNonLazyLine", "tail", "initialPrefix", "sizeOpen", "marker", "start", "code", "sequenceOpen", "factorySpace", "infoOpen", "markdownLineEnding", "openAfter", "info", "markdownLineEndingOrSpace", "infoAfter", "meta", "contentStart", "after", "contentContinue", "lineStart", "size", "closingSequenceStart", "closingSequence", "closingSequenceEnd", "codeIndented", "tokenizeCodeIndented", "indentedContent", "tokenizeIndentedContent", "effects", "ok", "nok", "self", "start", "code", "factorySpace", "afterStartPrefix", "tail", "afterPrefix", "after", "markdownLineEnding", "content", "codeText", "tokenizeCodeText", "resolveCodeText", "previous", "events", "tailExitIndex", "headEnterIndex", "index", "enter", "code", "effects", "ok", "nok", "self", "sizeOpen", "size", "token", "start", "openingSequence", "gap", "closingSequence", "markdownLineEnding", "data", "subtokenize", "events", "jumps", "index", "event", "lineIndex", "otherIndex", "otherEvent", "parameters", "subevents", "more", "subcontent", "splice", "eventIndex", "token", "context", "startPosition", "startPositions", "tokenizer", "childEvents", "gaps", "stream", "previous", "current", "adjust", "start", "breaks", "slice", "content", "tokenizeContent", "resolveContent", "continuationConstruct", "tokenizeContinuation", "events", "subtokenize", "effects", "ok", "previous", "start", "code", "data", "contentEnd", "markdownLineEnding", "contentContinue", "nok", "self", "startLookahead", "factorySpace", "prefixed", "tail", "factoryDestination", "effects", "ok", "nok", "type", "literalType", "literalMarkerType", "rawType", "stringType", "max", "limit", "balance", "start", "code", "destinationEnclosedBefore", "asciiControl", "destinationRaw", "destinationEnclosed", "markdownLineEnding", "destinationEnclosedEscape", "markdownLineEndingOrSpace", "destinationRawEscape", "factoryLabel", "effects", "ok", "nok", "type", "markerType", "stringType", "self", "size", "data", "start", "code", "atBreak", "markdownLineEnding", "label", "markdownSpace", "labelEscape", "factoryTitle", "effects", "ok", "nok", "type", "markerType", "stringType", "marker", "start", "code", "atFirstTitleBreak", "atTitleBreak", "markdownLineEnding", "factorySpace", "title", "titleEscape", "factoryWhitespace", "effects", "ok", "seen", "start", "code", "markdownLineEnding", "markdownSpace", "factorySpace", "normalizeIdentifier", "value", "definition", "tokenizeDefinition", "titleConstruct", "tokenizeTitle", "effects", "ok", "nok", "self", "identifier", "start", "code", "factoryLabel", "labelAfter", "normalizeIdentifier", "factoryWhitespace", "factoryDestination", "factorySpace", "after", "markdownLineEnding", "markdownLineEndingOrSpace", "before", "factoryTitle", "hardBreakEscape", "tokenizeHardBreakEscape", "effects", "ok", "nok", "start", "code", "open", "markdownLineEnding", "headingAtx", "tokenizeHeadingAtx", "resolveHeadingAtx", "events", "context", "contentEnd", "contentStart", "content", "text", "splice", "effects", "ok", "nok", "self", "size", "start", "code", "fenceOpenInside", "markdownLineEndingOrSpace", "headingBreak", "sequence", "markdownLineEnding", "markdownSpace", "factorySpace", "data", "htmlBlockNames", "htmlRawNames", "htmlFlow", "tokenizeHtmlFlow", "resolveToHtmlFlow", "nextBlankConstruct", "tokenizeNextBlank", "events", "index", "effects", "ok", "nok", "self", "kind", "startTag", "buffer", "marker", "start", "code", "open", "declarationStart", "tagCloseStart", "continuationDeclarationInside", "asciiAlpha", "tagName", "commentOpenInside", "cdataOpenInside", "continuation", "markdownLineEndingOrSpace", "htmlRawNames", "htmlBlockNames", "basicSelfClosing", "completeAttributeNameBefore", "completeClosingTagAfter", "asciiAlphanumeric", "markdownSpace", "completeEnd", "completeAttributeName", "completeAttributeNameAfter", "completeAttributeValueBefore", "completeAttributeValueQuoted", "completeAttributeValueUnquoted", "markdownLineEnding", "completeAttributeValueQuotedAfter", "completeAfter", "continuationCommentInside", "continuationRawTagOpen", "continuationClose", "continuationCharacterDataInside", "continuationAtLineEnding", "htmlContinueStart", "done", "htmlLineEnd", "lineStart", "continuationRawEndTag", "blankLine", "htmlText", "tokenizeHtmlText", "effects", "ok", "nok", "self", "marker", "buffer", "index", "returnState", "start", "code", "open", "declarationOpen", "tagCloseStart", "instruction", "asciiAlpha", "tagOpen", "commentOpen", "cdataOpen", "declaration", "commentStart", "commentStartDash", "comment", "commentClose", "markdownLineEnding", "atLineEnding", "end", "cdata", "cdataClose", "cdataEnd", "instructionClose", "tagClose", "asciiAlphanumeric", "tagCloseBetween", "markdownSpace", "markdownLineEndingOrSpace", "tagOpenBetween", "tagOpenAttributeName", "tagOpenAttributeNameAfter", "tagOpenAttributeValueBefore", "tagOpenAttributeValueQuoted", "tagOpenAttributeValueUnquoted", "tagOpenAttributeValueQuotedAfter", "factorySpace", "afterPrefix", "labelEnd", "tokenizeLabelEnd", "resolveToLabelEnd", "resolveAllLabelEnd", "resourceConstruct", "tokenizeResource", "fullReferenceConstruct", "tokenizeFullReference", "collapsedReferenceConstruct", "tokenizeCollapsedReference", "events", "index", "token", "context", "offset", "open", "close", "media", "group", "label", "text", "push", "resolveAll", "splice", "effects", "ok", "nok", "self", "labelStart", "defined", "start", "code", "balanced", "normalizeIdentifier", "afterLabelEnd", "factoryWhitespace", "end", "factoryDestination", "destinationAfter", "markdownLineEndingOrSpace", "between", "factoryTitle", "factoryLabel", "afterLabel", "labelStartImage", "tokenizeLabelStartImage", "labelEnd", "effects", "ok", "nok", "self", "start", "code", "open", "after", "labelStartLink", "tokenizeLabelStartLink", "labelEnd", "effects", "ok", "nok", "self", "start", "code", "after", "lineEnding", "tokenizeLineEnding", "effects", "ok", "start", "code", "factorySpace", "thematicBreak", "tokenizeThematicBreak", "effects", "ok", "nok", "size", "marker", "start", "code", "atBreak", "sequence", "markdownSpace", "factorySpace", "markdownLineEnding", "list", "tokenizeListStart", "tokenizeListContinuation", "tokenizeListEnd", "listItemPrefixWhitespaceConstruct", "tokenizeListItemPrefixWhitespace", "indentConstruct", "tokenizeIndent", "effects", "ok", "nok", "self", "tail", "initialSize", "size", "start", "code", "kind", "asciiDigit", "thematicBreak", "atMarker", "inside", "blankLine", "onBlank", "endOfPrefix", "otherPrefix", "markdownSpace", "notBlank", "factorySpace", "notInCurrentItem", "afterPrefix", "setextUnderline", "tokenizeSetextUnderline", "resolveToSetextUnderline", "events", "context", "index", "content", "text", "definition", "heading", "effects", "ok", "nok", "self", "marker", "paragraph", "start", "code", "closingSequence", "factorySpace", "closingSequenceEnd", "markdownLineEnding", "flow", "initializeFlow", "effects", "self", "initial", "blankLine", "atBlankEnding", "afterConstruct", "factorySpace", "content", "code", "resolver", "createResolver", "string", "initializeFactory", "text", "field", "initializeText", "resolveAllLineSuffixes", "effects", "self", "constructs", "start", "notText", "code", "atBreak", "data", "list", "index", "item", "extraResolver", "resolveAllText", "events", "context", "enter", "eventIndex", "chunks", "bufferIndex", "size", "tabs", "chunk", "token", "createTokenizer", "parser", "initialize", "from", "point", "columnStart", "resolveAllConstructs", "chunks", "stack", "consumed", "effects", "consume", "enter", "exit", "constructFactory", "onsuccessfulconstruct", "onsuccessfulcheck", "context", "sliceStream", "sliceSerialize", "now", "defineSkip", "write", "state", "expectedCode", "slice", "push", "main", "addResult", "resolveAll", "token", "expandTabs", "serializeChunks", "sliceChunks", "value", "accountForPotentialSkip", "chunkIndex", "chunk", "go", "code", "markdownLineEnding", "type", "fields", "construct", "info", "_", "onreturn", "hook", "constructs", "returnState", "bogusState", "listOfConstructs", "constructIndex", "currentConstruct", "handleListOfConstructs", "handleMapOfConstructs", "map", "start", "def", "all", "list", "handleConstruct", "store", "nok", "ok", "splice", "startPoint", "startPrevious", "startCurrentConstruct", "startEventsIndex", "startStack", "restore", "startIndex", "startBufferIndex", "endIndex", "endBufferIndex", "view", "index", "result", "atTab", "constructs_exports", "__export", "attentionMarkers", "contentInitial", "disable", "document", "flow", "flowInitial", "insideSpan", "string", "text", "document", "list", "blockQuote", "contentInitial", "definition", "flowInitial", "codeIndented", "flow", "headingAtx", "thematicBreak", "setextUnderline", "htmlFlow", "codeFenced", "string", "characterReference", "characterEscape", "text", "lineEnding", "labelStartImage", "attention", "autolink", "htmlText", "labelStartLink", "hardBreakEscape", "labelEnd", "codeText", "insideSpan", "resolver", "attentionMarkers", "disable", "parse", "options", "constructs", "combineExtensions", "constructs_exports", "parser", "create", "content", "document", "flow", "string", "text", "initial", "creator", "from", "createTokenizer", "search", "preprocess", "column", "buffer", "start", "atCarriageReturn", "preprocessor", "value", "encoding", "end", "chunks", "match", "next", "startPosition", "endPosition", "code", "postprocess", "events", "subtokenize", "decodeNumericCharacterReference", "value", "base", "code", "characterEscapeOrReference", "decodeString", "value", "decode", "$0", "$1", "$2", "head", "hex", "decodeNumericCharacterReference", "decodeNamedCharacterReference", "stringifyPosition", "value", "position", "point", "index", "pos", "own", "fromMarkdown", "value", "encoding", "options", "compiler", "postprocess", "parse", "preprocess", "config", "opener", "link", "onenterdata", "heading", "blockQuote", "codeFlow", "buffer", "codeText", "definition", "emphasis", "hardBreak", "html", "image", "listItem", "onenterlistitemvalue", "list", "onenterlistordered", "paragraph", "onenterreference", "strong", "thematicBreak", "closer", "onexitatxheadingsequence", "onexitautolinkemail", "onexitautolinkprotocol", "onexitdata", "onexitcharacterreferencemarker", "onexitcharacterreferencevalue", "onexitcodefenced", "onexitcodefencedfence", "onexitcodefencedfenceinfo", "onexitcodefencedfencemeta", "onexitcodeindented", "onexitcodetext", "onexitdefinitiondestinationstring", "onexitdefinitionlabelstring", "onexitdefinitiontitlestring", "onexithardbreak", "onexithtmlflow", "onexithtmltext", "onexitimage", "onexitlabel", "onexitlabeltext", "onexitlineending", "onexitlink", "onexitreferencestring", "onexitresourcedestinationstring", "onexitresourcetitlestring", "onexitresource", "onexitsetextheading", "onexitsetextheadinglinesequence", "onexitsetextheadingtext", "configure", "data", "compile", "events", "tree", "context", "enter", "exit", "resume", "setData", "getData", "listStack", "index", "tail", "prepareList", "handler", "defaultOnError", "point", "start", "length", "containerBalance", "listSpread", "lineIndex", "firstBlankLineIndex", "atMarker", "event", "tailIndex", "tailEvent", "key", "create", "and", "open", "token", "node", "errorHandler", "close", "onExitError", "stringifyPosition", "toString", "ancestor", "label", "normalizeIdentifier", "depth", "text", "referenceType", "string", "decodeString", "fragment", "children", "type", "decodeNumericCharacterReference", "decodeNamedCharacterReference", "d", "combined", "extensions", "extension", "right", "left", "preprocessMarkdown", "markdown", "withoutMultipleNewlines", "dedent", "markdownToLines", "preprocessedMarkdown", "children", "fromMarkdown", "lines", "currentLine", "processNode", "node", "parentType", "textLine", "index", "word", "contentNode", "treeNode", "markdownToHTML", "output", "splitTextToChars", "text", "s", "splitWordToFitWidth", "checkFit", "characters", "splitWordToFitWidthRecursion", "usedChars", "remainingChars", "type", "nextChar", "rest", "newWord", "splitLineToFitWidth", "line", "content", "splitLineToFitWidthRecursion", "words", "newLine", "joiner", "nextWord", "lineWithNextWord", "applyStyle", "dom", "styleFn", "addHtmlSpan", "element", "width", "classes", "addBackground", "fo", "div", "label", "labelClass", "bbox", "createTspan", "textElement", "lineIndex", "lineHeight", "computeWidthOfText", "parentNode", "testElement", "testSpan", "updateTextContentAndStyles", "textLength", "computeDimensionOfText", "_a", "textDimension", "createFormattedText", "g", "structuredText", "labelGroup", "bkg", "checkWidth", "line2", "linesUnderWidth", "preparedLine", "tspan", "padding", "wrappedLine", "innerTspan", "createText", "el", "style", "isTitle", "useHtmlLabels", "isNode", "addSvgBackground", "log$1", "htmlText", "decodeEntities"] +} diff --git a/public/chunk-M7PQX5EB.min.js b/public/chunk-M7PQX5EB.min.js new file mode 100644 index 000000000..f86f9e984 --- /dev/null +++ b/public/chunk-M7PQX5EB.min.js @@ -0,0 +1,2 @@ +import{Ha as o,c}from"./chunk-YEACHCAA.min.js";import{d as l}from"./chunk-XUHMPXWX.min.js";var i=l(c(),1);var x=(s,t)=>{let r=s.append("rect");if(r.attr("x",t.x),r.attr("y",t.y),r.attr("fill",t.fill),r.attr("stroke",t.stroke),r.attr("width",t.width),r.attr("height",t.height),t.name&&r.attr("name",t.name),t.rx!==void 0&&r.attr("rx",t.rx),t.ry!==void 0&&r.attr("ry",t.ry),t.attrs!==void 0)for(let e in t.attrs)r.attr(e,t.attrs[e]);return t.class!==void 0&&r.attr("class",t.class),r},h=(s,t)=>{let r={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};x(s,r).lower()},y=(s,t)=>{let r=t.text.replace(o," "),e=s.append("text");e.attr("x",t.x),e.attr("y",t.y),e.attr("class","legend"),e.style("text-anchor",t.anchor),t.class!==void 0&&e.attr("class",t.class);let n=e.append("tspan");return n.attr("x",t.x+t.textMargin*2),n.text(r),e},m=(s,t,r,e)=>{let n=s.append("image");n.attr("x",t),n.attr("y",r);let a=(0,i.sanitizeUrl)(e);n.attr("xlink:href",a)},p=(s,t,r,e)=>{let n=s.append("use");n.attr("x",t),n.attr("y",r);let a=(0,i.sanitizeUrl)(e);n.attr("xlink:href",`#${a}`)},g=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),f=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0});export{x as a,h as b,y as c,m as d,p as e,g as f,f as g}; +//# sourceMappingURL=chunk-M7PQX5EB.min.js.map diff --git a/public/chunk-M7PQX5EB.min.js.map b/public/chunk-M7PQX5EB.min.js.map new file mode 100644 index 000000000..e57291529 --- /dev/null +++ b/public/chunk-M7PQX5EB.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/mermaid/dist/svgDrawCommon-5e1cfd1d.js"], + "sourcesContent": ["import { sanitizeUrl } from \"@braintree/sanitize-url\";\nimport { J as lineBreakRegex } from \"./mermaid-6dc72991.js\";\nconst drawRect = (element, rectData) => {\n const rectElement = element.append(\"rect\");\n rectElement.attr(\"x\", rectData.x);\n rectElement.attr(\"y\", rectData.y);\n rectElement.attr(\"fill\", rectData.fill);\n rectElement.attr(\"stroke\", rectData.stroke);\n rectElement.attr(\"width\", rectData.width);\n rectElement.attr(\"height\", rectData.height);\n if (rectData.name) {\n rectElement.attr(\"name\", rectData.name);\n }\n rectData.rx !== void 0 && rectElement.attr(\"rx\", rectData.rx);\n rectData.ry !== void 0 && rectElement.attr(\"ry\", rectData.ry);\n if (rectData.attrs !== void 0) {\n for (const attrKey in rectData.attrs) {\n rectElement.attr(attrKey, rectData.attrs[attrKey]);\n }\n }\n rectData.class !== void 0 && rectElement.attr(\"class\", rectData.class);\n return rectElement;\n};\nconst drawBackgroundRect = (element, bounds) => {\n const rectData = {\n x: bounds.startx,\n y: bounds.starty,\n width: bounds.stopx - bounds.startx,\n height: bounds.stopy - bounds.starty,\n fill: bounds.fill,\n stroke: bounds.stroke,\n class: \"rect\"\n };\n const rectElement = drawRect(element, rectData);\n rectElement.lower();\n};\nconst drawText = (element, textData) => {\n const nText = textData.text.replace(lineBreakRegex, \" \");\n const textElem = element.append(\"text\");\n textElem.attr(\"x\", textData.x);\n textElem.attr(\"y\", textData.y);\n textElem.attr(\"class\", \"legend\");\n textElem.style(\"text-anchor\", textData.anchor);\n textData.class !== void 0 && textElem.attr(\"class\", textData.class);\n const tspan = textElem.append(\"tspan\");\n tspan.attr(\"x\", textData.x + textData.textMargin * 2);\n tspan.text(nText);\n return textElem;\n};\nconst drawImage = (elem, x, y, link) => {\n const imageElement = elem.append(\"image\");\n imageElement.attr(\"x\", x);\n imageElement.attr(\"y\", y);\n const sanitizedLink = sanitizeUrl(link);\n imageElement.attr(\"xlink:href\", sanitizedLink);\n};\nconst drawEmbeddedImage = (element, x, y, link) => {\n const imageElement = element.append(\"use\");\n imageElement.attr(\"x\", x);\n imageElement.attr(\"y\", y);\n const sanitizedLink = sanitizeUrl(link);\n imageElement.attr(\"xlink:href\", `#${sanitizedLink}`);\n};\nconst getNoteRect = () => {\n const noteRectData = {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n fill: \"#EDF2AE\",\n stroke: \"#666\",\n anchor: \"start\",\n rx: 0,\n ry: 0\n };\n return noteRectData;\n};\nconst getTextObj = () => {\n const testObject = {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n \"text-anchor\": \"start\",\n style: \"#666\",\n textMargin: 0,\n rx: 0,\n ry: 0,\n tspan: true\n };\n return testObject;\n};\nexport {\n drawBackgroundRect as a,\n drawEmbeddedImage as b,\n drawImage as c,\n drawRect as d,\n getTextObj as e,\n drawText as f,\n getNoteRect as g\n};\n"], + "mappings": "2FAAA,IAAAA,EAA4B,SAE5B,IAAMC,EAAW,CAACC,EAASC,IAAa,CACtC,IAAMC,EAAcF,EAAQ,OAAO,MAAM,EAYzC,GAXAE,EAAY,KAAK,IAAKD,EAAS,CAAC,EAChCC,EAAY,KAAK,IAAKD,EAAS,CAAC,EAChCC,EAAY,KAAK,OAAQD,EAAS,IAAI,EACtCC,EAAY,KAAK,SAAUD,EAAS,MAAM,EAC1CC,EAAY,KAAK,QAASD,EAAS,KAAK,EACxCC,EAAY,KAAK,SAAUD,EAAS,MAAM,EACtCA,EAAS,MACXC,EAAY,KAAK,OAAQD,EAAS,IAAI,EAExCA,EAAS,KAAO,QAAUC,EAAY,KAAK,KAAMD,EAAS,EAAE,EAC5DA,EAAS,KAAO,QAAUC,EAAY,KAAK,KAAMD,EAAS,EAAE,EACxDA,EAAS,QAAU,OACrB,QAAWE,KAAWF,EAAS,MAC7BC,EAAY,KAAKC,EAASF,EAAS,MAAME,CAAO,CAAC,EAGrD,OAAAF,EAAS,QAAU,QAAUC,EAAY,KAAK,QAASD,EAAS,KAAK,EAC9DC,CACT,EACME,EAAqB,CAACJ,EAASK,IAAW,CAC9C,IAAMJ,EAAW,CACf,EAAGI,EAAO,OACV,EAAGA,EAAO,OACV,MAAOA,EAAO,MAAQA,EAAO,OAC7B,OAAQA,EAAO,MAAQA,EAAO,OAC9B,KAAMA,EAAO,KACb,OAAQA,EAAO,OACf,MAAO,MACT,EACoBN,EAASC,EAASC,CAAQ,EAClC,MAAM,CACpB,EACMK,EAAW,CAACN,EAASO,IAAa,CACtC,IAAMC,EAAQD,EAAS,KAAK,QAAQE,EAAgB,GAAG,EACjDC,EAAWV,EAAQ,OAAO,MAAM,EACtCU,EAAS,KAAK,IAAKH,EAAS,CAAC,EAC7BG,EAAS,KAAK,IAAKH,EAAS,CAAC,EAC7BG,EAAS,KAAK,QAAS,QAAQ,EAC/BA,EAAS,MAAM,cAAeH,EAAS,MAAM,EAC7CA,EAAS,QAAU,QAAUG,EAAS,KAAK,QAASH,EAAS,KAAK,EAClE,IAAMI,EAAQD,EAAS,OAAO,OAAO,EACrC,OAAAC,EAAM,KAAK,IAAKJ,EAAS,EAAIA,EAAS,WAAa,CAAC,EACpDI,EAAM,KAAKH,CAAK,EACTE,CACT,EACME,EAAY,CAACC,EAAMC,EAAGC,EAAGC,IAAS,CACtC,IAAMC,EAAeJ,EAAK,OAAO,OAAO,EACxCI,EAAa,KAAK,IAAKH,CAAC,EACxBG,EAAa,KAAK,IAAKF,CAAC,EACxB,IAAMG,KAAgB,eAAYF,CAAI,EACtCC,EAAa,KAAK,aAAcC,CAAa,CAC/C,EACMC,EAAoB,CAACnB,EAASc,EAAGC,EAAGC,IAAS,CACjD,IAAMC,EAAejB,EAAQ,OAAO,KAAK,EACzCiB,EAAa,KAAK,IAAKH,CAAC,EACxBG,EAAa,KAAK,IAAKF,CAAC,EACxB,IAAMG,KAAgB,eAAYF,CAAI,EACtCC,EAAa,KAAK,aAAc,IAAIC,CAAa,EAAE,CACrD,EACME,EAAc,KACG,CACnB,EAAG,EACH,EAAG,EACH,MAAO,IACP,OAAQ,IACR,KAAM,UACN,OAAQ,OACR,OAAQ,QACR,GAAI,EACJ,GAAI,CACN,GAGIC,EAAa,KACE,CACjB,EAAG,EACH,EAAG,EACH,MAAO,IACP,OAAQ,IACR,cAAe,QACf,MAAO,OACP,WAAY,EACZ,GAAI,EACJ,GAAI,EACJ,MAAO,EACT", + "names": ["import_sanitize_url", "drawRect", "element", "rectData", "rectElement", "attrKey", "drawBackgroundRect", "bounds", "drawText", "textData", "nText", "lineBreakRegex", "textElem", "tspan", "drawImage", "elem", "x", "y", "link", "imageElement", "sanitizedLink", "drawEmbeddedImage", "getNoteRect", "getTextObj"] +} diff --git a/public/chunk-N4EFGQ5G.min.js b/public/chunk-N4EFGQ5G.min.js new file mode 100644 index 000000000..808698bf2 --- /dev/null +++ b/public/chunk-N4EFGQ5G.min.js @@ -0,0 +1,5 @@ +import{b as V}from"./chunk-LXB37CFX.min.js";import{G as K,Ga as g,I as P,Ia as q,Ja as H,ab as Y,bb as U,h as T,nb as b}from"./chunk-YEACHCAA.min.js";var ht=(e,t,a,i)=>{t.forEach(l=>{wt[l](e,a,i)})},ot=(e,t,a)=>{g.trace("Making markers for ",a),e.append("defs").append("marker").attr("id",a+"_"+t+"-extensionStart").attr("class","marker extension "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},yt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-compositionStart").attr("class","marker composition "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},pt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},ft=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},xt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),e.append("defs").append("marker").attr("id",a+"_"+t+"-lollipopEnd").attr("class","marker lollipop "+t).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},dt=(e,t,a)=>{e.append("marker").attr("id",a+"_"+t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",a+"_"+t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},gt=(e,t,a)=>{e.append("marker").attr("id",a+"_"+t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",a+"_"+t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},ut=(e,t,a)=>{e.append("marker").attr("id",a+"_"+t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),e.append("marker").attr("id",a+"_"+t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},bt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},wt={extension:ot,composition:yt,aggregation:pt,dependency:ft,lollipop:xt,point:dt,circle:gt,cross:ut,barb:bt},hr=ht;function mt(e,t){t&&e.attr("style",t)}function kt(e){let t=T(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),a=t.append("xhtml:div"),i=e.label,l=e.isNode?"nodeLabel":"edgeLabel";return a.html('"+i+""),mt(a,e.labelStyle),a.style("display","inline-block"),a.style("white-space","nowrap"),a.attr("xmlns","http://www.w3.org/1999/xhtml"),t.node()}var vt=(e,t,a,i)=>{let l=e||"";if(typeof l=="object"&&(l=l[0]),H(b().flowchart.htmlLabels)){l=l.replace(/\\n|\n/g,"
"),g.debug("vertexText"+l);let r={isNode:i,label:U(l).replace(/fa[blrs]?:fa-[\w-]+/g,n=>``),labelStyle:t.replace("fill:","color:")};return kt(r)}else{let r=document.createElementNS("http://www.w3.org/2000/svg","text");r.setAttribute("style",t.replace("color:","fill:"));let s=[];typeof l=="string"?s=l.split(/\\n|\n|/gi):Array.isArray(l)?s=l:s=[];for(let n of s){let c=document.createElementNS("http://www.w3.org/2000/svg","tspan");c.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),c.setAttribute("dy","1em"),c.setAttribute("x","0"),a?c.setAttribute("class","title-row"):c.setAttribute("class","row"),c.textContent=n.trim(),r.appendChild(c)}return r}},R=vt,M=async(e,t,a,i)=>{let l,r=t.useHtmlLabels||H(b().flowchart.htmlLabels);a?l=a:l="node default";let s=e.insert("g").attr("class",l).attr("id",t.domId||t.id),n=s.insert("g").attr("class","label").attr("style",t.labelStyle),c;t.labelText===void 0?c="":c=typeof t.labelText=="string"?t.labelText:t.labelText[0];let o=n.node(),h;t.labelType==="markdown"?h=V(n,q(U(c),b()),{useHtmlLabels:r,width:t.width||b().flowchart.wrappingWidth,classes:"markdown-node-label"}):h=o.appendChild(R(q(U(c),b()),t.labelStyle,!1,i));let y=h.getBBox(),f=t.padding/2;if(H(b().flowchart.htmlLabels)){let p=h.children[0],d=T(h),k=p.getElementsByTagName("img");if(k){let x=c.replace(/]*>/g,"").trim()==="";await Promise.all([...k].map(u=>new Promise(S=>{function E(){if(u.style.display="flex",u.style.flexDirection="column",x){let C=b().fontSize?b().fontSize:window.getComputedStyle(document.body).fontSize,A=parseInt(C,10)*5+"px";u.style.minWidth=A,u.style.maxWidth=A}else u.style.width="100%";S(u)}setTimeout(()=>{u.complete&&E()}),u.addEventListener("error",E),u.addEventListener("load",E)})))}y=p.getBoundingClientRect(),d.attr("width",y.width),d.attr("height",y.height)}return r?n.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"):n.attr("transform","translate(0, "+-y.height/2+")"),t.centerLabel&&n.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),n.insert("rect",":first-child"),{shapeSvg:s,bbox:y,halfPadding:f,label:n}},m=(e,t)=>{let a=t.node().getBBox();e.width=a.width,e.height=a.height};function I(e,t,a,i){return e.insert("polygon",":first-child").attr("points",i.map(function(l){return l.x+","+l.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+a/2+")")}function Lt(e,t){return e.intersect(t)}function lt(e,t,a,i){var l=e.x,r=e.y,s=l-i.x,n=r-i.y,c=Math.sqrt(t*t*n*n+a*a*s*s),o=Math.abs(t*a*s/c);i.x0}function Tt(e,t,a){var i=e.x,l=e.y,r=[],s=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(d){s=Math.min(s,d.x),n=Math.min(n,d.y)}):(s=Math.min(s,t.x),n=Math.min(n,t.y));for(var c=i-e.width/2-s,o=l-e.height/2-n,h=0;h1&&r.sort(function(d,k){var x=d.x-a.x,u=d.y-a.y,S=Math.sqrt(x*x+u*u),E=k.x-a.x,C=k.y-a.y,X=Math.sqrt(E*E+C*C);return S{var a=e.x,i=e.y,l=t.x-a,r=t.y-i,s=e.width/2,n=e.height/2,c,o;return Math.abs(r)*s>Math.abs(l)*n?(r<0&&(n=-n),c=r===0?0:n*l/r,o=n):(l<0&&(s=-s),c=s,o=l===0?0:s*r/l),{x:a+c,y:i+o}},Et=Bt,w={node:Lt,circle:St,ellipse:lt,polygon:Tt,rect:Et},Ct=async(e,t)=>{t.useHtmlLabels||b().flowchart.htmlLabels||(t.centerLabel=!0);let{shapeSvg:i,bbox:l,halfPadding:r}=await M(e,t,"node "+t.classes,!0);g.info("Classes = ",t.classes);let s=i.insert("rect",":first-child");return s.attr("rx",t.rx).attr("ry",t.ry).attr("x",-l.width/2-r).attr("y",-l.height/2-r).attr("width",l.width+t.padding).attr("height",l.height+t.padding),m(t,s),t.intersect=function(n){return w.rect(t,n)},i},$t=Ct,_t=e=>{let t=new Set;for(let a of e)switch(a){case"x":t.add("right"),t.add("left");break;case"y":t.add("up"),t.add("down");break;default:t.add(a);break}return t},Rt=(e,t,a)=>{let i=_t(e),l=2,r=t.height+2*a.padding,s=r/l,n=t.width+2*s+a.padding,c=a.padding/2;return i.has("right")&&i.has("left")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:s,y:0},{x:n/2,y:2*c},{x:n-s,y:0},{x:n,y:0},{x:n,y:-r/3},{x:n+2*c,y:-r/2},{x:n,y:-2*r/3},{x:n,y:-r},{x:n-s,y:-r},{x:n/2,y:-r-2*c},{x:s,y:-r},{x:0,y:-r},{x:0,y:-2*r/3},{x:-2*c,y:-r/2},{x:0,y:-r/3}]:i.has("right")&&i.has("left")&&i.has("up")?[{x:s,y:0},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:s,y:-r},{x:0,y:-r/2}]:i.has("right")&&i.has("left")&&i.has("down")?[{x:0,y:0},{x:s,y:-r},{x:n-s,y:-r},{x:n,y:0}]:i.has("right")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:n,y:-s},{x:n,y:-r+s},{x:0,y:-r}]:i.has("left")&&i.has("up")&&i.has("down")?[{x:n,y:0},{x:0,y:-s},{x:0,y:-r+s},{x:n,y:-r}]:i.has("right")&&i.has("left")?[{x:s,y:0},{x:s,y:-c},{x:n-s,y:-c},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:n-s,y:-r+c},{x:s,y:-r+c},{x:s,y:-r},{x:0,y:-r/2}]:i.has("up")&&i.has("down")?[{x:n/2,y:0},{x:0,y:-c},{x:s,y:-c},{x:s,y:-r+c},{x:0,y:-r+c},{x:n/2,y:-r},{x:n,y:-r+c},{x:n-s,y:-r+c},{x:n-s,y:-c},{x:n,y:-c}]:i.has("right")&&i.has("up")?[{x:0,y:0},{x:n,y:-s},{x:0,y:-r}]:i.has("right")&&i.has("down")?[{x:0,y:0},{x:n,y:0},{x:0,y:-r}]:i.has("left")&&i.has("up")?[{x:n,y:0},{x:0,y:-s},{x:n,y:-r}]:i.has("left")&&i.has("down")?[{x:n,y:0},{x:0,y:0},{x:n,y:-r}]:i.has("right")?[{x:s,y:-c},{x:s,y:-c},{x:n-s,y:-c},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:n-s,y:-r+c},{x:s,y:-r+c},{x:s,y:-r+c}]:i.has("left")?[{x:s,y:0},{x:s,y:-c},{x:n-s,y:-c},{x:n-s,y:-r+c},{x:s,y:-r+c},{x:s,y:-r},{x:0,y:-r/2}]:i.has("up")?[{x:s,y:-c},{x:s,y:-r+c},{x:0,y:-r+c},{x:n/2,y:-r},{x:n,y:-r+c},{x:n-s,y:-r+c},{x:n-s,y:-c}]:i.has("down")?[{x:n/2,y:0},{x:0,y:-c},{x:s,y:-c},{x:s,y:-r+c},{x:n-s,y:-r+c},{x:n-s,y:-c},{x:n,y:-c}]:[{x:0,y:0}]},rt=e=>e?" "+e:"",_=(e,t)=>`${t||"node default"}${rt(e.classes)} ${rt(e.class)}`,at=async(e,t)=>{let{shapeSvg:a,bbox:i}=await M(e,t,_(t,void 0),!0),l=i.width+t.padding,r=i.height+t.padding,s=l+r,n=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];g.info("Question main (Circle)");let c=I(a,s,s,n);return c.attr("style",t.style),m(t,c),t.intersect=function(o){return g.warn("Intersect called"),w.polygon(t,n,o)},a},Ht=(e,t)=>{let a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=28,l=[{x:0,y:i/2},{x:i/2,y:0},{x:0,y:-i/2},{x:-i/2,y:0}];return a.insert("polygon",":first-child").attr("points",l.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),t.width=28,t.height=28,t.intersect=function(s){return w.circle(t,14,s)},a},It=async(e,t)=>{let{shapeSvg:a,bbox:i}=await M(e,t,_(t,void 0),!0),l=4,r=i.height+t.padding,s=r/l,n=i.width+2*s+t.padding,c=[{x:s,y:0},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:s,y:-r},{x:0,y:-r/2}],o=I(a,n,r,c);return o.attr("style",t.style),m(t,o),t.intersect=function(h){return w.polygon(t,c,h)},a},Nt=async(e,t)=>{let{shapeSvg:a,bbox:i}=await M(e,t,void 0,!0),l=2,r=i.height+2*t.padding,s=r/l,n=i.width+2*s+t.padding,c=Rt(t.directions,i,t),o=I(a,n,r,c);return o.attr("style",t.style),m(t,o),t.intersect=function(h){return w.polygon(t,c,h)},a},Ot=async(e,t)=>{let{shapeSvg:a,bbox:i}=await M(e,t,_(t,void 0),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:-r/2,y:0},{x:l,y:0},{x:l,y:-r},{x:-r/2,y:-r},{x:0,y:-r/2}];return I(a,l,r,s).attr("style",t.style),t.width=l+r,t.height=r,t.intersect=function(c){return w.polygon(t,s,c)},a},Wt=async(e,t)=>{let{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:-2*r/6,y:0},{x:l-r/6,y:0},{x:l+2*r/6,y:-r},{x:r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Xt=async(e,t)=>{let{shapeSvg:a,bbox:i}=await M(e,t,_(t,void 0),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:2*r/6,y:0},{x:l+r/6,y:0},{x:l-2*r/6,y:-r},{x:-r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Yt=async(e,t)=>{let{shapeSvg:a,bbox:i}=await M(e,t,_(t,void 0),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:-2*r/6,y:0},{x:l+2*r/6,y:0},{x:l-r/6,y:-r},{x:r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Dt=async(e,t)=>{let{shapeSvg:a,bbox:i}=await M(e,t,_(t,void 0),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:r/6,y:0},{x:l-r/6,y:0},{x:l+2*r/6,y:-r},{x:-2*r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},At=async(e,t)=>{let{shapeSvg:a,bbox:i}=await M(e,t,_(t,void 0),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:0,y:0},{x:l+r/2,y:0},{x:l,y:-r/2},{x:l+r/2,y:-r},{x:0,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},jt=async(e,t)=>{let{shapeSvg:a,bbox:i}=await M(e,t,_(t,void 0),!0),l=i.width+t.padding,r=l/2,s=r/(2.5+l/50),n=i.height+s+t.padding,c="M 0,"+s+" a "+r+","+s+" 0,0,0 "+l+" 0 a "+r+","+s+" 0,0,0 "+-l+" 0 l 0,"+n+" a "+r+","+s+" 0,0,0 "+l+" 0 l 0,"+-n,o=a.attr("label-offset-y",s).insert("path",":first-child").attr("style",t.style).attr("d",c).attr("transform","translate("+-l/2+","+-(n/2+s)+")");return m(t,o),t.intersect=function(h){let y=w.rect(t,h),f=y.x-t.x;if(r!=0&&(Math.abs(f)t.height/2-s)){let p=s*s*(1-f*f/(r*r));p!=0&&(p=Math.sqrt(p)),p=s-p,h.y-t.y>0&&(p=-p),y.y+=p}return y},a},Ut=async(e,t)=>{let{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,"node "+t.classes+" "+t.class,!0),r=a.insert("rect",":first-child"),s=t.positioned?t.width:i.width+t.padding,n=t.positioned?t.height:i.height+t.padding,c=t.positioned?-s/2:-i.width/2-l,o=t.positioned?-n/2:-i.height/2-l;if(r.attr("class","basic label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",c).attr("y",o).attr("width",s).attr("height",n),t.props){let h=new Set(Object.keys(t.props));t.props.borders&&(J(r,t.props.borders,s,n),h.delete("borders")),h.forEach(y=>{g.warn(`Unknown node property ${y}`)})}return m(t,r),t.intersect=function(h){return w.rect(t,h)},a},zt=async(e,t)=>{let{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,"node "+t.classes,!0),r=a.insert("rect",":first-child"),s=t.positioned?t.width:i.width+t.padding,n=t.positioned?t.height:i.height+t.padding,c=t.positioned?-s/2:-i.width/2-l,o=t.positioned?-n/2:-i.height/2-l;if(r.attr("class","basic cluster composite label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",c).attr("y",o).attr("width",s).attr("height",n),t.props){let h=new Set(Object.keys(t.props));t.props.borders&&(J(r,t.props.borders,s,n),h.delete("borders")),h.forEach(y=>{g.warn(`Unknown node property ${y}`)})}return m(t,r),t.intersect=function(h){return w.rect(t,h)},a},Zt=async(e,t)=>{let{shapeSvg:a}=await M(e,t,"label",!0);g.trace("Classes = ",t.class);let i=a.insert("rect",":first-child"),l=0,r=0;if(i.attr("width",l).attr("height",r),a.attr("class","label edgeLabel"),t.props){let s=new Set(Object.keys(t.props));t.props.borders&&(J(i,t.props.borders,l,r),s.delete("borders")),s.forEach(n=>{g.warn(`Unknown node property ${n}`)})}return m(t,i),t.intersect=function(s){return w.rect(t,s)},a};function J(e,t,a,i){let l=[],r=n=>{l.push(n,0)},s=n=>{l.push(0,n)};t.includes("t")?(g.debug("add top border"),r(a)):s(a),t.includes("r")?(g.debug("add right border"),r(i)):s(i),t.includes("b")?(g.debug("add bottom border"),r(a)):s(a),t.includes("l")?(g.debug("add left border"),r(i)):s(i),e.attr("stroke-dasharray",l.join(" "))}var Gt=(e,t)=>{let a;t.classes?a="node "+t.classes:a="node default";let i=e.insert("g").attr("class",a).attr("id",t.domId||t.id),l=i.insert("rect",":first-child"),r=i.insert("line"),s=i.insert("g").attr("class","label"),n=t.labelText.flat?t.labelText.flat():t.labelText,c="";typeof n=="object"?c=n[0]:c=n,g.info("Label text abc79",c,n,typeof n=="object");let o=s.node().appendChild(R(c,t.labelStyle,!0,!0)),h={width:0,height:0};if(H(b().flowchart.htmlLabels)){let k=o.children[0],x=T(o);h=k.getBoundingClientRect(),x.attr("width",h.width),x.attr("height",h.height)}g.info("Text 2",n);let y=n.slice(1,n.length),f=o.getBBox(),p=s.node().appendChild(R(y.join?y.join("
"):y,t.labelStyle,!0,!0));if(H(b().flowchart.htmlLabels)){let k=p.children[0],x=T(p);h=k.getBoundingClientRect(),x.attr("width",h.width),x.attr("height",h.height)}let d=t.padding/2;return T(p).attr("transform","translate( "+(h.width>f.width?0:(f.width-h.width)/2)+", "+(f.height+d+5)+")"),T(o).attr("transform","translate( "+(h.width{let{shapeSvg:a,bbox:i}=await M(e,t,_(t,void 0),!0),l=i.height+t.padding,r=i.width+l/4+t.padding,s=a.insert("rect",":first-child").attr("style",t.style).attr("rx",l/2).attr("ry",l/2).attr("x",-r/2).attr("y",-l/2).attr("width",r).attr("height",l);return m(t,s),t.intersect=function(n){return w.rect(t,n)},a},Qt=async(e,t)=>{let{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,_(t,void 0),!0),r=a.insert("circle",":first-child");return r.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l).attr("width",i.width+t.padding).attr("height",i.height+t.padding),g.info("Circle main"),m(t,r),t.intersect=function(s){return g.info("Circle intersect",t,i.width/2+l,s),w.circle(t,i.width/2+l,s)},a},Vt=async(e,t)=>{let{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,_(t,void 0),!0),r=5,s=a.insert("g",":first-child"),n=s.insert("circle"),c=s.insert("circle");return s.attr("class",t.class),n.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l+r).attr("width",i.width+t.padding+r*2).attr("height",i.height+t.padding+r*2),c.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l).attr("width",i.width+t.padding).attr("height",i.height+t.padding),g.info("DoubleCircle main"),m(t,n),t.intersect=function(o){return g.info("DoubleCircle intersect",t,i.width/2+l+r,o),w.circle(t,i.width/2+l+r,o)},a},qt=async(e,t)=>{let{shapeSvg:a,bbox:i}=await M(e,t,_(t,void 0),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:0,y:0},{x:l,y:0},{x:l,y:-r},{x:0,y:-r},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-r},{x:-8,y:-r},{x:-8,y:0}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Jt=(e,t)=>{let a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=a.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),m(t,i),t.intersect=function(l){return w.circle(t,7,l)},a},et=(e,t,a)=>{let i=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),l=70,r=10;a==="LR"&&(l=10,r=70);let s=i.append("rect").attr("x",-1*l/2).attr("y",-1*r/2).attr("width",l).attr("height",r).attr("class","fork-join");return m(t,s),t.height=t.height+t.padding/2,t.width=t.width+t.padding/2,t.intersect=function(n){return w.rect(t,n)},i},Kt=(e,t)=>{let a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=a.insert("circle",":first-child"),l=a.insert("circle",":first-child");return l.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),i.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),m(t,l),t.intersect=function(r){return w.circle(t,7,r)},a},Pt=(e,t)=>{let a=t.padding/2,i=4,l=8,r;t.classes?r="node "+t.classes:r="node default";let s=e.insert("g").attr("class",r).attr("id",t.domId||t.id),n=s.insert("rect",":first-child"),c=s.insert("line"),o=s.insert("line"),h=0,y=i,f=s.insert("g").attr("class","label"),p=0,d=t.classData.annotations&&t.classData.annotations[0],k=t.classData.annotations[0]?"\xAB"+t.classData.annotations[0]+"\xBB":"",x=f.node().appendChild(R(k,t.labelStyle,!0,!0)),u=x.getBBox();if(H(b().flowchart.htmlLabels)){let v=x.children[0],L=T(x);u=v.getBoundingClientRect(),L.attr("width",u.width),L.attr("height",u.height)}t.classData.annotations[0]&&(y+=u.height+i,h+=u.width);let S=t.classData.label;t.classData.type!==void 0&&t.classData.type!==""&&(b().flowchart.htmlLabels?S+="<"+t.classData.type+">":S+="<"+t.classData.type+">");let E=f.node().appendChild(R(S,t.labelStyle,!0,!0));T(E).attr("class","classTitle");let C=E.getBBox();if(H(b().flowchart.htmlLabels)){let v=E.children[0],L=T(E);C=v.getBoundingClientRect(),L.attr("width",C.width),L.attr("height",C.height)}y+=C.height+i,C.width>h&&(h=C.width);let X=[];t.classData.members.forEach(v=>{let L=v.getDisplayDetails(),W=L.displayText;b().flowchart.htmlLabels&&(W=W.replace(//g,">"));let N=f.node().appendChild(R(W,L.cssStyle?L.cssStyle:t.labelStyle,!0,!0)),$=N.getBBox();if(H(b().flowchart.htmlLabels)){let Q=N.children[0],j=T(N);$=Q.getBoundingClientRect(),j.attr("width",$.width),j.attr("height",$.height)}$.width>h&&(h=$.width),y+=$.height+i,X.push(N)}),y+=l;let A=[];if(t.classData.methods.forEach(v=>{let L=v.getDisplayDetails(),W=L.displayText;b().flowchart.htmlLabels&&(W=W.replace(//g,">"));let N=f.node().appendChild(R(W,L.cssStyle?L.cssStyle:t.labelStyle,!0,!0)),$=N.getBBox();if(H(b().flowchart.htmlLabels)){let Q=N.children[0],j=T(N);$=Q.getBoundingClientRect(),j.attr("width",$.width),j.attr("height",$.height)}$.width>h&&(h=$.width),y+=$.height+i,A.push(N)}),y+=l,d){let v=(h-u.width)/2;T(x).attr("transform","translate( "+(-1*h/2+v)+", "+-1*y/2+")"),p=u.height+i}let ct=(h-C.width)/2;return T(E).attr("transform","translate( "+(-1*h/2+ct)+", "+(-1*y/2+p)+")"),p+=C.height+i,c.attr("class","divider").attr("x1",-h/2-a).attr("x2",h/2+a).attr("y1",-y/2-a+l+p).attr("y2",-y/2-a+l+p),p+=l,X.forEach(v=>{T(v).attr("transform","translate( "+-h/2+", "+(-1*y/2+p+l/2)+")");let L=v?.getBBox();p+=(L?.height??0)+i}),p+=l,o.attr("class","divider").attr("x1",-h/2-a).attr("x2",h/2+a).attr("y1",-y/2-a+l+p).attr("y2",-y/2-a+l+p),p+=l,A.forEach(v=>{T(v).attr("transform","translate( "+-h/2+", "+(-1*y/2+p)+")");let L=v?.getBBox();p+=(L?.height??0)+i}),n.attr("style",t.style).attr("class","outer title-state").attr("x",-h/2-a).attr("y",-(y/2)-a).attr("width",h+t.padding).attr("height",y+t.padding),m(t,n),t.intersect=function(v){return w.rect(t,v)},s},st={rhombus:at,composite:zt,question:at,rect:Ut,labelRect:Zt,rectWithTitle:Gt,choice:Ht,circle:Qt,doublecircle:Vt,stadium:Ft,hexagon:It,block_arrow:Nt,rect_left_inv_arrow:Ot,lean_right:Wt,lean_left:Xt,trapezoid:Yt,inv_trapezoid:Dt,rect_right_inv_arrow:At,cylinder:jt,start:Jt,end:Kt,note:$t,subroutine:qt,fork:et,join:et,class_box:Pt},D={},or=async(e,t,a)=>{let i,l;if(t.link){let r;b().securityLevel==="sandbox"?r="_top":t.linkTarget&&(r=t.linkTarget||"_blank"),i=e.insert("svg:a").attr("xlink:href",t.link).attr("target",r),l=await st[t.shape](i,t,a)}else l=await st[t.shape](e,t,a),i=l;return t.tooltip&&l.attr("title",t.tooltip),t.class&&l.attr("class","node default "+t.class),i.attr("data-node","true"),i.attr("data-id",t.id),D[t.id]=i,t.haveCallback&&D[t.id].attr("class",D[t.id].attr("class")+" clickable"),i},yr=(e,t)=>{D[t.id]=e},pr=()=>{D={}},fr=e=>{let t=D[e.id];g.trace("Transforming node",e.diff,e,"translate("+(e.x-e.width/2-5)+", "+e.width/2+")");let a=8,i=e.diff||0;return e.clusterNode?t.attr("transform","translate("+(e.x+i-e.width/2)+", "+(e.y-e.height/2-a)+")"):t.attr("transform","translate("+e.x+", "+e.y+")"),i},tr=({flowchart:e})=>{var t,a;let i=((t=e?.subGraphTitleMargin)==null?void 0:t.top)??0,l=((a=e?.subGraphTitleMargin)==null?void 0:a.bottom)??0,r=i+l;return{subGraphTitleTopMargin:i,subGraphTitleBottomMargin:l,subGraphTitleTotalMargin:r}},O={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function z(e,t){if(e===void 0||t===void 0)return{angle:0,deltaX:0,deltaY:0};e=G(e),t=G(t);let[a,i]=[e.x,e.y],[l,r]=[t.x,t.y],s=l-a,n=r-i;return{angle:Math.atan(n/s),deltaX:s,deltaY:n}}var G=e=>Array.isArray(e)?{x:e[0],y:e[1]}:e,rr=e=>({x:function(t,a,i){let l=0;if(a===0&&Object.hasOwn(O,e.arrowTypeStart)){let{angle:r,deltaX:s}=z(i[0],i[1]);l=O[e.arrowTypeStart]*Math.cos(r)*(s>=0?1:-1)}else if(a===i.length-1&&Object.hasOwn(O,e.arrowTypeEnd)){let{angle:r,deltaX:s}=z(i[i.length-1],i[i.length-2]);l=O[e.arrowTypeEnd]*Math.cos(r)*(s>=0?1:-1)}return G(t).x+l},y:function(t,a,i){let l=0;if(a===0&&Object.hasOwn(O,e.arrowTypeStart)){let{angle:r,deltaY:s}=z(i[0],i[1]);l=O[e.arrowTypeStart]*Math.abs(Math.sin(r))*(s>=0?1:-1)}else if(a===i.length-1&&Object.hasOwn(O,e.arrowTypeEnd)){let{angle:r,deltaY:s}=z(i[i.length-1],i[i.length-2]);l=O[e.arrowTypeEnd]*Math.abs(Math.sin(r))*(s>=0?1:-1)}return G(t).y+l}}),ar=(e,t,a,i,l)=>{t.arrowTypeStart&&it(e,"start",t.arrowTypeStart,a,i,l),t.arrowTypeEnd&&it(e,"end",t.arrowTypeEnd,a,i,l)},er={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},it=(e,t,a,i,l,r)=>{let s=er[a];if(!s){g.warn(`Unknown arrow type: ${a}`);return}let n=t==="start"?"Start":"End";e.attr(`marker-${t}`,`url(${i}#${l}_${r}-${s}${n})`)},F={},B={},xr=()=>{F={},B={}},dr=(e,t)=>{let a=H(b().flowchart.htmlLabels),i=t.labelType==="markdown"?V(e,t.label,{style:t.labelStyle,useHtmlLabels:a,addSvgBackground:!0}):R(t.label,t.labelStyle),l=e.insert("g").attr("class","edgeLabel"),r=l.insert("g").attr("class","label");r.node().appendChild(i);let s=i.getBBox();if(a){let c=i.children[0],o=T(i);s=c.getBoundingClientRect(),o.attr("width",s.width),o.attr("height",s.height)}r.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),F[t.id]=l,t.width=s.width,t.height=s.height;let n;if(t.startLabelLeft){let c=R(t.startLabelLeft,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=h.node().appendChild(c);let y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),B[t.id]||(B[t.id]={}),B[t.id].startLeft=o,Z(n,t.startLabelLeft)}if(t.startLabelRight){let c=R(t.startLabelRight,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=o.node().appendChild(c),h.node().appendChild(c);let y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),B[t.id]||(B[t.id]={}),B[t.id].startRight=o,Z(n,t.startLabelRight)}if(t.endLabelLeft){let c=R(t.endLabelLeft,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=h.node().appendChild(c);let y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),o.node().appendChild(c),B[t.id]||(B[t.id]={}),B[t.id].endLeft=o,Z(n,t.endLabelLeft)}if(t.endLabelRight){let c=R(t.endLabelRight,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=h.node().appendChild(c);let y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),o.node().appendChild(c),B[t.id]||(B[t.id]={}),B[t.id].endRight=o,Z(n,t.endLabelRight)}return i};function Z(e,t){b().flowchart.htmlLabels&&e&&(e.style.width=t.length*9+"px",e.style.height="12px")}var gr=(e,t)=>{g.debug("Moving label abc88 ",e.id,e.label,F[e.id],t);let a=t.updatedPath?t.updatedPath:t.originalPath,i=b(),{subGraphTitleTotalMargin:l}=tr(i);if(e.label){let r=F[e.id],s=e.x,n=e.y;if(a){let c=Y.calcLabelPosition(a);g.debug("Moving label "+e.label+" from (",s,",",n,") to (",c.x,",",c.y,") abc88"),t.updatedPath&&(s=c.x,n=c.y)}r.attr("transform",`translate(${s}, ${n+l/2})`)}if(e.startLabelLeft){let r=B[e.id].startLeft,s=e.x,n=e.y;if(a){let c=Y.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_left",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}if(e.startLabelRight){let r=B[e.id].startRight,s=e.x,n=e.y;if(a){let c=Y.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_right",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}if(e.endLabelLeft){let r=B[e.id].endLeft,s=e.x,n=e.y;if(a){let c=Y.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_left",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}if(e.endLabelRight){let r=B[e.id].endRight,s=e.x,n=e.y;if(a){let c=Y.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_right",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}},sr=(e,t)=>{let a=e.x,i=e.y,l=Math.abs(t.x-a),r=Math.abs(t.y-i),s=e.width/2,n=e.height/2;return l>=s||r>=n},ir=(e,t,a)=>{g.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(t)} + insidePoint : ${JSON.stringify(a)} + node : x:${e.x} y:${e.y} w:${e.width} h:${e.height}`);let i=e.x,l=e.y,r=Math.abs(i-a.x),s=e.width/2,n=a.xMath.abs(i-t.x)*c){let y=a.y{g.debug("abc88 cutPathAtIntersect",e,t);let a=[],i=e[0],l=!1;return e.forEach(r=>{if(!sr(t,r)&&!l){let s=ir(t,i,r),n=!1;a.forEach(c=>{n=n||c.x===s.x&&c.y===s.y}),a.some(c=>c.x===s.x&&c.y===s.y)||a.push(s),l=!0}else i=r,l||a.push(r)}),a},ur=function(e,t,a,i,l,r,s){let n=a.points;g.debug("abc88 InsertEdge: edge=",a,"e=",t);let c=!1,o=r.node(t.v);var h=r.node(t.w);h?.intersect&&o?.intersect&&(n=n.slice(1,a.points.length-1),n.unshift(o.intersect(n[0])),n.push(h.intersect(n[n.length-1]))),a.toCluster&&(g.debug("to cluster abc88",i[a.toCluster]),n=nt(a.points,i[a.toCluster].node),c=!0),a.fromCluster&&(g.debug("from cluster abc88",i[a.fromCluster]),n=nt(n.reverse(),i[a.fromCluster].node).reverse(),c=!0);let y=n.filter(C=>!Number.isNaN(C.y)),f=P;a.curve&&(l==="graph"||l==="flowchart")&&(f=a.curve);let{x:p,y:d}=rr(a),k=K().x(p).y(d).curve(f),x;switch(a.thickness){case"normal":x="edge-thickness-normal";break;case"thick":x="edge-thickness-thick";break;case"invisible":x="edge-thickness-thick";break;default:x=""}switch(a.pattern){case"solid":x+=" edge-pattern-solid";break;case"dotted":x+=" edge-pattern-dotted";break;case"dashed":x+=" edge-pattern-dashed";break}let u=e.append("path").attr("d",k(y)).attr("id",a.id).attr("class"," "+x+(a.classes?" "+a.classes:"")).attr("style",a.style),S="";(b().flowchart.arrowMarkerAbsolute||b().state.arrowMarkerAbsolute)&&(S=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,S=S.replace(/\(/g,"\\("),S=S.replace(/\)/g,"\\)")),ar(u,a,S,s,l);let E={};return c&&(E.updatedPath=n),E.originalPath=a.points,E};export{hr as a,R as b,M as c,m as d,Et as e,or as f,yr as g,pr as h,fr as i,tr as j,rr as k,ar as l,xr as m,dr as n,gr as o,ur as p}; +//# sourceMappingURL=chunk-N4EFGQ5G.min.js.map diff --git a/public/chunk-N4EFGQ5G.min.js.map b/public/chunk-N4EFGQ5G.min.js.map new file mode 100644 index 000000000..a46739876 --- /dev/null +++ b/public/chunk-N4EFGQ5G.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/mermaid/dist/edges-066a5561.js"], + "sourcesContent": ["import { l as log, m as evaluate, c as getConfig, M as decodeEntities, d as sanitizeText, u as utils } from \"./mermaid-6dc72991.js\";\nimport { select, line, curveBasis } from \"d3\";\nimport { a as createText } from \"./createText-ca0c5216.js\";\nconst insertMarkers = (elem, markerArray, type, id) => {\n markerArray.forEach((markerName) => {\n markers[markerName](elem, type, id);\n });\n};\nconst extension = (elem, type, id) => {\n log.trace(\"Making markers for \", id);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-extensionStart\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,7 L18,13 V 1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-extensionEnd\").attr(\"class\", \"marker extension \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 V 13 L18,7 Z\");\n};\nconst composition = (elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-compositionStart\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-compositionEnd\").attr(\"class\", \"marker composition \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n};\nconst aggregation = (elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-aggregationStart\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 18).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-aggregationEnd\").attr(\"class\", \"marker aggregation \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n};\nconst dependency = (elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-dependencyStart\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 6).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 5,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-dependencyEnd\").attr(\"class\", \"marker dependency \" + type).attr(\"refX\", 13).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n};\nconst lollipop = (elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-lollipopStart\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 13).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"transparent\").attr(\"cx\", 7).attr(\"cy\", 7).attr(\"r\", 6);\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-lollipopEnd\").attr(\"class\", \"marker lollipop \" + type).attr(\"refX\", 1).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"circle\").attr(\"stroke\", \"black\").attr(\"fill\", \"transparent\").attr(\"cx\", 7).attr(\"cy\", 7).attr(\"r\", 6);\n};\nconst point = (elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-pointEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 6).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 0 L 10 5 L 0 10 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-pointStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 4.5).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 12).attr(\"markerHeight\", 12).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 0 5 L 10 10 L 10 0 z\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n};\nconst circle$1 = (elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-circleEnd\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", 11).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-circleStart\").attr(\"class\", \"marker \" + type).attr(\"viewBox\", \"0 0 10 10\").attr(\"refX\", -1).attr(\"refY\", 5).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"circle\").attr(\"cx\", \"5\").attr(\"cy\", \"5\").attr(\"r\", \"5\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 1).style(\"stroke-dasharray\", \"1,0\");\n};\nconst cross = (elem, type, id) => {\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-crossEnd\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", 12).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n elem.append(\"marker\").attr(\"id\", id + \"_\" + type + \"-crossStart\").attr(\"class\", \"marker cross \" + type).attr(\"viewBox\", \"0 0 11 11\").attr(\"refX\", -1).attr(\"refY\", 5.2).attr(\"markerUnits\", \"userSpaceOnUse\").attr(\"markerWidth\", 11).attr(\"markerHeight\", 11).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 l 9,9 M 10,1 l -9,9\").attr(\"class\", \"arrowMarkerPath\").style(\"stroke-width\", 2).style(\"stroke-dasharray\", \"1,0\");\n};\nconst barb = (elem, type, id) => {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", id + \"_\" + type + \"-barbEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 14).attr(\"markerUnits\", \"strokeWidth\").attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 19,7 L9,13 L14,7 L9,1 Z\");\n};\nconst markers = {\n extension,\n composition,\n aggregation,\n dependency,\n lollipop,\n point,\n circle: circle$1,\n cross,\n barb\n};\nconst insertMarkers$1 = insertMarkers;\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr(\"style\", styleFn);\n }\n}\nfunction addHtmlLabel(node) {\n const fo = select(document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\"));\n const div = fo.append(\"xhtml:div\");\n const label = node.label;\n const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n div.html(\n '\" + label + \"\"\n );\n applyStyle(div, node.labelStyle);\n div.style(\"display\", \"inline-block\");\n div.style(\"white-space\", \"nowrap\");\n div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n return fo.node();\n}\nconst createLabel = (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || \"\";\n if (typeof vertexText === \"object\") {\n vertexText = vertexText[0];\n }\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n vertexText = vertexText.replace(/\\\\n|\\n/g, \"
\");\n log.debug(\"vertexText\" + vertexText);\n const node = {\n isNode,\n label: decodeEntities(vertexText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n // cspell: disable-line\n (s) => ``\n ),\n labelStyle: style.replace(\"fill:\", \"color:\")\n };\n let vertexNode = addHtmlLabel(node);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n svgLabel.setAttribute(\"style\", style.replace(\"color:\", \"fill:\"));\n let rows = [];\n if (typeof vertexText === \"string\") {\n rows = vertexText.split(/\\\\n|\\n|/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n for (const row of rows) {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n if (isTitle) {\n tspan.setAttribute(\"class\", \"title-row\");\n } else {\n tspan.setAttribute(\"class\", \"row\");\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n};\nconst createLabel$1 = createLabel;\nconst labelHelper = async (parent, node, _classes, isNode) => {\n let classes;\n const useHtmlLabels = node.useHtmlLabels || evaluate(getConfig().flowchart.htmlLabels);\n if (!_classes) {\n classes = \"node default\";\n } else {\n classes = _classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\").attr(\"style\", node.labelStyle);\n let labelText;\n if (node.labelText === void 0) {\n labelText = \"\";\n } else {\n labelText = typeof node.labelText === \"string\" ? node.labelText : node.labelText[0];\n }\n const textNode = label.node();\n let text;\n if (node.labelType === \"markdown\") {\n text = createText(label, sanitizeText(decodeEntities(labelText), getConfig()), {\n useHtmlLabels,\n width: node.width || getConfig().flowchart.wrappingWidth,\n classes: \"markdown-node-label\"\n });\n } else {\n text = textNode.appendChild(\n createLabel$1(\n sanitizeText(decodeEntities(labelText), getConfig()),\n node.labelStyle,\n false,\n isNode\n )\n );\n }\n let bbox = text.getBBox();\n const halfPadding = node.padding / 2;\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n const images = div.getElementsByTagName(\"img\");\n if (images) {\n const noImgText = labelText.replace(/]*>/g, \"\").trim() === \"\";\n await Promise.all(\n [...images].map(\n (img) => new Promise((res) => {\n function setupImage() {\n img.style.display = \"flex\";\n img.style.flexDirection = \"column\";\n if (noImgText) {\n const bodyFontSize = getConfig().fontSize ? getConfig().fontSize : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const width = parseInt(bodyFontSize, 10) * enlargingFactor + \"px\";\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = \"100%\";\n }\n res(img);\n }\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener(\"error\", setupImage);\n img.addEventListener(\"load\", setupImage);\n })\n )\n );\n }\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (useHtmlLabels) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n } else {\n label.attr(\"transform\", \"translate(0, \" + -bbox.height / 2 + \")\");\n }\n if (node.centerLabel) {\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n }\n label.insert(\"rect\", \":first-child\");\n return { shapeSvg, bbox, halfPadding, label };\n};\nconst updateNodeBounds = (node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n};\nfunction insertPolygonShape(parent, w, h, points) {\n return parent.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n ).attr(\"class\", \"label-container\").attr(\"transform\", \"translate(\" + -w / 2 + \",\" + h / 2 + \")\");\n}\nfunction intersectNode(node, point2) {\n return node.intersect(point2);\n}\nfunction intersectEllipse(node, rx, ry, point2) {\n var cx = node.x;\n var cy = node.y;\n var px = cx - point2.x;\n var py = cy - point2.y;\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n var dx = Math.abs(rx * ry * px / det);\n if (point2.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs(rx * ry * py / det);\n if (point2.y < cy) {\n dy = -dy;\n }\n return { x: cx + dx, y: cy + dy };\n}\nfunction intersectCircle(node, rx, point2) {\n return intersectEllipse(node, rx, rx, point2);\n}\nfunction intersectLine(p1, p2, q1, q2) {\n var a1, a2, b1, b2, c1, c2;\n var r1, r2, r3, r4;\n var denom, offset, num;\n var x, y;\n a1 = p2.y - p1.y;\n b1 = p1.x - p2.x;\n c1 = p2.x * p1.y - p1.x * p2.y;\n r3 = a1 * q1.x + b1 * q1.y + c1;\n r4 = a1 * q2.x + b1 * q2.y + c1;\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return;\n }\n a2 = q2.y - q1.y;\n b2 = q1.x - q2.x;\n c2 = q2.x * q1.y - q1.x * q2.y;\n r1 = a2 * p1.x + b2 * p1.y + c2;\n r2 = a2 * p2.x + b2 * p2.y + c2;\n if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {\n return;\n }\n denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return;\n }\n offset = Math.abs(denom / 2);\n num = b1 * c2 - b2 * c1;\n x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n num = a2 * c1 - a1 * c2;\n y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n return { x, y };\n}\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\nfunction intersectPolygon(node, polyPoints, point2) {\n var x1 = node.x;\n var y1 = node.y;\n var intersections = [];\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === \"function\") {\n polyPoints.forEach(function(entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n var left = x1 - node.width / 2 - minX;\n var top = y1 - node.height / 2 - minY;\n for (var i = 0; i < polyPoints.length; i++) {\n var p1 = polyPoints[i];\n var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n var intersect2 = intersectLine(\n node,\n point2,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect2) {\n intersections.push(intersect2);\n }\n }\n if (!intersections.length) {\n return node;\n }\n if (intersections.length > 1) {\n intersections.sort(function(p, q) {\n var pdx = p.x - point2.x;\n var pdy = p.y - point2.y;\n var distp = Math.sqrt(pdx * pdx + pdy * pdy);\n var qdx = q.x - point2.x;\n var qdy = q.y - point2.y;\n var distq = Math.sqrt(qdx * qdx + qdy * qdy);\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\nconst intersectRect = (node, point2) => {\n var x = node.x;\n var y = node.y;\n var dx = point2.x - x;\n var dy = point2.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : h * dx / dy;\n sy = h;\n } else {\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : w * dy / dx;\n }\n return { x: x + sx, y: y + sy };\n};\nconst intersectRect$1 = intersectRect;\nconst intersect = {\n node: intersectNode,\n circle: intersectCircle,\n ellipse: intersectEllipse,\n polygon: intersectPolygon,\n rect: intersectRect$1\n};\nconst note = async (parent, node) => {\n const useHtmlLabels = node.useHtmlLabels || getConfig().flowchart.htmlLabels;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n log.info(\"Classes = \", node.classes);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n rect2.attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst note$1 = note;\nconst expandAndDeduplicateDirections = (directions) => {\n const uniqueDirections = /* @__PURE__ */ new Set();\n for (const direction of directions) {\n switch (direction) {\n case \"x\":\n uniqueDirections.add(\"right\");\n uniqueDirections.add(\"left\");\n break;\n case \"y\":\n uniqueDirections.add(\"up\");\n uniqueDirections.add(\"down\");\n break;\n default:\n uniqueDirections.add(direction);\n break;\n }\n }\n return uniqueDirections;\n};\nconst getArrowPoints = (duplicatedDirections, bbox, node) => {\n const directions = expandAndDeduplicateDirections(duplicatedDirections);\n const f = 2;\n const height = bbox.height + 2 * node.padding;\n const midpoint = height / f;\n const width = bbox.width + 2 * midpoint + node.padding;\n const padding = node.padding / 2;\n if (directions.has(\"right\") && directions.has(\"left\") && directions.has(\"up\") && directions.has(\"down\")) {\n return [\n // Bottom\n { x: 0, y: 0 },\n { x: midpoint, y: 0 },\n { x: width / 2, y: 2 * padding },\n { x: width - midpoint, y: 0 },\n { x: width, y: 0 },\n // Right\n { x: width, y: -height / 3 },\n { x: width + 2 * padding, y: -height / 2 },\n { x: width, y: -2 * height / 3 },\n { x: width, y: -height },\n // Top\n { x: width - midpoint, y: -height },\n { x: width / 2, y: -height - 2 * padding },\n { x: midpoint, y: -height },\n // Left\n { x: 0, y: -height },\n { x: 0, y: -2 * height / 3 },\n { x: -2 * padding, y: -height / 2 },\n { x: 0, y: -height / 3 }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"left\") && directions.has(\"up\")) {\n return [\n { x: midpoint, y: 0 },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"left\") && directions.has(\"down\")) {\n return [\n { x: 0, y: 0 },\n { x: midpoint, y: -height },\n { x: width - midpoint, y: -height },\n { x: width, y: 0 }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"up\") && directions.has(\"down\")) {\n return [\n { x: 0, y: 0 },\n { x: width, y: -midpoint },\n { x: width, y: -height + midpoint },\n { x: 0, y: -height }\n ];\n }\n if (directions.has(\"left\") && directions.has(\"up\") && directions.has(\"down\")) {\n return [\n { x: width, y: 0 },\n { x: 0, y: -midpoint },\n { x: 0, y: -height + midpoint },\n { x: width, y: -height }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"left\")) {\n return [\n { x: midpoint, y: 0 },\n { x: midpoint, y: -padding },\n { x: width - midpoint, y: -padding },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: width - midpoint, y: -height + padding },\n { x: midpoint, y: -height + padding },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 }\n ];\n }\n if (directions.has(\"up\") && directions.has(\"down\")) {\n return [\n // Bottom center\n { x: width / 2, y: 0 },\n // Left pont of bottom arrow\n { x: 0, y: -padding },\n { x: midpoint, y: -padding },\n // Left top over vertical section\n { x: midpoint, y: -height + padding },\n { x: 0, y: -height + padding },\n // Top of arrow\n { x: width / 2, y: -height },\n { x: width, y: -height + padding },\n // Top of right vertical bar\n { x: width - midpoint, y: -height + padding },\n { x: width - midpoint, y: -padding },\n { x: width, y: -padding }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"up\")) {\n return [\n { x: 0, y: 0 },\n { x: width, y: -midpoint },\n { x: 0, y: -height }\n ];\n }\n if (directions.has(\"right\") && directions.has(\"down\")) {\n return [\n { x: 0, y: 0 },\n { x: width, y: 0 },\n { x: 0, y: -height }\n ];\n }\n if (directions.has(\"left\") && directions.has(\"up\")) {\n return [\n { x: width, y: 0 },\n { x: 0, y: -midpoint },\n { x: width, y: -height }\n ];\n }\n if (directions.has(\"left\") && directions.has(\"down\")) {\n return [\n { x: width, y: 0 },\n { x: 0, y: 0 },\n { x: width, y: -height }\n ];\n }\n if (directions.has(\"right\")) {\n return [\n { x: midpoint, y: -padding },\n { x: midpoint, y: -padding },\n { x: width - midpoint, y: -padding },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: width - midpoint, y: -height + padding },\n // top left corner of arrow\n { x: midpoint, y: -height + padding },\n { x: midpoint, y: -height + padding }\n ];\n }\n if (directions.has(\"left\")) {\n return [\n { x: midpoint, y: 0 },\n { x: midpoint, y: -padding },\n // Two points, the right corners\n { x: width - midpoint, y: -padding },\n { x: width - midpoint, y: -height + padding },\n { x: midpoint, y: -height + padding },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 }\n ];\n }\n if (directions.has(\"up\")) {\n return [\n // Bottom center\n { x: midpoint, y: -padding },\n // Left top over vertical section\n { x: midpoint, y: -height + padding },\n { x: 0, y: -height + padding },\n // Top of arrow\n { x: width / 2, y: -height },\n { x: width, y: -height + padding },\n // Top of right vertical bar\n { x: width - midpoint, y: -height + padding },\n { x: width - midpoint, y: -padding }\n ];\n }\n if (directions.has(\"down\")) {\n return [\n // Bottom center\n { x: width / 2, y: 0 },\n // Left pont of bottom arrow\n { x: 0, y: -padding },\n { x: midpoint, y: -padding },\n // Left top over vertical section\n { x: midpoint, y: -height + padding },\n { x: width - midpoint, y: -height + padding },\n { x: width - midpoint, y: -padding },\n { x: width, y: -padding }\n ];\n }\n return [{ x: 0, y: 0 }];\n};\nconst formatClass = (str) => {\n if (str) {\n return \" \" + str;\n }\n return \"\";\n};\nconst getClassesFromNode = (node, otherClasses) => {\n return `${otherClasses ? otherClasses : \"node default\"}${formatClass(node.classes)} ${formatClass(\n node.class\n )}`;\n};\nconst question = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ];\n log.info(\"Question main (Circle)\");\n const questionElem = insertPolygonShape(shapeSvg, s, s, points);\n questionElem.attr(\"style\", node.style);\n updateNodeBounds(node, questionElem);\n node.intersect = function(point2) {\n log.warn(\"Intersect called\");\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst choice = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const s = 28;\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 }\n ];\n const choice2 = shapeSvg.insert(\"polygon\", \":first-child\").attr(\n \"points\",\n points.map(function(d) {\n return d.x + \",\" + d.y;\n }).join(\" \")\n );\n choice2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 28).attr(\"height\", 28);\n node.width = 28;\n node.height = 28;\n node.intersect = function(point2) {\n return intersect.circle(node, 14, point2);\n };\n return shapeSvg;\n};\nconst hexagon = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const f = 4;\n const h = bbox.height + node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const hex = insertPolygonShape(shapeSvg, w, h, points);\n hex.attr(\"style\", node.style);\n updateNodeBounds(node, hex);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst block_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, void 0, true);\n const f = 2;\n const h = bbox.height + 2 * node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = getArrowPoints(node.directions, bbox, node);\n const blockArrow = insertPolygonShape(shapeSvg, w, h, points);\n blockArrow.attr(\"style\", node.style);\n updateNodeBounds(node, blockArrow);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst rect_left_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n node.width = w + h;\n node.height = h;\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst lean_right = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true);\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst lean_left = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 2 * h / 6, y: 0 },\n { x: w + h / 6, y: 0 },\n { x: w - 2 * h / 6, y: -h },\n { x: -h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -2 * h / 6, y: 0 },\n { x: w + 2 * h / 6, y: 0 },\n { x: w - h / 6, y: -h },\n { x: h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst inv_trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + 2 * h / 6, y: -h },\n { x: -2 * h / 6, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst rect_right_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst cylinder = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = bbox.height + ry + node.padding;\n const shape = \"M 0,\" + ry + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 a \" + rx + \",\" + ry + \" 0,0,0 \" + -w + \" 0 l 0,\" + h + \" a \" + rx + \",\" + ry + \" 0,0,0 \" + w + \" 0 l 0,\" + -h;\n const el = shapeSvg.attr(\"label-offset-y\", ry).insert(\"path\", \":first-child\").attr(\"style\", node.style).attr(\"d\", shape).attr(\"transform\", \"translate(\" + -w / 2 + \",\" + -(h / 2 + ry) + \")\");\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n const pos = intersect.rect(node, point2);\n const x = pos.x - node.x;\n if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) {\n let y = ry * ry * (1 - x * x / (rx * rx));\n if (y != 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point2.y - node.y > 0) {\n y = -y;\n }\n pos.y += y;\n }\n return pos;\n };\n return shapeSvg;\n};\nconst rect = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes + \" \" + node.class,\n true\n );\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = node.positioned ? node.width : bbox.width + node.padding;\n const totalHeight = node.positioned ? node.height : bbox.height + node.padding;\n const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;\n const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;\n rect2.attr(\"class\", \"basic label-container\").attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst composite = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n \"node \" + node.classes,\n true\n );\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = node.positioned ? node.width : bbox.width + node.padding;\n const totalHeight = node.positioned ? node.height : bbox.height + node.padding;\n const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;\n const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;\n rect2.attr(\"class\", \"basic cluster composite label-container\").attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"x\", x).attr(\"y\", y).attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst labelRect = async (parent, node) => {\n const { shapeSvg } = await labelHelper(parent, node, \"label\", true);\n log.trace(\"Classes = \", node.class);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const totalWidth = 0;\n const totalHeight = 0;\n rect2.attr(\"width\", totalWidth).attr(\"height\", totalHeight);\n shapeSvg.attr(\"class\", \"label edgeLabel\");\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);\n propKeys.delete(\"borders\");\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nfunction applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) {\n const strokeDashArray = [];\n const addBorder = (length) => {\n strokeDashArray.push(length, 0);\n };\n const skipBorder = (length) => {\n strokeDashArray.push(0, length);\n };\n if (borders.includes(\"t\")) {\n log.debug(\"add top border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"r\")) {\n log.debug(\"add right border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n if (borders.includes(\"b\")) {\n log.debug(\"add bottom border\");\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes(\"l\")) {\n log.debug(\"add left border\");\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n rect2.attr(\"stroke-dasharray\", strokeDashArray.join(\" \"));\n}\nconst rectWithTitle = (parent, node) => {\n let classes;\n if (!node.classes) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const innerLine = shapeSvg.insert(\"line\");\n const label = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText;\n let title = \"\";\n if (typeof text2 === \"object\") {\n title = text2[0];\n } else {\n title = text2;\n }\n log.info(\"Label text abc79\", title, text2, typeof text2 === \"object\");\n const text = label.node().appendChild(createLabel$1(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n log.info(\"Text 2\", text2);\n const textRows = text2.slice(1, text2.length);\n let titleBox = text.getBBox();\n const descr = label.node().appendChild(\n createLabel$1(textRows.join ? textRows.join(\"
\") : textRows, node.labelStyle, true, true)\n );\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = descr.children[0];\n const dv = select(descr);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n const halfPadding = node.padding / 2;\n select(descr).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + \", \" + (titleBox.height + halfPadding + 5) + \")\"\n );\n select(text).attr(\n \"transform\",\n \"translate( \" + // (titleBox.width - bbox.width) / 2 +\n (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + \", 0)\"\n );\n bbox = label.node().getBBox();\n label.attr(\n \"transform\",\n \"translate(\" + -bbox.width / 2 + \", \" + (-bbox.height / 2 - halfPadding + 3) + \")\"\n );\n rect2.attr(\"class\", \"outer title-state\").attr(\"x\", -bbox.width / 2 - halfPadding).attr(\"y\", -bbox.height / 2 - halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n innerLine.attr(\"class\", \"divider\").attr(\"x1\", -bbox.width / 2 - halfPadding).attr(\"x2\", bbox.width / 2 + halfPadding).attr(\"y1\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr(\"y2\", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst stadium = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\").attr(\"style\", node.style).attr(\"rx\", h / 2).attr(\"ry\", h / 2).attr(\"x\", -w / 2).attr(\"y\", -h / 2).attr(\"width\", w).attr(\"height\", h);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst circle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n log.info(\"Circle main\");\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n log.info(\"Circle intersect\", node, bbox.width / 2 + halfPadding, point2);\n return intersect.circle(node, bbox.width / 2 + halfPadding, point2);\n };\n return shapeSvg;\n};\nconst doublecircle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const gap = 5;\n const circleGroup = shapeSvg.insert(\"g\", \":first-child\");\n const outerCircle = circleGroup.insert(\"circle\");\n const innerCircle = circleGroup.insert(\"circle\");\n circleGroup.attr(\"class\", node.class);\n outerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding + gap).attr(\"width\", bbox.width + node.padding + gap * 2).attr(\"height\", bbox.height + node.padding + gap * 2);\n innerCircle.attr(\"style\", node.style).attr(\"rx\", node.rx).attr(\"ry\", node.ry).attr(\"r\", bbox.width / 2 + halfPadding).attr(\"width\", bbox.width + node.padding).attr(\"height\", bbox.height + node.padding);\n log.info(\"DoubleCircle main\");\n updateNodeBounds(node, outerCircle);\n node.intersect = function(point2) {\n log.info(\"DoubleCircle intersect\", node, bbox.width / 2 + halfPadding + gap, point2);\n return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2);\n };\n return shapeSvg;\n};\nconst subroutine = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, void 0),\n true\n );\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 }\n ];\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr(\"style\", node.style);\n updateNodeBounds(node, el);\n node.intersect = function(point2) {\n return intersect.polygon(node, points, point2);\n };\n return shapeSvg;\n};\nconst start = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n return intersect.circle(node, 7, point2);\n };\n return shapeSvg;\n};\nconst forkJoin = (parent, node, dir) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n let width = 70;\n let height = 10;\n if (dir === \"LR\") {\n width = 10;\n height = 70;\n }\n const shape = shapeSvg.append(\"rect\").attr(\"x\", -1 * width / 2).attr(\"y\", -1 * height / 2).attr(\"width\", width).attr(\"height\", height).attr(\"class\", \"fork-join\");\n updateNodeBounds(node, shape);\n node.height = node.height + node.padding / 2;\n node.width = node.width + node.padding / 2;\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst end = (parent, node) => {\n const shapeSvg = parent.insert(\"g\").attr(\"class\", \"node default\").attr(\"id\", node.domId || node.id);\n const innerCircle = shapeSvg.insert(\"circle\", \":first-child\");\n const circle2 = shapeSvg.insert(\"circle\", \":first-child\");\n circle2.attr(\"class\", \"state-start\").attr(\"r\", 7).attr(\"width\", 14).attr(\"height\", 14);\n innerCircle.attr(\"class\", \"state-end\").attr(\"r\", 5).attr(\"width\", 10).attr(\"height\", 10);\n updateNodeBounds(node, circle2);\n node.intersect = function(point2) {\n return intersect.circle(node, 7, point2);\n };\n return shapeSvg;\n};\nconst class_box = (parent, node) => {\n const halfPadding = node.padding / 2;\n const rowPadding = 4;\n const lineHeight = 8;\n let classes;\n if (!node.classes) {\n classes = \"node default\";\n } else {\n classes = \"node \" + node.classes;\n }\n const shapeSvg = parent.insert(\"g\").attr(\"class\", classes).attr(\"id\", node.domId || node.id);\n const rect2 = shapeSvg.insert(\"rect\", \":first-child\");\n const topLine = shapeSvg.insert(\"line\");\n const bottomLine = shapeSvg.insert(\"line\");\n let maxWidth = 0;\n let maxHeight = rowPadding;\n const labelContainer = shapeSvg.insert(\"g\").attr(\"class\", \"label\");\n let verticalPos = 0;\n const hasInterface = node.classData.annotations && node.classData.annotations[0];\n const interfaceLabelText = node.classData.annotations[0] ? \"\u00AB\" + node.classData.annotations[0] + \"\u00BB\" : \"\";\n const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true));\n let interfaceBBox = interfaceLabel.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = interfaceLabel.children[0];\n const dv = select(interfaceLabel);\n interfaceBBox = div.getBoundingClientRect();\n dv.attr(\"width\", interfaceBBox.width);\n dv.attr(\"height\", interfaceBBox.height);\n }\n if (node.classData.annotations[0]) {\n maxHeight += interfaceBBox.height + rowPadding;\n maxWidth += interfaceBBox.width;\n }\n let classTitleString = node.classData.label;\n if (node.classData.type !== void 0 && node.classData.type !== \"\") {\n if (getConfig().flowchart.htmlLabels) {\n classTitleString += \"<\" + node.classData.type + \">\";\n } else {\n classTitleString += \"<\" + node.classData.type + \">\";\n }\n }\n const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true));\n select(classTitleLabel).attr(\"class\", \"classTitle\");\n let classTitleBBox = classTitleLabel.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = classTitleLabel.children[0];\n const dv = select(classTitleLabel);\n classTitleBBox = div.getBoundingClientRect();\n dv.attr(\"width\", classTitleBBox.width);\n dv.attr(\"height\", classTitleBBox.height);\n }\n maxHeight += classTitleBBox.height + rowPadding;\n if (classTitleBBox.width > maxWidth) {\n maxWidth = classTitleBBox.width;\n }\n const classAttributes = [];\n node.classData.members.forEach((member) => {\n const parsedInfo = member.getDisplayDetails();\n let parsedText = parsedInfo.displayText;\n if (getConfig().flowchart.htmlLabels) {\n parsedText = parsedText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n createLabel$1(\n parsedText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classAttributes.push(lbl);\n });\n maxHeight += lineHeight;\n const classMethods = [];\n node.classData.methods.forEach((member) => {\n const parsedInfo = member.getDisplayDetails();\n let displayText = parsedInfo.displayText;\n if (getConfig().flowchart.htmlLabels) {\n displayText = displayText.replace(//g, \">\");\n }\n const lbl = labelContainer.node().appendChild(\n createLabel$1(\n displayText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classMethods.push(lbl);\n });\n maxHeight += lineHeight;\n if (hasInterface) {\n let diffX2 = (maxWidth - interfaceBBox.width) / 2;\n select(interfaceLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX2) + \", \" + -1 * maxHeight / 2 + \")\"\n );\n verticalPos = interfaceBBox.height + rowPadding;\n }\n let diffX = (maxWidth - classTitleBBox.width) / 2;\n select(classTitleLabel).attr(\n \"transform\",\n \"translate( \" + (-1 * maxWidth / 2 + diffX) + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n verticalPos += classTitleBBox.height + rowPadding;\n topLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classAttributes.forEach((lbl) => {\n select(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + \")\"\n );\n const memberBBox = lbl == null ? void 0 : lbl.getBBox();\n verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding;\n });\n verticalPos += lineHeight;\n bottomLine.attr(\"class\", \"divider\").attr(\"x1\", -maxWidth / 2 - halfPadding).attr(\"x2\", maxWidth / 2 + halfPadding).attr(\"y1\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr(\"y2\", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n verticalPos += lineHeight;\n classMethods.forEach((lbl) => {\n select(lbl).attr(\n \"transform\",\n \"translate( \" + -maxWidth / 2 + \", \" + (-1 * maxHeight / 2 + verticalPos) + \")\"\n );\n const memberBBox = lbl == null ? void 0 : lbl.getBBox();\n verticalPos += ((memberBBox == null ? void 0 : memberBBox.height) ?? 0) + rowPadding;\n });\n rect2.attr(\"style\", node.style).attr(\"class\", \"outer title-state\").attr(\"x\", -maxWidth / 2 - halfPadding).attr(\"y\", -(maxHeight / 2) - halfPadding).attr(\"width\", maxWidth + node.padding).attr(\"height\", maxHeight + node.padding);\n updateNodeBounds(node, rect2);\n node.intersect = function(point2) {\n return intersect.rect(node, point2);\n };\n return shapeSvg;\n};\nconst shapes = {\n rhombus: question,\n composite,\n question,\n rect,\n labelRect,\n rectWithTitle,\n choice,\n circle,\n doublecircle,\n stadium,\n hexagon,\n block_arrow,\n rect_left_inv_arrow,\n lean_right,\n lean_left,\n trapezoid,\n inv_trapezoid,\n rect_right_inv_arrow,\n cylinder,\n start,\n end,\n note: note$1,\n subroutine,\n fork: forkJoin,\n join: forkJoin,\n class_box\n};\nlet nodeElems = {};\nconst insertNode = async (elem, node, dir) => {\n let newEl;\n let el;\n if (node.link) {\n let target;\n if (getConfig().securityLevel === \"sandbox\") {\n target = \"_top\";\n } else if (node.linkTarget) {\n target = node.linkTarget || \"_blank\";\n }\n newEl = elem.insert(\"svg:a\").attr(\"xlink:href\", node.link).attr(\"target\", target);\n el = await shapes[node.shape](newEl, node, dir);\n } else {\n el = await shapes[node.shape](elem, node, dir);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr(\"title\", node.tooltip);\n }\n if (node.class) {\n el.attr(\"class\", \"node default \" + node.class);\n }\n newEl.attr(\"data-node\", \"true\");\n newEl.attr(\"data-id\", node.id);\n nodeElems[node.id] = newEl;\n if (node.haveCallback) {\n nodeElems[node.id].attr(\"class\", nodeElems[node.id].attr(\"class\") + \" clickable\");\n }\n return newEl;\n};\nconst setNodeElem = (elem, node) => {\n nodeElems[node.id] = elem;\n};\nconst clear$1 = () => {\n nodeElems = {};\n};\nconst positionNode = (node) => {\n const el = nodeElems[node.id];\n log.trace(\n \"Transforming node\",\n node.diff,\n node,\n \"translate(\" + (node.x - node.width / 2 - 5) + \", \" + node.width / 2 + \")\"\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n \"transform\",\n \"translate(\" + (node.x + diff - node.width / 2) + \", \" + (node.y - node.height / 2 - padding) + \")\"\n );\n } else {\n el.attr(\"transform\", \"translate(\" + node.x + \", \" + node.y + \")\");\n }\n return diff;\n};\nconst getSubGraphTitleMargins = ({\n flowchart\n}) => {\n var _a, _b;\n const subGraphTitleTopMargin = ((_a = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _a.top) ?? 0;\n const subGraphTitleBottomMargin = ((_b = flowchart == null ? void 0 : flowchart.subGraphTitleMargin) == null ? void 0 : _b.bottom) ?? 0;\n const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin;\n return {\n subGraphTitleTopMargin,\n subGraphTitleBottomMargin,\n subGraphTitleTotalMargin\n };\n};\nconst markerOffsets = {\n aggregation: 18,\n extension: 18,\n composition: 18,\n dependency: 6,\n lollipop: 13.5,\n arrow_point: 5.3\n};\nfunction calculateDeltaAndAngle(point1, point2) {\n if (point1 === void 0 || point2 === void 0) {\n return { angle: 0, deltaX: 0, deltaY: 0 };\n }\n point1 = pointTransformer(point1);\n point2 = pointTransformer(point2);\n const [x1, y1] = [point1.x, point1.y];\n const [x2, y2] = [point2.x, point2.y];\n const deltaX = x2 - x1;\n const deltaY = y2 - y1;\n return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY };\n}\nconst pointTransformer = (data) => {\n if (Array.isArray(data)) {\n return { x: data[0], y: data[1] };\n }\n return data;\n};\nconst getLineFunctionsWithOffset = (edge) => {\n return {\n x: function(d, i, data) {\n let offset = 0;\n if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {\n const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]);\n offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1);\n } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) {\n const { angle, deltaX } = calculateDeltaAndAngle(\n data[data.length - 1],\n data[data.length - 2]\n );\n offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle) * (deltaX >= 0 ? 1 : -1);\n }\n return pointTransformer(d).x + offset;\n },\n y: function(d, i, data) {\n let offset = 0;\n if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {\n const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]);\n offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1);\n } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) {\n const { angle, deltaY } = calculateDeltaAndAngle(\n data[data.length - 1],\n data[data.length - 2]\n );\n offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle)) * (deltaY >= 0 ? 1 : -1);\n }\n return pointTransformer(d).y + offset;\n }\n };\n};\nconst addEdgeMarkers = (svgPath, edge, url, id, diagramType) => {\n if (edge.arrowTypeStart) {\n addEdgeMarker(svgPath, \"start\", edge.arrowTypeStart, url, id, diagramType);\n }\n if (edge.arrowTypeEnd) {\n addEdgeMarker(svgPath, \"end\", edge.arrowTypeEnd, url, id, diagramType);\n }\n};\nconst arrowTypesMap = {\n arrow_cross: \"cross\",\n arrow_point: \"point\",\n arrow_barb: \"barb\",\n arrow_circle: \"circle\",\n aggregation: \"aggregation\",\n extension: \"extension\",\n composition: \"composition\",\n dependency: \"dependency\",\n lollipop: \"lollipop\"\n};\nconst addEdgeMarker = (svgPath, position, arrowType, url, id, diagramType) => {\n const endMarkerType = arrowTypesMap[arrowType];\n if (!endMarkerType) {\n log.warn(`Unknown arrow type: ${arrowType}`);\n return;\n }\n const suffix = position === \"start\" ? \"Start\" : \"End\";\n svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`);\n};\nlet edgeLabels = {};\nlet terminalLabels = {};\nconst clear = () => {\n edgeLabels = {};\n terminalLabels = {};\n};\nconst insertEdgeLabel = (elem, edge) => {\n const useHtmlLabels = evaluate(getConfig().flowchart.htmlLabels);\n const labelElement = edge.labelType === \"markdown\" ? createText(elem, edge.label, {\n style: edge.labelStyle,\n useHtmlLabels,\n addSvgBackground: true\n }) : createLabel$1(edge.label, edge.labelStyle);\n const edgeLabel = elem.insert(\"g\").attr(\"class\", \"edgeLabel\");\n const label = edgeLabel.insert(\"g\").attr(\"class\", \"label\");\n label.node().appendChild(labelElement);\n let bbox = labelElement.getBBox();\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = select(labelElement);\n bbox = div.getBoundingClientRect();\n dv.attr(\"width\", bbox.width);\n dv.attr(\"height\", bbox.height);\n }\n label.attr(\"transform\", \"translate(\" + -bbox.width / 2 + \", \" + -bbox.height / 2 + \")\");\n edgeLabels[edge.id] = edgeLabel;\n edge.width = bbox.width;\n edge.height = bbox.height;\n let fo;\n if (edge.startLabelLeft) {\n const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle);\n const startEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startLeft = startEdgeLabelLeft;\n setTerminalWidth(fo, edge.startLabelLeft);\n }\n if (edge.startLabelRight) {\n const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle);\n const startEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = startEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startRight = startEdgeLabelRight;\n setTerminalWidth(fo, edge.startLabelRight);\n }\n if (edge.endLabelLeft) {\n const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle);\n const endEdgeLabelLeft = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelLeft.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelLeft.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endLeft = endEdgeLabelLeft;\n setTerminalWidth(fo, edge.endLabelLeft);\n }\n if (edge.endLabelRight) {\n const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle);\n const endEdgeLabelRight = elem.insert(\"g\").attr(\"class\", \"edgeTerminals\");\n const inner = endEdgeLabelRight.insert(\"g\").attr(\"class\", \"inner\");\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr(\"transform\", \"translate(\" + -slBox.width / 2 + \", \" + -slBox.height / 2 + \")\");\n endEdgeLabelRight.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endRight = endEdgeLabelRight;\n setTerminalWidth(fo, edge.endLabelRight);\n }\n return labelElement;\n};\nfunction setTerminalWidth(fo, value) {\n if (getConfig().flowchart.htmlLabels && fo) {\n fo.style.width = value.length * 9 + \"px\";\n fo.style.height = \"12px\";\n }\n}\nconst positionEdgeLabel = (edge, paths) => {\n log.debug(\"Moving label abc88 \", edge.id, edge.label, edgeLabels[edge.id], paths);\n let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n const siteConfig = getConfig();\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n if (edge.label) {\n const el = edgeLabels[edge.id];\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcLabelPosition(path);\n log.debug(\n \"Moving label \" + edge.label + \" from (\",\n x,\n \",\",\n y,\n \") to (\",\n pos.x,\n \",\",\n pos.y,\n \") abc88\"\n );\n if (paths.updatedPath) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr(\"transform\", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`);\n }\n if (edge.startLabelLeft) {\n const el = terminalLabels[edge.id].startLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, \"start_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.startLabelRight) {\n const el = terminalLabels[edge.id].startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n \"start_right\",\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels[edge.id].endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelRight) {\n const el = terminalLabels[edge.id].endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_right\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n};\nconst outsideNode = (node, point2) => {\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(point2.x - x);\n const dy = Math.abs(point2.y - y);\n const w = node.width / 2;\n const h = node.height / 2;\n if (dx >= w || dy >= h) {\n return true;\n }\n return false;\n};\nconst intersection = (node, outsidePoint, insidePoint) => {\n log.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(outsidePoint)}\n insidePoint : ${JSON.stringify(insidePoint)}\n node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(x - insidePoint.x);\n const w = node.width / 2;\n let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n const h = node.height / 2;\n const Q = Math.abs(outsidePoint.y - insidePoint.y);\n const R = Math.abs(outsidePoint.x - insidePoint.x);\n if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) {\n let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n r = R * q / Q;\n const res = {\n x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q\n };\n if (r === 0) {\n res.x = outsidePoint.x;\n res.y = outsidePoint.y;\n }\n if (R === 0) {\n res.x = outsidePoint.x;\n }\n if (Q === 0) {\n res.y = outsidePoint.y;\n }\n log.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);\n return res;\n } else {\n if (insidePoint.x < outsidePoint.x) {\n r = outsidePoint.x - w - x;\n } else {\n r = x - w - outsidePoint.x;\n }\n let q = Q * r / R;\n let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n log.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n if (r === 0) {\n _x = outsidePoint.x;\n _y = outsidePoint.y;\n }\n if (R === 0) {\n _x = outsidePoint.x;\n }\n if (Q === 0) {\n _y = outsidePoint.y;\n }\n return { x: _x, y: _y };\n }\n};\nconst cutPathAtIntersect = (_points, boundaryNode) => {\n log.debug(\"abc88 cutPathAtIntersect\", _points, boundaryNode);\n let points = [];\n let lastPointOutside = _points[0];\n let isInside = false;\n _points.forEach((point2) => {\n if (!outsideNode(boundaryNode, point2) && !isInside) {\n const inter = intersection(boundaryNode, lastPointOutside, point2);\n let pointPresent = false;\n points.forEach((p) => {\n pointPresent = pointPresent || p.x === inter.x && p.y === inter.y;\n });\n if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {\n points.push(inter);\n }\n isInside = true;\n } else {\n lastPointOutside = point2;\n if (!isInside) {\n points.push(point2);\n }\n }\n });\n return points;\n};\nconst insertEdge = function(elem, e, edge, clusterDb, diagramType, graph, id) {\n let points = edge.points;\n log.debug(\"abc88 InsertEdge: edge=\", edge, \"e=\", e);\n let pointsHasChanged = false;\n const tail = graph.node(e.v);\n var head = graph.node(e.w);\n if ((head == null ? void 0 : head.intersect) && (tail == null ? void 0 : tail.intersect)) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n points.push(head.intersect(points[points.length - 1]));\n }\n if (edge.toCluster) {\n log.debug(\"to cluster abc88\", clusterDb[edge.toCluster]);\n points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node);\n pointsHasChanged = true;\n }\n if (edge.fromCluster) {\n log.debug(\"from cluster abc88\", clusterDb[edge.fromCluster]);\n points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse();\n pointsHasChanged = true;\n }\n const lineData = points.filter((p) => !Number.isNaN(p.y));\n let curve = curveBasis;\n if (edge.curve && (diagramType === \"graph\" || diagramType === \"flowchart\")) {\n curve = edge.curve;\n }\n const { x, y } = getLineFunctionsWithOffset(edge);\n const lineFunction = line().x(x).y(y).curve(curve);\n let strokeClasses;\n switch (edge.thickness) {\n case \"normal\":\n strokeClasses = \"edge-thickness-normal\";\n break;\n case \"thick\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n case \"invisible\":\n strokeClasses = \"edge-thickness-thick\";\n break;\n default:\n strokeClasses = \"\";\n }\n switch (edge.pattern) {\n case \"solid\":\n strokeClasses += \" edge-pattern-solid\";\n break;\n case \"dotted\":\n strokeClasses += \" edge-pattern-dotted\";\n break;\n case \"dashed\":\n strokeClasses += \" edge-pattern-dashed\";\n break;\n }\n const svgPath = elem.append(\"path\").attr(\"d\", lineFunction(lineData)).attr(\"id\", edge.id).attr(\"class\", \" \" + strokeClasses + (edge.classes ? \" \" + edge.classes : \"\")).attr(\"style\", edge.style);\n let url = \"\";\n if (getConfig().flowchart.arrowMarkerAbsolute || getConfig().state.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n addEdgeMarkers(svgPath, edge, url, id, diagramType);\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n};\nexport {\n insertMarkers$1 as a,\n clear$1 as b,\n createLabel$1 as c,\n clear as d,\n insertNode as e,\n insertEdgeLabel as f,\n getSubGraphTitleMargins as g,\n insertEdge as h,\n intersectRect$1 as i,\n positionEdgeLabel as j,\n getLineFunctionsWithOffset as k,\n labelHelper as l,\n addEdgeMarkers as m,\n positionNode as p,\n setNodeElem as s,\n updateNodeBounds as u\n};\n"], + "mappings": "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", + "names": ["insertMarkers", "elem", "markerArray", "type", "id", "markerName", "markers", "extension", "log$1", "composition", "aggregation", "dependency", "lollipop", "point", "circle$1", "cross", "barb", "insertMarkers$1", "applyStyle", "dom", "styleFn", "addHtmlLabel", "node", "fo", "select_default", "div", "label", "labelClass", "createLabel", "_vertexText", "style", "isTitle", "isNode", "vertexText", "evaluate", "getConfig", "decodeEntities", "s", "svgLabel", "rows", "row", "tspan", "createLabel$1", "labelHelper", "parent", "_classes", "classes", "useHtmlLabels", "shapeSvg", "labelText", "textNode", "text", "createText", "sanitizeText$2", "bbox", "halfPadding", "dv", "images", "noImgText", "img", "res", "setupImage", "bodyFontSize", "width", "updateNodeBounds", "element", "insertPolygonShape", "w", "h", "points", "d", "intersectNode", "point2", "intersectEllipse", "rx", "ry", "cx", "cy", "px", "py", "det", "dx", "dy", "intersectCircle", "intersectLine", "p1", "p2", "q1", "q2", "a1", "a2", "b1", "b2", "c1", "c2", "r1", "r2", "r3", "r4", "denom", "offset", "num", "x", "y", "sameSign", "intersectPolygon", "polyPoints", "x1", "y1", "intersections", "minX", "minY", "entry", "left", "top", "i", "intersect2", "p", "q", "pdx", "pdy", "distp", "qdx", "qdy", "distq", "intersectRect", "sx", "sy", "intersectRect$1", "intersect", "note", "rect2", "note$1", "expandAndDeduplicateDirections", "directions", "uniqueDirections", "direction", "getArrowPoints", "duplicatedDirections", "f", "height", "midpoint", "padding", "formatClass", "str", "getClassesFromNode", "otherClasses", "question", "questionElem", "choice", "hexagon", "m", "hex", "block_arrow", "blockArrow", "rect_left_inv_arrow", "lean_right", "el", "lean_left", "trapezoid", "inv_trapezoid", "rect_right_inv_arrow", "cylinder", "shape", "pos", "rect", "totalWidth", "totalHeight", "propKeys", "applyNodePropertyBorders", "propKey", "composite", "labelRect", "borders", "strokeDashArray", "addBorder", "length", "skipBorder", "rectWithTitle", "innerLine", "text2", "title", "textRows", "titleBox", "descr", "stadium", "circle", "circle2", "doublecircle", "gap", "circleGroup", "outerCircle", "innerCircle", "subroutine", "start", "forkJoin", "dir", "end", "class_box", "rowPadding", "lineHeight", "topLine", "bottomLine", "maxWidth", "maxHeight", "labelContainer", "verticalPos", "hasInterface", "interfaceLabelText", "interfaceLabel", "interfaceBBox", "classTitleString", "classTitleLabel", "classTitleBBox", "classAttributes", "member", "parsedInfo", "parsedText", "lbl", "classMethods", "displayText", "diffX2", "diffX", "memberBBox", "shapes", "nodeElems", "insertNode", "newEl", "target", "setNodeElem", "clear$1", "positionNode", "diff", "getSubGraphTitleMargins", "flowchart", "_a", "_b", "subGraphTitleTopMargin", "subGraphTitleBottomMargin", "subGraphTitleTotalMargin", "markerOffsets", "calculateDeltaAndAngle", "point1", "pointTransformer", "x2", "y2", "deltaX", "deltaY", "data", "getLineFunctionsWithOffset", "edge", "angle", "addEdgeMarkers", "svgPath", "url", "diagramType", "addEdgeMarker", "arrowTypesMap", "position", "arrowType", "endMarkerType", "suffix", "edgeLabels", "terminalLabels", "clear", "insertEdgeLabel", "labelElement", "edgeLabel", "startLabelElement", "startEdgeLabelLeft", "inner", "slBox", "setTerminalWidth", "startEdgeLabelRight", "endLabelElement", "endEdgeLabelLeft", "endEdgeLabelRight", "value", "positionEdgeLabel", "paths", "path", "siteConfig", "utils", "outsideNode", "intersection", "outsidePoint", "insidePoint", "r", "Q", "R", "_x", "_y", "cutPathAtIntersect", "_points", "boundaryNode", "lastPointOutside", "isInside", "inter", "pointPresent", "e", "insertEdge", "clusterDb", "graph", "pointsHasChanged", "tail", "head", "lineData", "curve", "basis_default", "lineFunction", "line_default", "strokeClasses"] +} diff --git a/public/chunk-NRE4YRK7.min.js b/public/chunk-NRE4YRK7.min.js new file mode 100644 index 000000000..3f4c23217 --- /dev/null +++ b/public/chunk-NRE4YRK7.min.js @@ -0,0 +1,22 @@ +import{b as k}from"./chunk-XUHMPXWX.min.js";var v=k((h,j)=>{(function(e,n){typeof define=="function"&&define.amd?define(n):typeof h=="object"?j.exports=n():n()(e.lunr)})(h,function(){return function(e){if(typeof e>"u")throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(typeof e.stemmerSupport>"u")throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var n=e.version[0]=="2";e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),n?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var F=new e.TinySegmenter;e.ja.tokenizer=function(s){var t,i,f,o,a,d,g,p,r,c;if(!arguments.length||s==null||s==null)return[];if(Array.isArray(s))return s.map(function(m){return n?new e.Token(m.toLowerCase()):m.toLowerCase()});for(i=s.toString().toLowerCase().replace(/^\s+/,""),t=i.length-1;t>=0;t--)if(/\S/.test(i.charAt(t))){i=i.substring(0,t+1);break}for(a=[],f=i.length,r=0,p=0;r<=f;r++)if(d=i.charAt(r),g=r-p,d.match(/\s/)||r==f){if(g>0)for(o=F.segment(i.slice(p,r)).filter(function(m){return!!m}),c=p,t=0;t 1.0.0\n this.tokenizerFn = lunr.ja.tokenizer;\n }\n }\n };\n var segmenter = new lunr.TinySegmenter(); // \u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u751F\u6210\n\n lunr.ja.tokenizer = function(obj) {\n var i;\n var str;\n var len;\n var segs;\n var tokens;\n var char;\n var sliceLength;\n var sliceStart;\n var sliceEnd;\n var segStart;\n\n if (!arguments.length || obj == null || obj == undefined)\n return [];\n\n if (Array.isArray(obj)) {\n return obj.map(\n function(t) {\n return isLunr2 ? new lunr.Token(t.toLowerCase()) : t.toLowerCase();\n }\n );\n }\n\n str = obj.toString().toLowerCase().replace(/^\\s+/, '');\n for (i = str.length - 1; i >= 0; i--) {\n if (/\\S/.test(str.charAt(i))) {\n str = str.substring(0, i + 1);\n break;\n }\n }\n\n tokens = [];\n len = str.length;\n for (sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {\n char = str.charAt(sliceEnd);\n sliceLength = sliceEnd - sliceStart;\n\n if ((char.match(/\\s/) || sliceEnd == len)) {\n if (sliceLength > 0) {\n segs = segmenter.segment(str.slice(sliceStart, sliceEnd)).filter(\n function(token) {\n return !!token;\n }\n );\n\n segStart = sliceStart;\n for (i = 0; i < segs.length; i++) {\n if (isLunr2) {\n tokens.push(\n new lunr.Token(\n segs[i], {\n position: [segStart, segs[i].length],\n index: tokens.length\n }\n )\n );\n } else {\n tokens.push(segs[i]);\n }\n segStart += segs[i].length;\n }\n }\n\n sliceStart = sliceEnd + 1;\n }\n }\n\n return tokens;\n }\n\n /* lunr stemmer function */\n lunr.ja.stemmer = (function() {\n\n /* TODO japanese stemmer */\n return function(word) {\n return word;\n }\n })();\n lunr.Pipeline.registerFunction(lunr.ja.stemmer, 'stemmer-ja');\n\n /* lunr trimmer function */\n lunr.ja.wordCharacters = \"\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03\u516B\u4E5D\u5341\u767E\u5343\u4E07\u5104\u5146\u4E00-\u9FA0\u3005\u3006\u30F5\u30F6\u3041-\u3093\u30A1-\u30F4\u30FC\uFF71-\uFF9D\uFF9Ea-zA-Z\uFF41-\uFF5A\uFF21-\uFF3A0-9\uFF10-\uFF19\";\n lunr.ja.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.ja.wordCharacters);\n lunr.Pipeline.registerFunction(lunr.ja.trimmer, 'trimmer-ja');\n\n /* lunr stop word filter. see http://www.ranks.nl/stopwords/japanese */\n lunr.ja.stopWordFilter = lunr.generateStopWordFilter(\n '\u3053\u308C \u305D\u308C \u3042\u308C \u3053\u306E \u305D\u306E \u3042\u306E \u3053\u3053 \u305D\u3053 \u3042\u305D\u3053 \u3053\u3061\u3089 \u3069\u3053 \u3060\u308C \u306A\u306B \u306A\u3093 \u4F55 \u79C1 \u8CB4\u65B9 \u8CB4\u65B9\u65B9 \u6211\u3005 \u79C1\u9054 \u3042\u306E\u4EBA \u3042\u306E\u304B\u305F \u5F7C\u5973 \u5F7C \u3067\u3059 \u3042\u308A\u307E\u3059 \u304A\u308A\u307E\u3059 \u3044\u307E\u3059 \u306F \u304C \u306E \u306B \u3092 \u3067 \u3048 \u304B\u3089 \u307E\u3067 \u3088\u308A \u3082 \u3069\u306E \u3068 \u3057 \u305D\u308C\u3067 \u3057\u304B\u3057'.split(' '));\n lunr.Pipeline.registerFunction(lunr.ja.stopWordFilter, 'stopWordFilter-ja');\n\n // alias ja => jp for backward-compatibility.\n // jp is the country code, while ja is the language code\n // a new lunr.ja.js has been created, but in order to\n // keep the backward compatibility, we'll leave the lunr.jp.js\n // here for a while, and just make it use the new lunr.ja.js\n lunr.jp = lunr.ja;\n lunr.Pipeline.registerFunction(lunr.jp.stemmer, 'stemmer-jp');\n lunr.Pipeline.registerFunction(lunr.jp.trimmer, 'trimmer-jp');\n lunr.Pipeline.registerFunction(lunr.jp.stopWordFilter, 'stopWordFilter-jp');\n };\n}))"], + "mappings": "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", + "names": ["require_lunr_ja", "__commonJSMin", "exports", "module", "root", "factory", "lunr", "isLunr2", "segmenter", "obj", "i", "str", "len", "segs", "tokens", "char", "sliceLength", "sliceStart", "sliceEnd", "segStart", "t", "token", "word"] +} diff --git a/public/chunk-QRBMAIWT.min.js b/public/chunk-QRBMAIWT.min.js new file mode 100644 index 000000000..08a1c966b --- /dev/null +++ b/public/chunk-QRBMAIWT.min.js @@ -0,0 +1,161 @@ +import{Ga as qe,Ia as He,Ka as he,Oa as N,ab as we,fb as We,gb as Je,h as M,hb as Ze,ib as $e,jb as et,kb as tt,lb as st,nb as F}from"./chunk-YEACHCAA.min.js";var Pe=function(){var e=function(x,u,a,h){for(a=a||{},h=x.length;h--;a[x[h]]=u);return a},i=[1,17],r=[1,18],l=[1,19],o=[1,39],A=[1,40],g=[1,25],D=[1,23],B=[1,24],_=[1,31],Ee=[1,32],Ce=[1,33],me=[1,34],be=[1,35],ge=[1,36],ke=[1,26],Te=[1,27],Fe=[1,28],ye=[1,29],d=[1,43],De=[1,30],E=[1,42],C=[1,44],m=[1,41],k=[1,45],Be=[1,9],c=[1,8,9],Y=[1,56],Q=[1,57],j=[1,58],X=[1,59],q=[1,60],_e=[1,61],Se=[1,62],H=[1,8,9,39],ze=[1,74],G=[1,8,9,12,13,21,37,39,42,59,60,61,62,63,64,65,70,72],W=[1,8,9,12,13,19,21,37,39,42,46,59,60,61,62,63,64,65,70,72,74,80,95,97,98],J=[13,74,80,95,97,98],U=[13,64,65,74,80,95,97,98],Ke=[13,59,60,61,62,63,74,80,95,97,98],Ne=[1,93],Z=[1,110],$=[1,108],ee=[1,102],te=[1,103],se=[1,104],ie=[1,105],ne=[1,106],ue=[1,107],re=[1,109],Le=[1,8,9,37,39,42],ae=[1,8,9,21],Ye=[1,8,9,78],S=[1,8,9,21,73,74,78,80,81,82,83,84,85],ve={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,styleStatement:27,cssClassStatement:28,noteStatement:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,namespaceIdentifier:36,STRUCT_START:37,classStatements:38,STRUCT_STOP:39,NAMESPACE:40,classIdentifier:41,STYLE_SEPARATOR:42,members:43,CLASS:44,ANNOTATION_START:45,ANNOTATION_END:46,MEMBER:47,SEPARATOR:48,relation:49,NOTE_FOR:50,noteText:51,NOTE:52,direction_tb:53,direction_bt:54,direction_rl:55,direction_lr:56,relationType:57,lineType:58,AGGREGATION:59,EXTENSION:60,COMPOSITION:61,DEPENDENCY:62,LOLLIPOP:63,LINE:64,DOTTED_LINE:65,CALLBACK:66,LINK:67,LINK_TARGET:68,CLICK:69,CALLBACK_NAME:70,CALLBACK_ARGS:71,HREF:72,STYLE:73,ALPHA:74,stylesOpt:75,CSSCLASS:76,style:77,COMMA:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,commentToken:86,textToken:87,graphCodeTokens:88,textNoTagsToken:89,TAGSTART:90,TAGEND:91,"==":92,"--":93,DEFAULT:94,MINUS:95,keywords:96,UNICODE_TEXT:97,BQUOTE_STR:98,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",37:"STRUCT_START",39:"STRUCT_STOP",40:"NAMESPACE",42:"STYLE_SEPARATOR",44:"CLASS",45:"ANNOTATION_START",46:"ANNOTATION_END",47:"MEMBER",48:"SEPARATOR",50:"NOTE_FOR",52:"NOTE",53:"direction_tb",54:"direction_bt",55:"direction_rl",56:"direction_lr",59:"AGGREGATION",60:"EXTENSION",61:"COMPOSITION",62:"DEPENDENCY",63:"LOLLIPOP",64:"LINE",65:"DOTTED_LINE",66:"CALLBACK",67:"LINK",68:"LINK_TARGET",69:"CLICK",70:"CALLBACK_NAME",71:"CALLBACK_ARGS",72:"HREF",73:"STYLE",74:"ALPHA",76:"CSSCLASS",78:"COMMA",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",88:"graphCodeTokens",90:"TAGSTART",91:"TAGEND",92:"==",93:"--",94:"DEFAULT",95:"MINUS",96:"keywords",97:"UNICODE_TEXT",98:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[36,2],[38,1],[38,2],[38,3],[23,1],[23,3],[23,4],[23,6],[41,2],[41,3],[25,4],[43,1],[43,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[29,3],[29,2],[30,1],[30,1],[30,1],[30,1],[49,3],[49,2],[49,2],[49,1],[57,1],[57,1],[57,1],[57,1],[57,1],[58,1],[58,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[28,3],[75,1],[75,3],[77,1],[77,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[86,1],[86,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[89,1],[89,1],[89,1],[89,1],[16,1],[16,1],[16,1],[16,1],[18,1],[51,1]],performAction:function(u,a,h,n,f,t,z){var s=t.length-1;switch(f){case 8:this.$=t[s-1];break;case 9:case 11:case 12:this.$=t[s];break;case 10:case 13:this.$=t[s-1]+t[s];break;case 14:case 15:this.$=t[s-1]+"~"+t[s]+"~";break;case 16:n.addRelation(t[s]);break;case 17:t[s-1].title=n.cleanupLabel(t[s]),n.addRelation(t[s-1]);break;case 27:this.$=t[s].trim(),n.setAccTitle(this.$);break;case 28:case 29:this.$=t[s].trim(),n.setAccDescription(this.$);break;case 30:n.addClassesToNamespace(t[s-3],t[s-1]);break;case 31:n.addClassesToNamespace(t[s-4],t[s-1]);break;case 32:this.$=t[s],n.addNamespace(t[s]);break;case 33:this.$=[t[s]];break;case 34:this.$=[t[s-1]];break;case 35:t[s].unshift(t[s-2]),this.$=t[s];break;case 37:n.setCssClass(t[s-2],t[s]);break;case 38:n.addMembers(t[s-3],t[s-1]);break;case 39:n.setCssClass(t[s-5],t[s-3]),n.addMembers(t[s-5],t[s-1]);break;case 40:this.$=t[s],n.addClass(t[s]);break;case 41:this.$=t[s-1],n.addClass(t[s-1]),n.setClassLabel(t[s-1],t[s]);break;case 42:n.addAnnotation(t[s],t[s-2]);break;case 43:this.$=[t[s]];break;case 44:t[s].push(t[s-1]),this.$=t[s];break;case 45:break;case 46:n.addMember(t[s-1],n.cleanupLabel(t[s]));break;case 47:break;case 48:break;case 49:this.$={id1:t[s-2],id2:t[s],relation:t[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:t[s-3],id2:t[s],relation:t[s-1],relationTitle1:t[s-2],relationTitle2:"none"};break;case 51:this.$={id1:t[s-3],id2:t[s],relation:t[s-2],relationTitle1:"none",relationTitle2:t[s-1]};break;case 52:this.$={id1:t[s-4],id2:t[s],relation:t[s-2],relationTitle1:t[s-3],relationTitle2:t[s-1]};break;case 53:n.addNote(t[s],t[s-1]);break;case 54:n.addNote(t[s]);break;case 55:n.setDirection("TB");break;case 56:n.setDirection("BT");break;case 57:n.setDirection("RL");break;case 58:n.setDirection("LR");break;case 59:this.$={type1:t[s-2],type2:t[s],lineType:t[s-1]};break;case 60:this.$={type1:"none",type2:t[s],lineType:t[s-1]};break;case 61:this.$={type1:t[s-1],type2:"none",lineType:t[s]};break;case 62:this.$={type1:"none",type2:"none",lineType:t[s]};break;case 63:this.$=n.relationType.AGGREGATION;break;case 64:this.$=n.relationType.EXTENSION;break;case 65:this.$=n.relationType.COMPOSITION;break;case 66:this.$=n.relationType.DEPENDENCY;break;case 67:this.$=n.relationType.LOLLIPOP;break;case 68:this.$=n.lineType.LINE;break;case 69:this.$=n.lineType.DOTTED_LINE;break;case 70:case 76:this.$=t[s-2],n.setClickEvent(t[s-1],t[s]);break;case 71:case 77:this.$=t[s-3],n.setClickEvent(t[s-2],t[s-1]),n.setTooltip(t[s-2],t[s]);break;case 72:this.$=t[s-2],n.setLink(t[s-1],t[s]);break;case 73:this.$=t[s-3],n.setLink(t[s-2],t[s-1],t[s]);break;case 74:this.$=t[s-3],n.setLink(t[s-2],t[s-1]),n.setTooltip(t[s-2],t[s]);break;case 75:this.$=t[s-4],n.setLink(t[s-3],t[s-2],t[s]),n.setTooltip(t[s-3],t[s-1]);break;case 78:this.$=t[s-3],n.setClickEvent(t[s-2],t[s-1],t[s]);break;case 79:this.$=t[s-4],n.setClickEvent(t[s-3],t[s-2],t[s-1]),n.setTooltip(t[s-3],t[s]);break;case 80:this.$=t[s-3],n.setLink(t[s-2],t[s]);break;case 81:this.$=t[s-4],n.setLink(t[s-3],t[s-1],t[s]);break;case 82:this.$=t[s-4],n.setLink(t[s-3],t[s-1]),n.setTooltip(t[s-3],t[s]);break;case 83:this.$=t[s-5],n.setLink(t[s-4],t[s-2],t[s]),n.setTooltip(t[s-4],t[s-1]);break;case 84:this.$=t[s-2],n.setCssStyle(t[s-1],t[s]);break;case 85:n.setCssClass(t[s-1],t[s]);break;case 86:this.$=[t[s]];break;case 87:t[s-2].push(t[s]),this.$=t[s-2];break;case 89:this.$=t[s-1]+t[s];break}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:i,33:r,35:l,36:21,40:o,41:22,44:A,45:g,47:D,48:B,50:_,52:Ee,53:Ce,54:me,55:be,56:ge,66:ke,67:Te,69:Fe,73:ye,74:d,76:De,80:E,95:C,97:m,98:k},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},e(Be,[2,5],{8:[1,46]}),{8:[1,47]},e(c,[2,16],{21:[1,48]}),e(c,[2,18]),e(c,[2,19]),e(c,[2,20]),e(c,[2,21]),e(c,[2,22]),e(c,[2,23]),e(c,[2,24]),e(c,[2,25]),e(c,[2,26]),{32:[1,49]},{34:[1,50]},e(c,[2,29]),e(c,[2,45],{49:51,57:54,58:55,13:[1,52],21:[1,53],59:Y,60:Q,61:j,62:X,63:q,64:_e,65:Se}),{37:[1,63]},e(H,[2,36],{37:[1,65],42:[1,64]}),e(c,[2,47]),e(c,[2,48]),{16:66,74:d,80:E,95:C,97:m},{16:37,17:67,18:38,74:d,80:E,95:C,97:m,98:k},{16:37,17:68,18:38,74:d,80:E,95:C,97:m,98:k},{16:37,17:69,18:38,74:d,80:E,95:C,97:m,98:k},{74:[1,70]},{13:[1,71]},{16:37,17:72,18:38,74:d,80:E,95:C,97:m,98:k},{13:ze,51:73},e(c,[2,55]),e(c,[2,56]),e(c,[2,57]),e(c,[2,58]),e(G,[2,11],{16:37,18:38,17:75,19:[1,76],74:d,80:E,95:C,97:m,98:k}),e(G,[2,12],{19:[1,77]}),{15:78,16:79,74:d,80:E,95:C,97:m},{16:37,17:80,18:38,74:d,80:E,95:C,97:m,98:k},e(W,[2,112]),e(W,[2,113]),e(W,[2,114]),e(W,[2,115]),e([1,8,9,12,13,19,21,37,39,42,59,60,61,62,63,64,65,70,72],[2,116]),e(Be,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,17:20,36:21,41:22,16:37,18:38,5:81,31:i,33:r,35:l,40:o,44:A,45:g,47:D,48:B,50:_,52:Ee,53:Ce,54:me,55:be,56:ge,66:ke,67:Te,69:Fe,73:ye,74:d,76:De,80:E,95:C,97:m,98:k}),{5:82,10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:i,33:r,35:l,36:21,40:o,41:22,44:A,45:g,47:D,48:B,50:_,52:Ee,53:Ce,54:me,55:be,56:ge,66:ke,67:Te,69:Fe,73:ye,74:d,76:De,80:E,95:C,97:m,98:k},e(c,[2,17]),e(c,[2,27]),e(c,[2,28]),{13:[1,84],16:37,17:83,18:38,74:d,80:E,95:C,97:m,98:k},{49:85,57:54,58:55,59:Y,60:Q,61:j,62:X,63:q,64:_e,65:Se},e(c,[2,46]),{58:86,64:_e,65:Se},e(J,[2,62],{57:87,59:Y,60:Q,61:j,62:X,63:q}),e(U,[2,63]),e(U,[2,64]),e(U,[2,65]),e(U,[2,66]),e(U,[2,67]),e(Ke,[2,68]),e(Ke,[2,69]),{8:[1,89],23:90,38:88,41:22,44:A},{16:91,74:d,80:E,95:C,97:m},{43:92,47:Ne},{46:[1,94]},{13:[1,95]},{13:[1,96]},{70:[1,97],72:[1,98]},{21:Z,73:$,74:ee,75:99,77:100,79:101,80:te,81:se,82:ie,83:ne,84:ue,85:re},{74:[1,111]},{13:ze,51:112},e(c,[2,54]),e(c,[2,117]),e(G,[2,13]),e(G,[2,14]),e(G,[2,15]),{37:[2,32]},{15:113,16:79,37:[2,9],74:d,80:E,95:C,97:m},e(Le,[2,40],{11:114,12:[1,115]}),e(Be,[2,7]),{9:[1,116]},e(ae,[2,49]),{16:37,17:117,18:38,74:d,80:E,95:C,97:m,98:k},{13:[1,119],16:37,17:118,18:38,74:d,80:E,95:C,97:m,98:k},e(J,[2,61],{57:120,59:Y,60:Q,61:j,62:X,63:q}),e(J,[2,60]),{39:[1,121]},{23:90,38:122,41:22,44:A},{8:[1,123],39:[2,33]},e(H,[2,37],{37:[1,124]}),{39:[1,125]},{39:[2,43],43:126,47:Ne},{16:37,17:127,18:38,74:d,80:E,95:C,97:m,98:k},e(c,[2,70],{13:[1,128]}),e(c,[2,72],{13:[1,130],68:[1,129]}),e(c,[2,76],{13:[1,131],71:[1,132]}),{13:[1,133]},e(c,[2,84],{78:[1,134]}),e(Ye,[2,86],{79:135,21:Z,73:$,74:ee,80:te,81:se,82:ie,83:ne,84:ue,85:re}),e(S,[2,88]),e(S,[2,90]),e(S,[2,91]),e(S,[2,92]),e(S,[2,93]),e(S,[2,94]),e(S,[2,95]),e(S,[2,96]),e(S,[2,97]),e(S,[2,98]),e(c,[2,85]),e(c,[2,53]),{37:[2,10]},e(Le,[2,41]),{13:[1,136]},{1:[2,4]},e(ae,[2,51]),e(ae,[2,50]),{16:37,17:137,18:38,74:d,80:E,95:C,97:m,98:k},e(J,[2,59]),e(c,[2,30]),{39:[1,138]},{23:90,38:139,39:[2,34],41:22,44:A},{43:140,47:Ne},e(H,[2,38]),{39:[2,44]},e(c,[2,42]),e(c,[2,71]),e(c,[2,73]),e(c,[2,74],{68:[1,141]}),e(c,[2,77]),e(c,[2,78],{13:[1,142]}),e(c,[2,80],{13:[1,144],68:[1,143]}),{21:Z,73:$,74:ee,77:145,79:101,80:te,81:se,82:ie,83:ne,84:ue,85:re},e(S,[2,89]),{14:[1,146]},e(ae,[2,52]),e(c,[2,31]),{39:[2,35]},{39:[1,147]},e(c,[2,75]),e(c,[2,79]),e(c,[2,81]),e(c,[2,82],{68:[1,148]}),e(Ye,[2,87],{79:135,21:Z,73:$,74:ee,80:te,81:se,82:ie,83:ne,84:ue,85:re}),e(Le,[2,8]),e(H,[2,39]),e(c,[2,83])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],78:[2,32],113:[2,10],116:[2,4],126:[2,44],139:[2,35]},parseError:function(u,a){if(a.recoverable)this.trace(u);else{var h=new Error(u);throw h.hash=a,h}},parse:function(u){var a=this,h=[0],n=[],f=[null],t=[],z=this.table,s="",le=0,Qe=0,ot=2,je=1,ht=t.slice.call(arguments,1),b=Object.create(this.lexer),I={yy:{}};for(var Oe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Oe)&&(I.yy[Oe]=this.yy[Oe]);b.setInput(u,I.yy),I.yy.lexer=b,I.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var Ie=b.yylloc;t.push(Ie);var At=b.options&&b.options.ranges;typeof I.yy.parseError=="function"?this.parseError=I.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pt(){var v;return v=n.pop()||b.lex()||je,typeof v!="number"&&(v instanceof Array&&(n=v,v=n.pop()),v=a.symbols_[v]||v),v}for(var T,R,y,Re,P={},ce,L,Xe,oe;;){if(R=h[h.length-1],this.defaultActions[R]?y=this.defaultActions[R]:((T===null||typeof T>"u")&&(T=pt()),y=z[R]&&z[R][T]),typeof y>"u"||!y.length||!y[0]){var Ve="";oe=[];for(ce in z[R])this.terminals_[ce]&&ce>ot&&oe.push("'"+this.terminals_[ce]+"'");b.showPosition?Ve="Parse error on line "+(le+1)+`: +`+b.showPosition()+` +Expecting `+oe.join(", ")+", got '"+(this.terminals_[T]||T)+"'":Ve="Parse error on line "+(le+1)+": Unexpected "+(T==je?"end of input":"'"+(this.terminals_[T]||T)+"'"),this.parseError(Ve,{text:b.match,token:this.terminals_[T]||T,line:b.yylineno,loc:Ie,expected:oe})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+R+", token: "+T);switch(y[0]){case 1:h.push(T),f.push(b.yytext),t.push(b.yylloc),h.push(y[1]),T=null,Qe=b.yyleng,s=b.yytext,le=b.yylineno,Ie=b.yylloc;break;case 2:if(L=this.productions_[y[1]][1],P.$=f[f.length-L],P._$={first_line:t[t.length-(L||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(L||1)].first_column,last_column:t[t.length-1].last_column},At&&(P._$.range=[t[t.length-(L||1)].range[0],t[t.length-1].range[1]]),Re=this.performAction.apply(P,[s,Qe,le,I.yy,y[1],f,t].concat(ht)),typeof Re<"u")return Re;L&&(h=h.slice(0,-1*L*2),f=f.slice(0,-1*L),t=t.slice(0,-1*L)),h.push(this.productions_[y[1]][0]),f.push(P.$),t.push(P._$),Xe=z[h[h.length-2]][h[h.length-1]],h.push(Xe);break;case 3:return!0}}return!0}},ct=function(){var x={EOF:1,parseError:function(a,h){if(this.yy.parser)this.yy.parser.parseError(a,h);else throw new Error(a)},setInput:function(u,a){return this.yy=a||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var a=u.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},unput:function(u){var a=u.length,h=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),h.length-1&&(this.yylineno-=h.length-1);var f=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:h?(h.length===n.length?this.yylloc.first_column:0)+n[n.length-h.length].length-h[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[f[0],f[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(u){this.unput(this.match.slice(u))},pastInput:function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var u=this.pastInput(),a=new Array(u.length+1).join("-");return u+this.upcomingInput()+` +`+a+"^"},test_match:function(u,a){var h,n,f;if(this.options.backtrack_lexer&&(f={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(f.yylloc.range=this.yylloc.range.slice(0))),n=u[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],h=this.performAction.call(this,this.yy,this,a,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),h)return h;if(this._backtrack){for(var t in f)this[t]=f[t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,a,h,n;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),t=0;ta[0].length)){if(a=h,n=t,this.options.backtrack_lexer){if(u=this.test_match(h,f[t]),u!==!1)return u;if(this._backtrack){a=!1;continue}else return!1}else if(!this.options.flex)break}return a?(u=this.test_match(a,f[n]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return a||this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){var a=this.conditionStack.length-1;return a>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(a){return a=this.conditionStack.length-1-Math.abs(a||0),a>=0?this.conditionStack[a]:"INITIAL"},pushState:function(a){this.begin(a)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(a,h,n,f){switch(n){case 0:return 53;case 1:return 54;case 2:return 55;case 3:return 56;case 4:break;case 5:break;case 6:return this.begin("acc_title"),31;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),33;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 70;case 22:this.popState();break;case 23:return 71;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 73;case 28:return this.begin("namespace"),40;case 29:return this.popState(),8;case 30:break;case 31:return this.begin("namespace-body"),37;case 32:return this.popState(),39;case 33:return"EOF_IN_STRUCT";case 34:return 8;case 35:break;case 36:return"EDGE_STATE";case 37:return this.begin("class"),44;case 38:return this.popState(),8;case 39:break;case 40:return this.popState(),this.popState(),39;case 41:return this.begin("class-body"),37;case 42:return this.popState(),39;case 43:return"EOF_IN_STRUCT";case 44:return"EDGE_STATE";case 45:return"OPEN_IN_STRUCT";case 46:break;case 47:return"MEMBER";case 48:return 76;case 49:return 66;case 50:return 67;case 51:return 69;case 52:return 50;case 53:return 52;case 54:return 45;case 55:return 46;case 56:return 72;case 57:this.popState();break;case 58:return"GENERICTYPE";case 59:this.begin("generic");break;case 60:this.popState();break;case 61:return"BQUOTE_STR";case 62:this.begin("bqstring");break;case 63:return 68;case 64:return 68;case 65:return 68;case 66:return 68;case 67:return 60;case 68:return 60;case 69:return 62;case 70:return 62;case 71:return 61;case 72:return 59;case 73:return 63;case 74:return 64;case 75:return 65;case 76:return 21;case 77:return 42;case 78:return 95;case 79:return"DOT";case 80:return"PLUS";case 81:return 81;case 82:return 78;case 83:return 84;case 84:return 84;case 85:return 85;case 86:return"EQUALS";case 87:return"EQUALS";case 88:return 74;case 89:return 12;case 90:return 14;case 91:return"PUNCTUATION";case 92:return 80;case 93:return 97;case 94:return 83;case 95:return 83;case 96:return 9}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,32,33,34,35,36,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},namespace:{rules:[26,28,29,30,31,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},"class-body":{rules:[26,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},class:{rules:[26,38,39,40,41,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_descr:{rules:[9,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},acc_title:{rules:[7,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_args:{rules:[22,23,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},callback_name:{rules:[19,20,21,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},href:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},struct:{rules:[26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},generic:{rules:[26,48,49,50,51,52,53,54,55,56,57,58,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},bqstring:{rules:[26,48,49,50,51,52,53,54,55,56,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},string:{rules:[24,25,26,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,85,86,87,88,89,90,91,92,93,94,96],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,37,48,49,50,51,52,53,54,55,56,59,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],inclusive:!0}}};return x}();ve.lexer=ct;function xe(){this.yy={}}return xe.prototype=ve,ve.Parser=xe,new xe}();Pe.parser=Pe;var Kt=Pe,it=["#","+","~","-",""],Ae=class{constructor(i,r){this.memberType=r,this.visibility="",this.classifier="";let l=He(i,F());this.parseMember(l)}getDisplayDetails(){let i=this.visibility+he(this.id);this.memberType==="method"&&(i+=`(${he(this.parameters.trim())})`,this.returnType&&(i+=" : "+he(this.returnType))),i=i.trim();let r=this.parseClassifier();return{displayText:i,cssStyle:r}}parseMember(i){let r="";if(this.memberType==="method"){let l=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/,o=i.match(l);if(o){let A=o[1]?o[1].trim():"";if(it.includes(A)&&(this.visibility=A),this.id=o[2].trim(),this.parameters=o[3]?o[3].trim():"",r=o[4]?o[4].trim():"",this.returnType=o[5]?o[5].trim():"",r===""){let g=this.returnType.substring(this.returnType.length-1);g.match(/[$*]/)&&(r=g,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let l=i.length,o=i.substring(0,1),A=i.substring(l-1);it.includes(o)&&(this.visibility=o),A.match(/[$*]/)&&(r=A),this.id=i.substring(this.visibility===""?0:1,r===""?l:l-1)}this.classifier=r}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}},de="classId-",Ge=[],p={},pe=[],nt=0,O={},Me=0,K=[],V=e=>N.sanitizeText(e,F()),w=function(e){let i=N.sanitizeText(e,F()),r="",l=i;if(i.indexOf("~")>0){let o=i.split("~");l=V(o[0]),r=V(o[1])}return{className:l,type:r}},ft=function(e,i){let r=N.sanitizeText(e,F());i&&(i=V(i));let{className:l}=w(r);p[l].label=i},fe=function(e){let i=N.sanitizeText(e,F()),{className:r,type:l}=w(i);if(Object.hasOwn(p,r))return;let o=N.sanitizeText(r,F());p[o]={id:o,type:l,label:o,cssClasses:[],methods:[],members:[],annotations:[],styles:[],domId:de+o+"-"+nt},nt++},ut=function(e){let i=N.sanitizeText(e,F());if(i in p)return p[i].domId;throw new Error("Class not found: "+i)},dt=function(){Ge=[],p={},pe=[],K=[],K.push(at),O={},Me=0,We()},Et=function(e){return p[e]},Ct=function(){return p},mt=function(){return Ge},bt=function(){return pe},gt=function(e){qe.debug("Adding relation: "+JSON.stringify(e)),fe(e.id1),fe(e.id2),e.id1=w(e.id1).className,e.id2=w(e.id2).className,e.relationTitle1=N.sanitizeText(e.relationTitle1.trim(),F()),e.relationTitle2=N.sanitizeText(e.relationTitle2.trim(),F()),Ge.push(e)},kt=function(e,i){let r=w(e).className;p[r].annotations.push(i)},rt=function(e,i){fe(e);let r=w(e).className,l=p[r];if(typeof i=="string"){let o=i.trim();o.startsWith("<<")&&o.endsWith(">>")?l.annotations.push(V(o.substring(2,o.length-2))):o.indexOf(")")>0?l.methods.push(new Ae(o,"method")):o&&l.members.push(new Ae(o,"attribute"))}},Tt=function(e,i){Array.isArray(i)&&(i.reverse(),i.forEach(r=>rt(e,r)))},Ft=function(e,i){let r={id:`note${pe.length}`,class:i,text:e};pe.push(r)},yt=function(e){return e.startsWith(":")&&(e=e.substring(1)),V(e.trim())},Ue=function(e,i){e.split(",").forEach(function(r){let l=r;r[0].match(/\d/)&&(l=de+l),p[l]!==void 0&&p[l].cssClasses.push(i)})},Dt=function(e,i){e.split(",").forEach(function(r){i!==void 0&&(p[r].tooltip=V(i))})},Bt=function(e,i){return i?O[i].classes[e].tooltip:p[e].tooltip},_t=function(e,i,r){let l=F();e.split(",").forEach(function(o){let A=o;o[0].match(/\d/)&&(A=de+A),p[A]!==void 0&&(p[A].link=we.formatUrl(i,l),l.securityLevel==="sandbox"?p[A].linkTarget="_top":typeof r=="string"?p[A].linkTarget=V(r):p[A].linkTarget="_blank")}),Ue(e,"clickable")},St=function(e,i,r){e.split(",").forEach(function(l){Nt(l,i,r),p[l].haveCallback=!0}),Ue(e,"clickable")},Nt=function(e,i,r){let l=N.sanitizeText(e,F());if(F().securityLevel!=="loose"||i===void 0)return;let A=l;if(p[A]!==void 0){let g=ut(A),D=[];if(typeof r=="string"){D=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let B=0;B")),o.classed("hover",!0)}).on("mouseout",function(){i.transition().duration(500).style("opacity",0),M(this).classed("hover",!1)})};K.push(at);var lt="TB",Ot=()=>lt,It=e=>{lt=e},Rt=function(e){O[e]===void 0&&(O[e]={id:e,classes:{},children:{},domId:de+e+"-"+Me},Me++)},Vt=function(e){return O[e]},wt=function(){return O},Pt=function(e,i){if(O[e]!==void 0)for(let r of i){let{className:l}=w(r);p[l].parent=e,O[e].classes[l]=p[l]}},Mt=function(e,i){let r=p[e];if(!(!i||!r))for(let l of i)l.includes(",")?r.styles.push(...l.split(",")):r.styles.push(l)},Yt={setAccTitle:Je,getAccTitle:Ze,getAccDescription:et,setAccDescription:$e,getConfig:()=>F().class,addClass:fe,bindFunctions:Lt,clear:dt,getClass:Et,getClasses:Ct,getNotes:bt,addAnnotation:kt,addNote:Ft,getRelations:mt,addRelation:gt,getDirection:Ot,setDirection:It,addMember:rt,addMembers:Tt,cleanupLabel:yt,lineType:vt,relationType:xt,setClickEvent:St,setCssClass:Ue,setLink:_t,getTooltip:Bt,setTooltip:Dt,lookUpDomId:ut,setDiagramTitle:tt,getDiagramTitle:st,setClassLabel:ft,addNamespace:Rt,addClassesToNamespace:Pt,getNamespace:Vt,getNamespaces:wt,setCssStyle:Mt},Gt=e=>`g.classGroup text { + fill: ${e.nodeBorder||e.classText}; + stroke: none; + font-family: ${e.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${e.classText}; +} +.edgeLabel .label rect { + fill: ${e.mainBkg}; +} +.label text { + fill: ${e.classText}; +} +.edgeLabel .label span { + background: ${e.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${e.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; +} + +g.classGroup line { + stroke: ${e.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${e.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${e.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${e.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${e.lineColor} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: transparent !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: transparent !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: transparent !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: transparent !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${e.mainBkg} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${e.mainBkg} !important; + stroke: ${e.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; + line-height: initial; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${e.textColor}; +} +`,Qt=Gt;export{Kt as a,Yt as b,Qt as c}; +//# sourceMappingURL=chunk-QRBMAIWT.min.js.map diff --git a/public/chunk-QRBMAIWT.min.js.map b/public/chunk-QRBMAIWT.min.js.map new file mode 100644 index 000000000..ba6835648 --- /dev/null +++ b/public/chunk-QRBMAIWT.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/mermaid/dist/styles-b83b31c9.js"], + "sourcesContent": ["import { select } from \"d3\";\nimport { d as sanitizeText$1, c as getConfig, x as parseGenericTypes, s as setAccTitle, g as getAccTitle, a as getAccDescription, b as setAccDescription, q as setDiagramTitle, t as getDiagramTitle, e as common, v as clear$1, l as log, u as utils } from \"./mermaid-6dc72991.js\";\nvar parser = function() {\n var o = function(k, v, o2, l) {\n for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)\n ;\n return o2;\n }, $V0 = [1, 17], $V1 = [1, 18], $V2 = [1, 19], $V3 = [1, 39], $V4 = [1, 40], $V5 = [1, 25], $V6 = [1, 23], $V7 = [1, 24], $V8 = [1, 31], $V9 = [1, 32], $Va = [1, 33], $Vb = [1, 34], $Vc = [1, 35], $Vd = [1, 36], $Ve = [1, 26], $Vf = [1, 27], $Vg = [1, 28], $Vh = [1, 29], $Vi = [1, 43], $Vj = [1, 30], $Vk = [1, 42], $Vl = [1, 44], $Vm = [1, 41], $Vn = [1, 45], $Vo = [1, 9], $Vp = [1, 8, 9], $Vq = [1, 56], $Vr = [1, 57], $Vs = [1, 58], $Vt = [1, 59], $Vu = [1, 60], $Vv = [1, 61], $Vw = [1, 62], $Vx = [1, 8, 9, 39], $Vy = [1, 74], $Vz = [1, 8, 9, 12, 13, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], $VA = [1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 46, 59, 60, 61, 62, 63, 64, 65, 70, 72, 74, 80, 95, 97, 98], $VB = [13, 74, 80, 95, 97, 98], $VC = [13, 64, 65, 74, 80, 95, 97, 98], $VD = [13, 59, 60, 61, 62, 63, 74, 80, 95, 97, 98], $VE = [1, 93], $VF = [1, 110], $VG = [1, 108], $VH = [1, 102], $VI = [1, 103], $VJ = [1, 104], $VK = [1, 105], $VL = [1, 106], $VM = [1, 107], $VN = [1, 109], $VO = [1, 8, 9, 37, 39, 42], $VP = [1, 8, 9, 21], $VQ = [1, 8, 9, 78], $VR = [1, 8, 9, 21, 73, 74, 78, 80, 81, 82, 83, 84, 85];\n var parser2 = {\n trace: function trace() {\n },\n yy: {},\n symbols_: { \"error\": 2, \"start\": 3, \"mermaidDoc\": 4, \"statements\": 5, \"graphConfig\": 6, \"CLASS_DIAGRAM\": 7, \"NEWLINE\": 8, \"EOF\": 9, \"statement\": 10, \"classLabel\": 11, \"SQS\": 12, \"STR\": 13, \"SQE\": 14, \"namespaceName\": 15, \"alphaNumToken\": 16, \"className\": 17, \"classLiteralName\": 18, \"GENERICTYPE\": 19, \"relationStatement\": 20, \"LABEL\": 21, \"namespaceStatement\": 22, \"classStatement\": 23, \"memberStatement\": 24, \"annotationStatement\": 25, \"clickStatement\": 26, \"styleStatement\": 27, \"cssClassStatement\": 28, \"noteStatement\": 29, \"direction\": 30, \"acc_title\": 31, \"acc_title_value\": 32, \"acc_descr\": 33, \"acc_descr_value\": 34, \"acc_descr_multiline_value\": 35, \"namespaceIdentifier\": 36, \"STRUCT_START\": 37, \"classStatements\": 38, \"STRUCT_STOP\": 39, \"NAMESPACE\": 40, \"classIdentifier\": 41, \"STYLE_SEPARATOR\": 42, \"members\": 43, \"CLASS\": 44, \"ANNOTATION_START\": 45, \"ANNOTATION_END\": 46, \"MEMBER\": 47, \"SEPARATOR\": 48, \"relation\": 49, \"NOTE_FOR\": 50, \"noteText\": 51, \"NOTE\": 52, \"direction_tb\": 53, \"direction_bt\": 54, \"direction_rl\": 55, \"direction_lr\": 56, \"relationType\": 57, \"lineType\": 58, \"AGGREGATION\": 59, \"EXTENSION\": 60, \"COMPOSITION\": 61, \"DEPENDENCY\": 62, \"LOLLIPOP\": 63, \"LINE\": 64, \"DOTTED_LINE\": 65, \"CALLBACK\": 66, \"LINK\": 67, \"LINK_TARGET\": 68, \"CLICK\": 69, \"CALLBACK_NAME\": 70, \"CALLBACK_ARGS\": 71, \"HREF\": 72, \"STYLE\": 73, \"ALPHA\": 74, \"stylesOpt\": 75, \"CSSCLASS\": 76, \"style\": 77, \"COMMA\": 78, \"styleComponent\": 79, \"NUM\": 80, \"COLON\": 81, \"UNIT\": 82, \"SPACE\": 83, \"BRKT\": 84, \"PCT\": 85, \"commentToken\": 86, \"textToken\": 87, \"graphCodeTokens\": 88, \"textNoTagsToken\": 89, \"TAGSTART\": 90, \"TAGEND\": 91, \"==\": 92, \"--\": 93, \"DEFAULT\": 94, \"MINUS\": 95, \"keywords\": 96, \"UNICODE_TEXT\": 97, \"BQUOTE_STR\": 98, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 7: \"CLASS_DIAGRAM\", 8: \"NEWLINE\", 9: \"EOF\", 12: \"SQS\", 13: \"STR\", 14: \"SQE\", 19: \"GENERICTYPE\", 21: \"LABEL\", 31: \"acc_title\", 32: \"acc_title_value\", 33: \"acc_descr\", 34: \"acc_descr_value\", 35: \"acc_descr_multiline_value\", 37: \"STRUCT_START\", 39: \"STRUCT_STOP\", 40: \"NAMESPACE\", 42: \"STYLE_SEPARATOR\", 44: \"CLASS\", 45: \"ANNOTATION_START\", 46: \"ANNOTATION_END\", 47: \"MEMBER\", 48: \"SEPARATOR\", 50: \"NOTE_FOR\", 52: \"NOTE\", 53: \"direction_tb\", 54: \"direction_bt\", 55: \"direction_rl\", 56: \"direction_lr\", 59: \"AGGREGATION\", 60: \"EXTENSION\", 61: \"COMPOSITION\", 62: \"DEPENDENCY\", 63: \"LOLLIPOP\", 64: \"LINE\", 65: \"DOTTED_LINE\", 66: \"CALLBACK\", 67: \"LINK\", 68: \"LINK_TARGET\", 69: \"CLICK\", 70: \"CALLBACK_NAME\", 71: \"CALLBACK_ARGS\", 72: \"HREF\", 73: \"STYLE\", 74: \"ALPHA\", 76: \"CSSCLASS\", 78: \"COMMA\", 80: \"NUM\", 81: \"COLON\", 82: \"UNIT\", 83: \"SPACE\", 84: \"BRKT\", 85: \"PCT\", 88: \"graphCodeTokens\", 90: \"TAGSTART\", 91: \"TAGEND\", 92: \"==\", 93: \"--\", 94: \"DEFAULT\", 95: \"MINUS\", 96: \"keywords\", 97: \"UNICODE_TEXT\", 98: \"BQUOTE_STR\" },\n productions_: [0, [3, 1], [3, 1], [4, 1], [6, 4], [5, 1], [5, 2], [5, 3], [11, 3], [15, 1], [15, 2], [17, 1], [17, 1], [17, 2], [17, 2], [17, 2], [10, 1], [10, 2], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [22, 4], [22, 5], [36, 2], [38, 1], [38, 2], [38, 3], [23, 1], [23, 3], [23, 4], [23, 6], [41, 2], [41, 3], [25, 4], [43, 1], [43, 2], [24, 1], [24, 2], [24, 1], [24, 1], [20, 3], [20, 4], [20, 4], [20, 5], [29, 3], [29, 2], [30, 1], [30, 1], [30, 1], [30, 1], [49, 3], [49, 2], [49, 2], [49, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [58, 1], [58, 1], [26, 3], [26, 4], [26, 3], [26, 4], [26, 4], [26, 5], [26, 3], [26, 4], [26, 4], [26, 5], [26, 4], [26, 5], [26, 5], [26, 6], [27, 3], [28, 3], [75, 1], [75, 3], [77, 1], [77, 2], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [79, 1], [86, 1], [86, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [87, 1], [89, 1], [89, 1], [89, 1], [89, 1], [16, 1], [16, 1], [16, 1], [16, 1], [18, 1], [51, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n var $0 = $$.length - 1;\n switch (yystate) {\n case 8:\n this.$ = $$[$0 - 1];\n break;\n case 9:\n case 11:\n case 12:\n this.$ = $$[$0];\n break;\n case 10:\n case 13:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n case 14:\n case 15:\n this.$ = $$[$0 - 1] + \"~\" + $$[$0] + \"~\";\n break;\n case 16:\n yy.addRelation($$[$0]);\n break;\n case 17:\n $$[$0 - 1].title = yy.cleanupLabel($$[$0]);\n yy.addRelation($$[$0 - 1]);\n break;\n case 27:\n this.$ = $$[$0].trim();\n yy.setAccTitle(this.$);\n break;\n case 28:\n case 29:\n this.$ = $$[$0].trim();\n yy.setAccDescription(this.$);\n break;\n case 30:\n yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]);\n break;\n case 31:\n yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]);\n break;\n case 32:\n this.$ = $$[$0];\n yy.addNamespace($$[$0]);\n break;\n case 33:\n this.$ = [$$[$0]];\n break;\n case 34:\n this.$ = [$$[$0 - 1]];\n break;\n case 35:\n $$[$0].unshift($$[$0 - 2]);\n this.$ = $$[$0];\n break;\n case 37:\n yy.setCssClass($$[$0 - 2], $$[$0]);\n break;\n case 38:\n yy.addMembers($$[$0 - 3], $$[$0 - 1]);\n break;\n case 39:\n yy.setCssClass($$[$0 - 5], $$[$0 - 3]);\n yy.addMembers($$[$0 - 5], $$[$0 - 1]);\n break;\n case 40:\n this.$ = $$[$0];\n yy.addClass($$[$0]);\n break;\n case 41:\n this.$ = $$[$0 - 1];\n yy.addClass($$[$0 - 1]);\n yy.setClassLabel($$[$0 - 1], $$[$0]);\n break;\n case 42:\n yy.addAnnotation($$[$0], $$[$0 - 2]);\n break;\n case 43:\n this.$ = [$$[$0]];\n break;\n case 44:\n $$[$0].push($$[$0 - 1]);\n this.$ = $$[$0];\n break;\n case 45:\n break;\n case 46:\n yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0]));\n break;\n case 47:\n break;\n case 48:\n break;\n case 49:\n this.$ = { \"id1\": $$[$0 - 2], \"id2\": $$[$0], relation: $$[$0 - 1], relationTitle1: \"none\", relationTitle2: \"none\" };\n break;\n case 50:\n this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: \"none\" };\n break;\n case 51:\n this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: \"none\", relationTitle2: $$[$0 - 1] };\n break;\n case 52:\n this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] };\n break;\n case 53:\n yy.addNote($$[$0], $$[$0 - 1]);\n break;\n case 54:\n yy.addNote($$[$0]);\n break;\n case 55:\n yy.setDirection(\"TB\");\n break;\n case 56:\n yy.setDirection(\"BT\");\n break;\n case 57:\n yy.setDirection(\"RL\");\n break;\n case 58:\n yy.setDirection(\"LR\");\n break;\n case 59:\n this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] };\n break;\n case 60:\n this.$ = { type1: \"none\", type2: $$[$0], lineType: $$[$0 - 1] };\n break;\n case 61:\n this.$ = { type1: $$[$0 - 1], type2: \"none\", lineType: $$[$0] };\n break;\n case 62:\n this.$ = { type1: \"none\", type2: \"none\", lineType: $$[$0] };\n break;\n case 63:\n this.$ = yy.relationType.AGGREGATION;\n break;\n case 64:\n this.$ = yy.relationType.EXTENSION;\n break;\n case 65:\n this.$ = yy.relationType.COMPOSITION;\n break;\n case 66:\n this.$ = yy.relationType.DEPENDENCY;\n break;\n case 67:\n this.$ = yy.relationType.LOLLIPOP;\n break;\n case 68:\n this.$ = yy.lineType.LINE;\n break;\n case 69:\n this.$ = yy.lineType.DOTTED_LINE;\n break;\n case 70:\n case 76:\n this.$ = $$[$0 - 2];\n yy.setClickEvent($$[$0 - 1], $$[$0]);\n break;\n case 71:\n case 77:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 2], $$[$0]);\n break;\n case 72:\n this.$ = $$[$0 - 2];\n yy.setLink($$[$0 - 1], $$[$0]);\n break;\n case 73:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 74:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 2], $$[$0]);\n break;\n case 75:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);\n yy.setTooltip($$[$0 - 3], $$[$0 - 1]);\n break;\n case 78:\n this.$ = $$[$0 - 3];\n yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);\n break;\n case 79:\n this.$ = $$[$0 - 4];\n yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 80:\n this.$ = $$[$0 - 3];\n yy.setLink($$[$0 - 2], $$[$0]);\n break;\n case 81:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]);\n break;\n case 82:\n this.$ = $$[$0 - 4];\n yy.setLink($$[$0 - 3], $$[$0 - 1]);\n yy.setTooltip($$[$0 - 3], $$[$0]);\n break;\n case 83:\n this.$ = $$[$0 - 5];\n yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]);\n yy.setTooltip($$[$0 - 4], $$[$0 - 1]);\n break;\n case 84:\n this.$ = $$[$0 - 2];\n yy.setCssStyle($$[$0 - 1], $$[$0]);\n break;\n case 85:\n yy.setCssClass($$[$0 - 1], $$[$0]);\n break;\n case 86:\n this.$ = [$$[$0]];\n break;\n case 87:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n break;\n case 89:\n this.$ = $$[$0 - 1] + $$[$0];\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: [1, 6], 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, o($Vo, [2, 5], { 8: [1, 46] }), { 8: [1, 47] }, o($Vp, [2, 16], { 21: [1, 48] }), o($Vp, [2, 18]), o($Vp, [2, 19]), o($Vp, [2, 20]), o($Vp, [2, 21]), o($Vp, [2, 22]), o($Vp, [2, 23]), o($Vp, [2, 24]), o($Vp, [2, 25]), o($Vp, [2, 26]), { 32: [1, 49] }, { 34: [1, 50] }, o($Vp, [2, 29]), o($Vp, [2, 45], { 49: 51, 57: 54, 58: 55, 13: [1, 52], 21: [1, 53], 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }), { 37: [1, 63] }, o($Vx, [2, 36], { 37: [1, 65], 42: [1, 64] }), o($Vp, [2, 47]), o($Vp, [2, 48]), { 16: 66, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 67, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 68, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 16: 37, 17: 69, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 74: [1, 70] }, { 13: [1, 71] }, { 16: 37, 17: 72, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: $Vy, 51: 73 }, o($Vp, [2, 55]), o($Vp, [2, 56]), o($Vp, [2, 57]), o($Vp, [2, 58]), o($Vz, [2, 11], { 16: 37, 18: 38, 17: 75, 19: [1, 76], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), o($Vz, [2, 12], { 19: [1, 77] }), { 15: 78, 16: 79, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 16: 37, 17: 80, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VA, [2, 112]), o($VA, [2, 113]), o($VA, [2, 114]), o($VA, [2, 115]), o([1, 8, 9, 12, 13, 19, 21, 37, 39, 42, 59, 60, 61, 62, 63, 64, 65, 70, 72], [2, 116]), o($Vo, [2, 6], { 10: 5, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 17: 20, 36: 21, 41: 22, 16: 37, 18: 38, 5: 81, 31: $V0, 33: $V1, 35: $V2, 40: $V3, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }), { 5: 82, 10: 5, 16: 37, 17: 20, 18: 38, 20: 7, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 27: 13, 28: 14, 29: 15, 30: 16, 31: $V0, 33: $V1, 35: $V2, 36: 21, 40: $V3, 41: 22, 44: $V4, 45: $V5, 47: $V6, 48: $V7, 50: $V8, 52: $V9, 53: $Va, 54: $Vb, 55: $Vc, 56: $Vd, 66: $Ve, 67: $Vf, 69: $Vg, 73: $Vh, 74: $Vi, 76: $Vj, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 17]), o($Vp, [2, 27]), o($Vp, [2, 28]), { 13: [1, 84], 16: 37, 17: 83, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 49: 85, 57: 54, 58: 55, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw }, o($Vp, [2, 46]), { 58: 86, 64: $Vv, 65: $Vw }, o($VB, [2, 62], { 57: 87, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VC, [2, 63]), o($VC, [2, 64]), o($VC, [2, 65]), o($VC, [2, 66]), o($VC, [2, 67]), o($VD, [2, 68]), o($VD, [2, 69]), { 8: [1, 89], 23: 90, 38: 88, 41: 22, 44: $V4 }, { 16: 91, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, { 43: 92, 47: $VE }, { 46: [1, 94] }, { 13: [1, 95] }, { 13: [1, 96] }, { 70: [1, 97], 72: [1, 98] }, { 21: $VF, 73: $VG, 74: $VH, 75: 99, 77: 100, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, { 74: [1, 111] }, { 13: $Vy, 51: 112 }, o($Vp, [2, 54]), o($Vp, [2, 117]), o($Vz, [2, 13]), o($Vz, [2, 14]), o($Vz, [2, 15]), { 37: [2, 32] }, { 15: 113, 16: 79, 37: [2, 9], 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm }, o($VO, [2, 40], { 11: 114, 12: [1, 115] }), o($Vo, [2, 7]), { 9: [1, 116] }, o($VP, [2, 49]), { 16: 37, 17: 117, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, { 13: [1, 119], 16: 37, 17: 118, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 61], { 57: 120, 59: $Vq, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu }), o($VB, [2, 60]), { 39: [1, 121] }, { 23: 90, 38: 122, 41: 22, 44: $V4 }, { 8: [1, 123], 39: [2, 33] }, o($Vx, [2, 37], { 37: [1, 124] }), { 39: [1, 125] }, { 39: [2, 43], 43: 126, 47: $VE }, { 16: 37, 17: 127, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($Vp, [2, 70], { 13: [1, 128] }), o($Vp, [2, 72], { 13: [1, 130], 68: [1, 129] }), o($Vp, [2, 76], { 13: [1, 131], 71: [1, 132] }), { 13: [1, 133] }, o($Vp, [2, 84], { 78: [1, 134] }), o($VQ, [2, 86], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VR, [2, 88]), o($VR, [2, 90]), o($VR, [2, 91]), o($VR, [2, 92]), o($VR, [2, 93]), o($VR, [2, 94]), o($VR, [2, 95]), o($VR, [2, 96]), o($VR, [2, 97]), o($VR, [2, 98]), o($Vp, [2, 85]), o($Vp, [2, 53]), { 37: [2, 10] }, o($VO, [2, 41]), { 13: [1, 136] }, { 1: [2, 4] }, o($VP, [2, 51]), o($VP, [2, 50]), { 16: 37, 17: 137, 18: 38, 74: $Vi, 80: $Vk, 95: $Vl, 97: $Vm, 98: $Vn }, o($VB, [2, 59]), o($Vp, [2, 30]), { 39: [1, 138] }, { 23: 90, 38: 139, 39: [2, 34], 41: 22, 44: $V4 }, { 43: 140, 47: $VE }, o($Vx, [2, 38]), { 39: [2, 44] }, o($Vp, [2, 42]), o($Vp, [2, 71]), o($Vp, [2, 73]), o($Vp, [2, 74], { 68: [1, 141] }), o($Vp, [2, 77]), o($Vp, [2, 78], { 13: [1, 142] }), o($Vp, [2, 80], { 13: [1, 144], 68: [1, 143] }), { 21: $VF, 73: $VG, 74: $VH, 77: 145, 79: 101, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }, o($VR, [2, 89]), { 14: [1, 146] }, o($VP, [2, 52]), o($Vp, [2, 31]), { 39: [2, 35] }, { 39: [1, 147] }, o($Vp, [2, 75]), o($Vp, [2, 79]), o($Vp, [2, 81]), o($Vp, [2, 82], { 68: [1, 148] }), o($VQ, [2, 87], { 79: 135, 21: $VF, 73: $VG, 74: $VH, 80: $VI, 81: $VJ, 82: $VK, 83: $VL, 84: $VM, 85: $VN }), o($VO, [2, 8]), o($Vx, [2, 39]), o($Vp, [2, 83])],\n defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 78: [2, 32], 113: [2, 10], 116: [2, 4], 126: [2, 44], 139: [2, 35] },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer2 = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer2.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer2;\n sharedState.yy.parser = this;\n if (typeof lexer2.yylloc == \"undefined\") {\n lexer2.yylloc = {};\n }\n var yyloc = lexer2.yylloc;\n lstack.push(yyloc);\n var ranges = lexer2.options && lexer2.options.ranges;\n if (typeof sharedState.yy.parseError === \"function\") {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer2.lex() || EOF;\n if (typeof token !== \"number\") {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, state, action, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n }\n if (lexer2.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + lexer2.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == EOF ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {\n text: lexer2.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer2.yylineno,\n loc: yyloc,\n expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer2.yytext);\n lstack.push(lexer2.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer2.yyleng;\n yytext = lexer2.yytext;\n yylineno = lexer2.yylineno;\n yyloc = lexer2.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n var lexer = function() {\n var lexer2 = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = \"\";\n this.conditionStack = [\"INITIAL\"];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? \"...\" : \"\") + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? \"...\" : \"\")).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function(match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false;\n }\n return false;\n },\n // return next match in input\n next: function() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = \"\";\n this.match = \"\";\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue;\n } else {\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError(\"Lexical error on line \" + (this.yylineno + 1) + \". Unrecognized text.\\n\" + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {},\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n switch ($avoiding_name_collisions) {\n case 0:\n return 53;\n case 1:\n return 54;\n case 2:\n return 55;\n case 3:\n return 56;\n case 4:\n break;\n case 5:\n break;\n case 6:\n this.begin(\"acc_title\");\n return 31;\n case 7:\n this.popState();\n return \"acc_title_value\";\n case 8:\n this.begin(\"acc_descr\");\n return 33;\n case 9:\n this.popState();\n return \"acc_descr_value\";\n case 10:\n this.begin(\"acc_descr_multiline\");\n break;\n case 11:\n this.popState();\n break;\n case 12:\n return \"acc_descr_multiline_value\";\n case 13:\n return 8;\n case 14:\n break;\n case 15:\n return 7;\n case 16:\n return 7;\n case 17:\n return \"EDGE_STATE\";\n case 18:\n this.begin(\"callback_name\");\n break;\n case 19:\n this.popState();\n break;\n case 20:\n this.popState();\n this.begin(\"callback_args\");\n break;\n case 21:\n return 70;\n case 22:\n this.popState();\n break;\n case 23:\n return 71;\n case 24:\n this.popState();\n break;\n case 25:\n return \"STR\";\n case 26:\n this.begin(\"string\");\n break;\n case 27:\n return 73;\n case 28:\n this.begin(\"namespace\");\n return 40;\n case 29:\n this.popState();\n return 8;\n case 30:\n break;\n case 31:\n this.begin(\"namespace-body\");\n return 37;\n case 32:\n this.popState();\n return 39;\n case 33:\n return \"EOF_IN_STRUCT\";\n case 34:\n return 8;\n case 35:\n break;\n case 36:\n return \"EDGE_STATE\";\n case 37:\n this.begin(\"class\");\n return 44;\n case 38:\n this.popState();\n return 8;\n case 39:\n break;\n case 40:\n this.popState();\n this.popState();\n return 39;\n case 41:\n this.begin(\"class-body\");\n return 37;\n case 42:\n this.popState();\n return 39;\n case 43:\n return \"EOF_IN_STRUCT\";\n case 44:\n return \"EDGE_STATE\";\n case 45:\n return \"OPEN_IN_STRUCT\";\n case 46:\n break;\n case 47:\n return \"MEMBER\";\n case 48:\n return 76;\n case 49:\n return 66;\n case 50:\n return 67;\n case 51:\n return 69;\n case 52:\n return 50;\n case 53:\n return 52;\n case 54:\n return 45;\n case 55:\n return 46;\n case 56:\n return 72;\n case 57:\n this.popState();\n break;\n case 58:\n return \"GENERICTYPE\";\n case 59:\n this.begin(\"generic\");\n break;\n case 60:\n this.popState();\n break;\n case 61:\n return \"BQUOTE_STR\";\n case 62:\n this.begin(\"bqstring\");\n break;\n case 63:\n return 68;\n case 64:\n return 68;\n case 65:\n return 68;\n case 66:\n return 68;\n case 67:\n return 60;\n case 68:\n return 60;\n case 69:\n return 62;\n case 70:\n return 62;\n case 71:\n return 61;\n case 72:\n return 59;\n case 73:\n return 63;\n case 74:\n return 64;\n case 75:\n return 65;\n case 76:\n return 21;\n case 77:\n return 42;\n case 78:\n return 95;\n case 79:\n return \"DOT\";\n case 80:\n return \"PLUS\";\n case 81:\n return 81;\n case 82:\n return 78;\n case 83:\n return 84;\n case 84:\n return 84;\n case 85:\n return 85;\n case 86:\n return \"EQUALS\";\n case 87:\n return \"EQUALS\";\n case 88:\n return 74;\n case 89:\n return 12;\n case 90:\n return 14;\n case 91:\n return \"PUNCTUATION\";\n case 92:\n return 80;\n case 93:\n return 97;\n case 94:\n return 83;\n case 95:\n return 83;\n case 96:\n return 9;\n }\n },\n rules: [/^(?:.*direction\\s+TB[^\\n]*)/, /^(?:.*direction\\s+BT[^\\n]*)/, /^(?:.*direction\\s+RL[^\\n]*)/, /^(?:.*direction\\s+LR[^\\n]*)/, /^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/, /^(?:%%[^\\n]*(\\r?\\n)*)/, /^(?:accTitle\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*:\\s*)/, /^(?:(?!\\n||)*[^\\n]*)/, /^(?:accDescr\\s*\\{\\s*)/, /^(?:[\\}])/, /^(?:[^\\}]*)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:classDiagram-v2\\b)/, /^(?:classDiagram\\b)/, /^(?:\\[\\*\\])/, /^(?:call[\\s]+)/, /^(?:\\([\\s]*\\))/, /^(?:\\()/, /^(?:[^(]*)/, /^(?:\\))/, /^(?:[^)]*)/, /^(?:[\"])/, /^(?:[^\"]*)/, /^(?:[\"])/, /^(?:style\\b)/, /^(?:namespace\\b)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:\\[\\*\\])/, /^(?:class\\b)/, /^(?:\\s*(\\r?\\n)+)/, /^(?:\\s+)/, /^(?:[}])/, /^(?:[{])/, /^(?:[}])/, /^(?:$)/, /^(?:\\[\\*\\])/, /^(?:[{])/, /^(?:[\\n])/, /^(?:[^{}\\n]*)/, /^(?:cssClass\\b)/, /^(?:callback\\b)/, /^(?:link\\b)/, /^(?:click\\b)/, /^(?:note for\\b)/, /^(?:note\\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:href\\b)/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:~)/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:[`])/, /^(?:_self\\b)/, /^(?:_blank\\b)/, /^(?:_parent\\b)/, /^(?:_top\\b)/, /^(?:\\s*<\\|)/, /^(?:\\s*\\|>)/, /^(?:\\s*>)/, /^(?:\\s*<)/, /^(?:\\s*\\*)/, /^(?:\\s*o\\b)/, /^(?:\\s*\\(\\))/, /^(?:--)/, /^(?:\\.\\.)/, /^(?::{1}[^:\\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\\.)/, /^(?:\\+)/, /^(?::)/, /^(?:,)/, /^(?:#)/, /^(?:#)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\\w+)/, /^(?:\\[)/, /^(?:\\])/, /^(?:[!\"#$%&'*+,-.`?\\\\/])/, /^(?:[0-9]+)/, /^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/, /^(?:\\s)/, /^(?:\\s)/, /^(?:$)/],\n conditions: { \"namespace-body\": { \"rules\": [26, 32, 33, 34, 35, 36, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"namespace\": { \"rules\": [26, 28, 29, 30, 31, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"class-body\": { \"rules\": [26, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"class\": { \"rules\": [26, 38, 39, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"acc_descr_multiline\": { \"rules\": [11, 12, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"acc_descr\": { \"rules\": [9, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"acc_title\": { \"rules\": [7, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"callback_args\": { \"rules\": [22, 23, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"callback_name\": { \"rules\": [19, 20, 21, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"href\": { \"rules\": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"struct\": { \"rules\": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"generic\": { \"rules\": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"bqstring\": { \"rules\": [26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"string\": { \"rules\": [24, 25, 26, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 96], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 26, 27, 28, 37, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96], \"inclusive\": true } }\n };\n return lexer2;\n }();\n parser2.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser2;\n parser2.Parser = Parser;\n return new Parser();\n}();\nparser.parser = parser;\nconst parser$1 = parser;\nconst visibilityValues = [\"#\", \"+\", \"~\", \"-\", \"\"];\nclass ClassMember {\n constructor(input, memberType) {\n this.memberType = memberType;\n this.visibility = \"\";\n this.classifier = \"\";\n const sanitizedInput = sanitizeText$1(input, getConfig());\n this.parseMember(sanitizedInput);\n }\n getDisplayDetails() {\n let displayText = this.visibility + parseGenericTypes(this.id);\n if (this.memberType === \"method\") {\n displayText += `(${parseGenericTypes(this.parameters.trim())})`;\n if (this.returnType) {\n displayText += \" : \" + parseGenericTypes(this.returnType);\n }\n }\n displayText = displayText.trim();\n const cssStyle = this.parseClassifier();\n return {\n displayText,\n cssStyle\n };\n }\n parseMember(input) {\n let potentialClassifier = \"\";\n if (this.memberType === \"method\") {\n const methodRegEx = /([#+~-])?(.+)\\((.*)\\)([\\s$*])?(.*)([$*])?/;\n const match = input.match(methodRegEx);\n if (match) {\n const detectedVisibility = match[1] ? match[1].trim() : \"\";\n if (visibilityValues.includes(detectedVisibility)) {\n this.visibility = detectedVisibility;\n }\n this.id = match[2].trim();\n this.parameters = match[3] ? match[3].trim() : \"\";\n potentialClassifier = match[4] ? match[4].trim() : \"\";\n this.returnType = match[5] ? match[5].trim() : \"\";\n if (potentialClassifier === \"\") {\n const lastChar = this.returnType.substring(this.returnType.length - 1);\n if (lastChar.match(/[$*]/)) {\n potentialClassifier = lastChar;\n this.returnType = this.returnType.substring(0, this.returnType.length - 1);\n }\n }\n }\n } else {\n const length = input.length;\n const firstChar = input.substring(0, 1);\n const lastChar = input.substring(length - 1);\n if (visibilityValues.includes(firstChar)) {\n this.visibility = firstChar;\n }\n if (lastChar.match(/[$*]/)) {\n potentialClassifier = lastChar;\n }\n this.id = input.substring(\n this.visibility === \"\" ? 0 : 1,\n potentialClassifier === \"\" ? length : length - 1\n );\n }\n this.classifier = potentialClassifier;\n }\n parseClassifier() {\n switch (this.classifier) {\n case \"*\":\n return \"font-style:italic;\";\n case \"$\":\n return \"text-decoration:underline;\";\n default:\n return \"\";\n }\n }\n}\nconst MERMAID_DOM_ID_PREFIX = \"classId-\";\nlet relations = [];\nlet classes = {};\nlet notes = [];\nlet classCounter = 0;\nlet namespaces = {};\nlet namespaceCounter = 0;\nlet functions = [];\nconst sanitizeText = (txt) => common.sanitizeText(txt, getConfig());\nconst splitClassNameAndType = function(_id) {\n const id = common.sanitizeText(_id, getConfig());\n let genericType = \"\";\n let className = id;\n if (id.indexOf(\"~\") > 0) {\n const split = id.split(\"~\");\n className = sanitizeText(split[0]);\n genericType = sanitizeText(split[1]);\n }\n return { className, type: genericType };\n};\nconst setClassLabel = function(_id, label) {\n const id = common.sanitizeText(_id, getConfig());\n if (label) {\n label = sanitizeText(label);\n }\n const { className } = splitClassNameAndType(id);\n classes[className].label = label;\n};\nconst addClass = function(_id) {\n const id = common.sanitizeText(_id, getConfig());\n const { className, type } = splitClassNameAndType(id);\n if (Object.hasOwn(classes, className)) {\n return;\n }\n const name = common.sanitizeText(className, getConfig());\n classes[name] = {\n id: name,\n type,\n label: name,\n cssClasses: [],\n methods: [],\n members: [],\n annotations: [],\n styles: [],\n domId: MERMAID_DOM_ID_PREFIX + name + \"-\" + classCounter\n };\n classCounter++;\n};\nconst lookUpDomId = function(_id) {\n const id = common.sanitizeText(_id, getConfig());\n if (id in classes) {\n return classes[id].domId;\n }\n throw new Error(\"Class not found: \" + id);\n};\nconst clear = function() {\n relations = [];\n classes = {};\n notes = [];\n functions = [];\n functions.push(setupToolTips);\n namespaces = {};\n namespaceCounter = 0;\n clear$1();\n};\nconst getClass = function(id) {\n return classes[id];\n};\nconst getClasses = function() {\n return classes;\n};\nconst getRelations = function() {\n return relations;\n};\nconst getNotes = function() {\n return notes;\n};\nconst addRelation = function(relation) {\n log.debug(\"Adding relation: \" + JSON.stringify(relation));\n addClass(relation.id1);\n addClass(relation.id2);\n relation.id1 = splitClassNameAndType(relation.id1).className;\n relation.id2 = splitClassNameAndType(relation.id2).className;\n relation.relationTitle1 = common.sanitizeText(relation.relationTitle1.trim(), getConfig());\n relation.relationTitle2 = common.sanitizeText(relation.relationTitle2.trim(), getConfig());\n relations.push(relation);\n};\nconst addAnnotation = function(className, annotation) {\n const validatedClassName = splitClassNameAndType(className).className;\n classes[validatedClassName].annotations.push(annotation);\n};\nconst addMember = function(className, member) {\n addClass(className);\n const validatedClassName = splitClassNameAndType(className).className;\n const theClass = classes[validatedClassName];\n if (typeof member === \"string\") {\n const memberString = member.trim();\n if (memberString.startsWith(\"<<\") && memberString.endsWith(\">>\")) {\n theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2)));\n } else if (memberString.indexOf(\")\") > 0) {\n theClass.methods.push(new ClassMember(memberString, \"method\"));\n } else if (memberString) {\n theClass.members.push(new ClassMember(memberString, \"attribute\"));\n }\n }\n};\nconst addMembers = function(className, members) {\n if (Array.isArray(members)) {\n members.reverse();\n members.forEach((member) => addMember(className, member));\n }\n};\nconst addNote = function(text, className) {\n const note = {\n id: `note${notes.length}`,\n class: className,\n text\n };\n notes.push(note);\n};\nconst cleanupLabel = function(label) {\n if (label.startsWith(\":\")) {\n label = label.substring(1);\n }\n return sanitizeText(label.trim());\n};\nconst setCssClass = function(ids, className) {\n ids.split(\",\").forEach(function(_id) {\n let id = _id;\n if (_id[0].match(/\\d/)) {\n id = MERMAID_DOM_ID_PREFIX + id;\n }\n if (classes[id] !== void 0) {\n classes[id].cssClasses.push(className);\n }\n });\n};\nconst setTooltip = function(ids, tooltip) {\n ids.split(\",\").forEach(function(id) {\n if (tooltip !== void 0) {\n classes[id].tooltip = sanitizeText(tooltip);\n }\n });\n};\nconst getTooltip = function(id, namespace) {\n if (namespace) {\n return namespaces[namespace].classes[id].tooltip;\n }\n return classes[id].tooltip;\n};\nconst setLink = function(ids, linkStr, target) {\n const config = getConfig();\n ids.split(\",\").forEach(function(_id) {\n let id = _id;\n if (_id[0].match(/\\d/)) {\n id = MERMAID_DOM_ID_PREFIX + id;\n }\n if (classes[id] !== void 0) {\n classes[id].link = utils.formatUrl(linkStr, config);\n if (config.securityLevel === \"sandbox\") {\n classes[id].linkTarget = \"_top\";\n } else if (typeof target === \"string\") {\n classes[id].linkTarget = sanitizeText(target);\n } else {\n classes[id].linkTarget = \"_blank\";\n }\n }\n });\n setCssClass(ids, \"clickable\");\n};\nconst setClickEvent = function(ids, functionName, functionArgs) {\n ids.split(\",\").forEach(function(id) {\n setClickFunc(id, functionName, functionArgs);\n classes[id].haveCallback = true;\n });\n setCssClass(ids, \"clickable\");\n};\nconst setClickFunc = function(_domId, functionName, functionArgs) {\n const domId = common.sanitizeText(_domId, getConfig());\n const config = getConfig();\n if (config.securityLevel !== \"loose\") {\n return;\n }\n if (functionName === void 0) {\n return;\n }\n const id = domId;\n if (classes[id] !== void 0) {\n const elemId = lookUpDomId(id);\n let argList = [];\n if (typeof functionArgs === \"string\") {\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n if (argList.length === 0) {\n argList.push(elemId);\n }\n functions.push(function() {\n const elem = document.querySelector(`[id=\"${elemId}\"]`);\n if (elem !== null) {\n elem.addEventListener(\n \"click\",\n function() {\n utils.runFunc(functionName, ...argList);\n },\n false\n );\n }\n });\n }\n};\nconst bindFunctions = function(element) {\n functions.forEach(function(fun) {\n fun(element);\n });\n};\nconst lineType = {\n LINE: 0,\n DOTTED_LINE: 1\n};\nconst relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3,\n LOLLIPOP: 4\n};\nconst setupToolTips = function(element) {\n let tooltipElem = select(\".mermaidTooltip\");\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = select(\"body\").append(\"div\").attr(\"class\", \"mermaidTooltip\").style(\"opacity\", 0);\n }\n const svg = select(element).select(\"svg\");\n const nodes = svg.selectAll(\"g.node\");\n nodes.on(\"mouseover\", function() {\n const el = select(this);\n const title = el.attr(\"title\");\n if (title === null) {\n return;\n }\n const rect = this.getBoundingClientRect();\n tooltipElem.transition().duration(200).style(\"opacity\", \".9\");\n tooltipElem.text(el.attr(\"title\")).style(\"left\", window.scrollX + rect.left + (rect.right - rect.left) / 2 + \"px\").style(\"top\", window.scrollY + rect.top - 14 + document.body.scrollTop + \"px\");\n tooltipElem.html(tooltipElem.html().replace(/<br\\/>/g, \"
\"));\n el.classed(\"hover\", true);\n }).on(\"mouseout\", function() {\n tooltipElem.transition().duration(500).style(\"opacity\", 0);\n const el = select(this);\n el.classed(\"hover\", false);\n });\n};\nfunctions.push(setupToolTips);\nlet direction = \"TB\";\nconst getDirection = () => direction;\nconst setDirection = (dir) => {\n direction = dir;\n};\nconst addNamespace = function(id) {\n if (namespaces[id] !== void 0) {\n return;\n }\n namespaces[id] = {\n id,\n classes: {},\n children: {},\n domId: MERMAID_DOM_ID_PREFIX + id + \"-\" + namespaceCounter\n };\n namespaceCounter++;\n};\nconst getNamespace = function(name) {\n return namespaces[name];\n};\nconst getNamespaces = function() {\n return namespaces;\n};\nconst addClassesToNamespace = function(id, classNames) {\n if (namespaces[id] === void 0) {\n return;\n }\n for (const name of classNames) {\n const { className } = splitClassNameAndType(name);\n classes[className].parent = id;\n namespaces[id].classes[className] = classes[className];\n }\n};\nconst setCssStyle = function(id, styles2) {\n const thisClass = classes[id];\n if (!styles2 || !thisClass) {\n return;\n }\n for (const s of styles2) {\n if (s.includes(\",\")) {\n thisClass.styles.push(...s.split(\",\"));\n } else {\n thisClass.styles.push(s);\n }\n }\n};\nconst db = {\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n getConfig: () => getConfig().class,\n addClass,\n bindFunctions,\n clear,\n getClass,\n getClasses,\n getNotes,\n addAnnotation,\n addNote,\n getRelations,\n addRelation,\n getDirection,\n setDirection,\n addMember,\n addMembers,\n cleanupLabel,\n lineType,\n relationType,\n setClickEvent,\n setCssClass,\n setLink,\n getTooltip,\n setTooltip,\n lookUpDomId,\n setDiagramTitle,\n getDiagramTitle,\n setClassLabel,\n addNamespace,\n addClassesToNamespace,\n getNamespace,\n getNamespaces,\n setCssStyle\n};\nconst getStyles = (options) => `g.classGroup text {\n fill: ${options.nodeBorder || options.classText};\n stroke: none;\n font-family: ${options.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${options.classText};\n}\n.edgeLabel .label rect {\n fill: ${options.mainBkg};\n}\n.label text {\n fill: ${options.classText};\n}\n.edgeLabel .label span {\n background: ${options.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${options.nodeBorder};\n stroke-width: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${options.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${options.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${options.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${options.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n line-height: initial;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n}\n`;\nconst styles = getStyles;\nexport {\n db as d,\n parser$1 as p,\n styles as s\n};\n"], + "mappings": "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CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,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,SAAS,EACP,kBACT,IAAK,IACH,KAAK,MAAM,qBAAqB,EAChC,MACF,IAAK,IACH,KAAK,SAAS,EACd,MACF,IAAK,IACH,MAAO,4BACT,IAAK,IACH,MAAO,GACT,IAAK,IACH,MACF,IAAK,IACH,MAAO,GACT,IAAK,IACH,MAAO,GACT,IAAK,IACH,MAAO,aACT,IAAK,IACH,KAAK,MAAM,eAAe,EAC1B,MACF,IAAK,IACH,KAAK,SAAS,EACd,MACF,IAAK,IACH,KAAK,SAAS,EACd,KAAK,MAAM,eAAe,EAC1B,MACF,IAAK,IACH,MAAO,IACT,IAAK,IACH,KAAK,SAAS,EACd,MACF,IAAK,IACH,MAAO,IACT,IAAK,IACH,KAAK,SAAS,EACd,MACF,IAAK,IACH,MAAO,MACT,IAAK,IACH,KAAK,MAAM,QAAQ,EACnB,MACF,IAAK,IACH,MAAO,IACT,IAAK,IACH,YAAK,MAAM,WAAW,EACf,GACT,IAAK,IACH,YAAK,SAAS,EACP,EACT,IAAK,IACH,MACF,IAAK,IACH,YAAK,MAAM,gBAAgB,EACpB,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,MAAO,gBACT,IAAK,IACH,MAAO,GACT,IAAK,IACH,MACF,IAAK,IACH,MAAO,aACT,IAAK,IACH,YAAK,MAAM,OAAO,EACX,GACT,IAAK,IACH,YAAK,SAAS,EACP,EACT,IAAK,IACH,MACF,IAAK,IACH,YAAK,SAAS,EACd,KAAK,SAAS,EACP,GACT,IAAK,IACH,YAAK,MAAM,YAAY,EAChB,GACT,IAAK,IACH,YAAK,SAAS,EACP,GACT,IAAK,IACH,MAAO,gBACT,IAAK,IACH,MAAO,aACT,IAAK,IACH,MAAO,iBACT,IAAK,IACH,MACF,IAAK,IACH,MAAO,SACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,MAAO,IACT,IAAK,IACH,KAAK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", + "names": ["parser", "o", "k", "v", "o2", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "$VG", "$VH", "$VI", "$VJ", "$VK", "$VL", "$VM", "$VN", "$VO", "$VP", "$VQ", "$VR", "parser2", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "TERROR", "EOF", "args", "lexer2", "sharedState", "yyloc", "ranges", "lex", "token", "symbol", "state", "action", "r", "yyval", "p", "len", "newState", "expected", "errStr", "lexer", "ch", "lines", "oldLines", "n", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "Parser", "parser$1", "visibilityValues", "ClassMember", "memberType", "sanitizedInput", "sanitizeText$2", "getConfig", "displayText", "parseGenericTypes", "cssStyle", "potentialClassifier", "methodRegEx", "detectedVisibility", "lastChar", "length", "firstChar", "MERMAID_DOM_ID_PREFIX", "relations", "classes", "notes", "classCounter", "namespaces", "namespaceCounter", "functions", "sanitizeText", "txt", "common$1", "splitClassNameAndType", "_id", "id", "genericType", "className", "split", "setClassLabel", "label", "addClass", "type", "name", "lookUpDomId", "clear", "setupToolTips", "getClass", "getClasses", "getRelations", "getNotes", "addRelation", "relation", "log$1", "addAnnotation", "annotation", "validatedClassName", "addMember", "member", "theClass", "memberString", "addMembers", "members", "addNote", "text", "note", "cleanupLabel", "setCssClass", "ids", "setTooltip", "tooltip", "getTooltip", "namespace", "setLink", "linkStr", "target", "config", "utils", "setClickEvent", "functionName", "functionArgs", "setClickFunc", "_domId", "domId", "elemId", "argList", "item", "elem", "bindFunctions", "element", "fun", "lineType", "relationType", "tooltipElem", "select_default", "el", "rect", "direction", "getDirection", "setDirection", "dir", "addNamespace", "getNamespace", "getNamespaces", "addClassesToNamespace", "classNames", "setCssStyle", "styles2", "thisClass", "s", "db", "setAccTitle", "getAccTitle", "getAccDescription", "setAccDescription", "setDiagramTitle", "getDiagramTitle", "getStyles", "options", "styles"] +} diff --git a/public/chunk-RNO6SWHZ.min.js b/public/chunk-RNO6SWHZ.min.js new file mode 100644 index 000000000..7b3329320 --- /dev/null +++ b/public/chunk-RNO6SWHZ.min.js @@ -0,0 +1,2 @@ +import{A as b,a as N,c as vr,d as K,e as _r,f as P,g as s,h as I,i as z,j as _,k as wr,l as Er,m as l,n as C,o as y,p as V,q as x,r as T,s as B,t as A,u as k,v as F,w as br,x as L,y as D,z as Q}from"./chunk-K2MRC2FE.min.js";import{Ba as Y,ha as mr,xa as G}from"./chunk-YEACHCAA.min.js";function g(r,e,n,o){var t;do t=D(o);while(r.hasNode(t));return n.dummy=e,r.setNode(t,n),t}function yr(r){var e=new b().setGraph(r.graph());return s(r.nodes(),function(n){e.setNode(n,r.node(n))}),s(r.edges(),function(n){var o=e.edge(n.v,n.w)||{weight:0,minlen:1},t=r.edge(n);e.setEdge(n.v,n.w,{weight:o.weight+t.weight,minlen:Math.max(o.minlen,t.minlen)})}),e}function q(r){var e=new b({multigraph:r.isMultigraph()}).setGraph(r.graph());return s(r.nodes(),function(n){r.children(n).length||e.setNode(n,r.node(n))}),s(r.edges(),function(n){e.setEdge(n,r.edge(n))}),e}function Z(r,e){var n=r.x,o=r.y,t=e.x-n,i=e.y-o,a=r.width/2,f=r.height/2;if(!t&&!i)throw new Error("Not possible to find intersection inside of the rectangle");var u,d;return Math.abs(i)*a>Math.abs(t)*f?(i<0&&(f=-f),u=f*t/i,d=f):(t<0&&(a=-a),u=a,d=a*i/t),{x:n+u,y:o+d}}function R(r){var e=_(k(rr(r)+1),function(){return[]});return s(r.nodes(),function(n){var o=r.node(n),t=o.rank;y(t)||(e[t][o.order]=n)}),e}function xr(r){var e=T(_(r.nodes(),function(n){return r.node(n).rank}));s(r.nodes(),function(n){var o=r.node(n);l(o,"rank")&&(o.rank-=e)})}function kr(r){var e=T(_(r.nodes(),function(i){return r.node(i).rank})),n=[];s(r.nodes(),function(i){var a=r.node(i).rank-e;n[a]||(n[a]=[]),n[a].push(i)});var o=0,t=r.graph().nodeRankFactor;s(n,function(i,a){y(i)&&a%t!==0?--o:o&&s(i,function(f){r.node(f).rank+=o})})}function $(r,e,n,o){var t={width:0,height:0};return arguments.length>=4&&(t.rank=n,t.order=o),g(r,"border",t,e)}function rr(r){return x(_(r.nodes(),function(e){var n=r.node(e).rank;if(!y(n))return n}))}function gr(r,e){var n={lhs:[],rhs:[]};return s(r,function(o){e(o)?n.lhs.push(o):n.rhs.push(o)}),n}function Nr(r,e){var n=K();try{return e()}finally{console.log(r+" time: "+(K()-n)+"ms")}}function Ir(r,e){return e()}function Cr(r){function e(n){var o=r.children(n),t=r.node(n);if(o.length&&s(o,e),l(t,"minRank")){t.borderLeft=[],t.borderRight=[];for(var i=t.minRank,a=t.maxRank+1;i0;--f)if(a=e[f].dequeue(),a){o=o.concat(or(r,e,n,a,!0));break}}}return o}function or(r,e,n,o,t){var i=t?[]:void 0;return s(r.inEdges(o.v),function(a){var f=r.edge(a),u=r.node(a.v);t&&i.push({v:a.v,w:a.w}),u.out-=f,tr(e,n,u)}),s(r.outEdges(o.v),function(a){var f=r.edge(a),u=a.w,d=r.node(u);d.in-=f,tr(e,n,d)}),r.removeNode(o.v),i}function Ee(r,e){var n=new b,o=0,t=0;s(r.nodes(),function(f){n.setNode(f,{v:f,in:0,out:0})}),s(r.edges(),function(f){var u=n.edge(f.v,f.w)||0,d=e(f),c=u+d;n.setEdge(f.v,f.w,c),t=Math.max(t,n.node(f.v).out+=d),o=Math.max(o,n.node(f.w).in+=d)});var i=k(t+o+3).map(function(){return new X}),a=o+1;return s(n.nodes(),function(f){tr(i,a,n.node(f))}),{graph:n,buckets:i,zeroIdx:a}}function tr(r,e,n){n.out?n.in?r[n.out-n.in+e].enqueue(n):r[r.length-1].enqueue(n):r[0].enqueue(n)}function Or(r){var e=r.graph().acyclicer==="greedy"?Fr(r,n(r)):be(r);s(e,function(o){var t=r.edge(o);r.removeEdge(o),t.forwardName=o.name,t.reversed=!0,r.setEdge(o.w,o.v,t,D("rev"))});function n(o){return function(t){return o.edge(t).weight}}}function be(r){var e=[],n={},o={};function t(i){l(o,i)||(o[i]=!0,n[i]=!0,s(r.outEdges(i),function(a){l(n,a.w)?e.push(a):t(a.w)}),delete n[i])}return s(r.nodes(),t),e}function Gr(r){s(r.edges(),function(e){var n=r.edge(e);if(n.reversed){r.removeEdge(e);var o=n.forwardName;delete n.reversed,delete n.forwardName,r.setEdge(e.w,e.v,n,o)}})}function Br(r){r.graph().dummyChains=[],s(r.edges(),function(e){ye(r,e)})}function ye(r,e){var n=e.v,o=r.node(n).rank,t=e.w,i=r.node(t).rank,a=e.name,f=r.edge(e),u=f.labelRank;if(i!==o+1){r.removeEdge(e);var d,c,h;for(h=0,++o;oa.lim&&(f=a,u=!0);var d=I(e.edges(),function(c){return u===Yr(r,r.node(c.v),f)&&u!==Yr(r,r.node(c.w),f)});return B(d,function(c){return O(e,c)})}function Xr(r,e,n,o){var t=n.v,i=n.w;r.removeEdge(t,i),r.setEdge(o.v,o.w,{}),ur(r),sr(r,e),Re(r,e)}function Re(r,e){var n=z(r.nodes(),function(t){return!e.node(t).parent}),o=fr(r,n);o=o.slice(1),s(o,function(t){var i=r.node(t).parent,a=e.edge(t,i),f=!1;a||(a=e.edge(i,t),f=!0),e.node(t).rank=e.node(i).rank+(f?a.minlen:-a.minlen)})}function Se(r,e,n){return r.hasEdge(e,n)}function Yr(r,e,n){return n.low<=e.lim&&e.lim<=n.lim}function dr(r){switch(r.graph().ranker){case"network-simplex":Hr(r);break;case"tight-tree":Pe(r);break;case"longest-path":Me(r);break;default:Hr(r)}}var Me=U;function Pe(r){U(r),H(r)}function Hr(r){M(r)}function Jr(r){var e=g(r,"root",{},"_root"),n=Fe(r),o=x(C(n))-1,t=2*o+1;r.graph().nestingRoot=e,s(r.edges(),function(a){r.edge(a).minlen*=t});var i=Oe(r)+1;s(r.children(),function(a){Kr(r,e,t,i,o,n,a)}),r.graph().nodeRankFactor=t}function Kr(r,e,n,o,t,i,a){var f=r.children(a);if(!f.length){a!==e&&r.setEdge(e,a,{weight:0,minlen:n});return}var u=$(r,"_bt"),d=$(r,"_bb"),c=r.node(a);r.setParent(u,a),c.borderTop=u,r.setParent(d,a),c.borderBottom=d,s(f,function(h){Kr(r,e,n,o,t,i,h);var p=r.node(h),m=p.borderTop?p.borderTop:h,v=p.borderBottom?p.borderBottom:h,E=p.borderTop?o:2*o,j=m!==v?1:t-i[a]+1;r.setEdge(u,m,{weight:E,minlen:j,nestingEdge:!0}),r.setEdge(v,d,{weight:E,minlen:j,nestingEdge:!0})}),r.parent(a)||r.setEdge(e,u,{weight:0,minlen:t+i[a]})}function Fe(r){var e={};function n(o,t){var i=r.children(o);i&&i.length&&s(i,function(a){n(a,t+1)}),e[o]=t}return s(r.children(),function(o){n(o,1)}),e}function Oe(r){return F(r.edges(),function(e,n){return e+r.edge(n).weight},0)}function Qr(r){var e=r.graph();r.removeNode(e.nestingRoot),delete e.nestingRoot,s(r.edges(),function(n){var o=r.edge(n);o.nestingEdge&&r.removeEdge(n)})}function Zr(r,e,n){var o={},t;s(n,function(i){for(var a=r.parent(i),f,u;a;){if(f=r.parent(a),f?(u=o[f],o[f]=a):(u=t,t=a),u&&u!==a){e.setEdge(u,a);return}a=f}})}function $r(r,e,n){var o=Ve(r),t=new b({compound:!0}).setGraph({root:o}).setDefaultNodeLabel(function(i){return r.node(i)});return s(r.nodes(),function(i){var a=r.node(i),f=r.parent(i);(a.rank===e||a.minRank<=e&&e<=a.maxRank)&&(t.setNode(i),t.setParent(i,f||o),s(r[n](i),function(u){var d=u.v===i?u.w:u.v,c=t.edge(d,i),h=y(c)?0:c.weight;t.setEdge(d,i,{weight:r.edge(u).weight+h})}),l(a,"minRank")&&t.setNode(i,{borderLeft:a.borderLeft[e],borderRight:a.borderRight[e]}))}),t}function Ve(r){for(var e;r.hasNode(e=D("_root")););return e}function re(r,e){for(var n=0,o=1;o0;)c%2&&(h+=f[c+1]),c=c-1>>1,f[c]+=d.weight;u+=d.weight*h})),u}function ee(r){var e={},n=I(r.nodes(),function(f){return!r.children(f).length}),o=x(_(n,function(f){return r.node(f).rank})),t=_(k(o+1),function(){return[]});function i(f){if(!l(e,f)){e[f]=!0;var u=r.node(f);t[u.rank].push(f),s(r.successors(f),i)}}var a=L(n,function(f){return r.node(f).rank});return s(a,i),t}function ne(r,e){return _(e,function(n){var o=r.inEdges(n);if(o.length){var t=F(o,function(i,a){var f=r.edge(a),u=r.node(a.v);return{sum:i.sum+f.weight*u.order,weight:i.weight+f.weight}},{sum:0,weight:0});return{v:n,barycenter:t.sum/t.weight,weight:t.weight}}else return{v:n}})}function oe(r,e){var n={};s(r,function(t,i){var a=n[t.v]={indegree:0,in:[],out:[],vs:[t.v],i};y(t.barycenter)||(a.barycenter=t.barycenter,a.weight=t.weight)}),s(e.edges(),function(t){var i=n[t.v],a=n[t.w];!y(i)&&!y(a)&&(a.indegree++,i.out.push(n[t.w]))});var o=I(n,function(t){return!t.indegree});return Ae(o)}function Ae(r){var e=[];function n(i){return function(a){a.merged||(y(a.barycenter)||y(i.barycenter)||a.barycenter>=i.barycenter)&&De(i,a)}}function o(i){return function(a){a.in.push(i),--a.indegree===0&&r.push(a)}}for(;r.length;){var t=r.pop();e.push(t),s(t.in.reverse(),n(t)),s(t.out,o(t))}return _(I(e,function(i){return!i.merged}),function(i){return A(i,["vs","i","barycenter","weight"])})}function De(r,e){var n=0,o=0;r.weight&&(n+=r.barycenter*r.weight,o+=r.weight),e.weight&&(n+=e.barycenter*e.weight,o+=e.weight),r.vs=e.vs.concat(r.vs),r.barycenter=n/o,r.weight=o,r.i=Math.min(e.i,r.i),e.merged=!0}function ie(r,e){var n=gr(r,function(c){return l(c,"barycenter")}),o=n.lhs,t=L(n.rhs,function(c){return-c.i}),i=[],a=0,f=0,u=0;o.sort(je(!!e)),u=te(i,t,u),s(o,function(c){u+=c.vs.length,i.push(c.vs),a+=c.barycenter*c.weight,f+=c.weight,u=te(i,t,u)});var d={vs:N(i)};return f&&(d.barycenter=a/f,d.weight=f),d}function te(r,e,n){for(var o;e.length&&(o=P(e)).i<=n;)e.pop(),r.push(o.vs),n++;return n}function je(r){return function(e,n){return e.barycentern.barycenter?1:r?n.i-e.i:e.i-n.i}}function cr(r,e,n,o){var t=r.children(e),i=r.node(e),a=i?i.borderLeft:void 0,f=i?i.borderRight:void 0,u={};a&&(t=I(t,function(v){return v!==a&&v!==f}));var d=ne(r,t);s(d,function(v){if(r.children(v.v).length){var E=cr(r,v.v,n,o);u[v.v]=E,l(E,"barycenter")&&ze(v,E)}});var c=oe(d,n);Ye(c,u);var h=ie(c,o);if(a&&(h.vs=N([a,h.vs,f]),r.predecessors(a).length)){var p=r.node(r.predecessors(a)[0]),m=r.node(r.predecessors(f)[0]);l(h,"barycenter")||(h.barycenter=0,h.weight=0),h.barycenter=(h.barycenter*h.weight+p.order+m.order)/(h.weight+2),h.weight+=2}return h}function Ye(r,e){s(r,function(n){n.vs=N(n.vs.map(function(o){return e[o]?e[o].vs:o}))})}function ze(r,e){y(r.barycenter)?(r.barycenter=e.barycenter,r.weight=e.weight):(r.barycenter=(r.barycenter*r.weight+e.barycenter*e.weight)/(r.weight+e.weight),r.weight+=e.weight)}function se(r){var e=rr(r),n=ae(r,k(1,e+1),"inEdges"),o=ae(r,k(e-1,-1,-1),"outEdges"),t=ee(r);fe(r,t);for(var i=Number.POSITIVE_INFINITY,a,f=0,u=0;u<4;++f,++u){Ue(f%2?n:o,f%4>=2),t=R(r);var d=re(r,t);da||f>e[u].lim));for(d=u,u=o;(u=r.parent(u))!==d;)i.push(u);return{path:t.concat(i.reverse()),lca:d}}function qe(r){var e={},n=0;function o(t){var i=n;s(r.children(t),o),e[t]={low:i,lim:n++}}return s(r.children(),o),e}function Xe(r,e){var n={};function o(t,i){var a=0,f=0,u=t.length,d=P(i);return s(i,function(c,h){var p=Je(r,c),m=p?r.node(p).order:u;(p||c===d)&&(s(i.slice(f,h+1),function(v){s(r.predecessors(v),function(E){var j=r.node(E),pr=j.order;(prd)&&de(n,p,c)})})}function t(i,a){var f=-1,u,d=0;return s(a,function(c,h){if(r.node(c).dummy==="border"){var p=r.predecessors(c);p.length&&(u=r.node(p[0]).order,o(a,d,h,f,u),d=h,f=u)}o(a,d,a.length,u,i.length)}),a}return F(e,t),n}function Je(r,e){if(r.node(e).dummy)return z(r.predecessors(e),function(n){return r.node(n).dummy})}function de(r,e,n){if(e>n){var o=e;e=n,n=o}var t=r[e];t||(r[e]=t={}),t[n]=!0}function Ke(r,e,n){if(e>n){var o=e;e=n,n=o}return l(r[e],n)}function Qe(r,e,n,o){var t={},i={},a={};return s(e,function(f){s(f,function(u,d){t[u]=u,i[u]=u,a[u]=d})}),s(e,function(f){var u=-1;s(f,function(d){var c=o(d);if(c.length){c=L(c,function(E){return a[E]});for(var h=(c.length-1)/2,p=Math.floor(h),m=Math.ceil(h);p<=m;++p){var v=c[p];i[d]===d&&u Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = (h * dx) / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = (w * dy) / dx;\n }\n\n return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n var layering = _.map(_.range(maxRank(g) + 1), function () {\n return [];\n });\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n var rank = node.rank;\n if (!_.isUndefined(rank)) {\n layering[rank][node.order] = v;\n }\n });\n return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n var min = _.min(\n _.map(g.nodes(), function (v) {\n return g.node(v).rank;\n })\n );\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (_.has(node, 'rank')) {\n node.rank -= min;\n }\n });\n}\n\nfunction removeEmptyRanks(g) {\n // Ranks may not start at 0, so we need to offset them\n var offset = _.min(\n _.map(g.nodes(), function (v) {\n return g.node(v).rank;\n })\n );\n\n var layers = [];\n _.forEach(g.nodes(), function (v) {\n var rank = g.node(v).rank - offset;\n if (!layers[rank]) {\n layers[rank] = [];\n }\n layers[rank].push(v);\n });\n\n var delta = 0;\n var nodeRankFactor = g.graph().nodeRankFactor;\n _.forEach(layers, function (vs, i) {\n if (_.isUndefined(vs) && i % nodeRankFactor !== 0) {\n --delta;\n } else if (delta) {\n _.forEach(vs, function (v) {\n g.node(v).rank += delta;\n });\n }\n });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n var node = {\n width: 0,\n height: 0,\n };\n if (arguments.length >= 4) {\n node.rank = rank;\n node.order = order;\n }\n return addDummyNode(g, 'border', node, prefix);\n}\n\nfunction maxRank(g) {\n return _.max(\n _.map(g.nodes(), function (v) {\n var rank = g.node(v).rank;\n if (!_.isUndefined(rank)) {\n return rank;\n }\n })\n );\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n var result = { lhs: [], rhs: [] };\n _.forEach(collection, function (value) {\n if (fn(value)) {\n result.lhs.push(value);\n } else {\n result.rhs.push(value);\n }\n });\n return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n var start = _.now();\n try {\n return fn();\n } finally {\n console.log(name + ' time: ' + (_.now() - start) + 'ms');\n }\n}\n\nfunction notime(name, fn) {\n return fn();\n}\n", "import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { addBorderSegments };\n\nfunction addBorderSegments(g) {\n function dfs(v) {\n var children = g.children(v);\n var node = g.node(v);\n if (children.length) {\n _.forEach(children, dfs);\n }\n\n if (_.has(node, 'minRank')) {\n node.borderLeft = [];\n node.borderRight = [];\n for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) {\n addBorderNode(g, 'borderLeft', '_bl', v, node, rank);\n addBorderNode(g, 'borderRight', '_br', v, node, rank);\n }\n }\n }\n\n _.forEach(g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n var label = { width: 0, height: 0, rank: rank, borderType: prop };\n var prev = sgNode[prop][rank - 1];\n var curr = util.addDummyNode(g, 'border', label, prefix);\n sgNode[prop][rank] = curr;\n g.setParent(curr, sg);\n if (prev) {\n g.setEdge(prev, curr, { weight: 1 });\n }\n}\n", "import * as _ from 'lodash-es';\n\nexport { adjust, undo };\n\nfunction adjust(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === 'lr' || rankDir === 'rl') {\n swapWidthHeight(g);\n }\n}\n\nfunction undo(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === 'bt' || rankDir === 'rl') {\n reverseY(g);\n }\n\n if (rankDir === 'lr' || rankDir === 'rl') {\n swapXY(g);\n swapWidthHeight(g);\n }\n}\n\nfunction swapWidthHeight(g) {\n _.forEach(g.nodes(), function (v) {\n swapWidthHeightOne(g.node(v));\n });\n _.forEach(g.edges(), function (e) {\n swapWidthHeightOne(g.edge(e));\n });\n}\n\nfunction swapWidthHeightOne(attrs) {\n var w = attrs.width;\n attrs.width = attrs.height;\n attrs.height = w;\n}\n\nfunction reverseY(g) {\n _.forEach(g.nodes(), function (v) {\n reverseYOne(g.node(v));\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, reverseYOne);\n if (_.has(edge, 'y')) {\n reverseYOne(edge);\n }\n });\n}\n\nfunction reverseYOne(attrs) {\n attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n _.forEach(g.nodes(), function (v) {\n swapXYOne(g.node(v));\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, swapXYOne);\n if (_.has(edge, 'x')) {\n swapXYOne(edge);\n }\n });\n}\n\nfunction swapXYOne(attrs) {\n var x = attrs.x;\n attrs.x = attrs.y;\n attrs.y = x;\n}\n", "/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * \"Introduction to Algorithms\".\n */\n\nexport { List };\n\nclass List {\n constructor() {\n var sentinel = {};\n sentinel._next = sentinel._prev = sentinel;\n this._sentinel = sentinel;\n }\n dequeue() {\n var sentinel = this._sentinel;\n var entry = sentinel._prev;\n if (entry !== sentinel) {\n unlink(entry);\n return entry;\n }\n }\n enqueue(entry) {\n var sentinel = this._sentinel;\n if (entry._prev && entry._next) {\n unlink(entry);\n }\n entry._next = sentinel._next;\n sentinel._next._prev = entry;\n sentinel._next = entry;\n entry._prev = sentinel;\n }\n toString() {\n var strs = [];\n var sentinel = this._sentinel;\n var curr = sentinel._prev;\n while (curr !== sentinel) {\n strs.push(JSON.stringify(curr, filterOutLinks));\n curr = curr._prev;\n }\n return '[' + strs.join(', ') + ']';\n }\n}\n\nfunction unlink(entry) {\n entry._prev._next = entry._next;\n entry._next._prev = entry._prev;\n delete entry._next;\n delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n if (k !== '_next' && k !== '_prev') {\n return v;\n }\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\nimport { List } from './data/list.js';\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, \"A fast and\n * effective heuristic for the feedback arc set problem.\" This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\nexport { greedyFAS };\n\nvar DEFAULT_WEIGHT_FN = _.constant(1);\n\nfunction greedyFAS(g, weightFn) {\n if (g.nodeCount() <= 1) {\n return [];\n }\n var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n // Expand multi-edges\n return _.flatten(\n _.map(results, function (e) {\n return g.outEdges(e.v, e.w);\n })\n );\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n var results = [];\n var sources = buckets[buckets.length - 1];\n var sinks = buckets[0];\n\n var entry;\n while (g.nodeCount()) {\n while ((entry = sinks.dequeue())) {\n removeNode(g, buckets, zeroIdx, entry);\n }\n while ((entry = sources.dequeue())) {\n removeNode(g, buckets, zeroIdx, entry);\n }\n if (g.nodeCount()) {\n for (var i = buckets.length - 2; i > 0; --i) {\n entry = buckets[i].dequeue();\n if (entry) {\n results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n break;\n }\n }\n }\n }\n\n return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n var results = collectPredecessors ? [] : undefined;\n\n _.forEach(g.inEdges(entry.v), function (edge) {\n var weight = g.edge(edge);\n var uEntry = g.node(edge.v);\n\n if (collectPredecessors) {\n results.push({ v: edge.v, w: edge.w });\n }\n\n uEntry.out -= weight;\n assignBucket(buckets, zeroIdx, uEntry);\n });\n\n _.forEach(g.outEdges(entry.v), function (edge) {\n var weight = g.edge(edge);\n var w = edge.w;\n var wEntry = g.node(w);\n wEntry['in'] -= weight;\n assignBucket(buckets, zeroIdx, wEntry);\n });\n\n g.removeNode(entry.v);\n\n return results;\n}\n\nfunction buildState(g, weightFn) {\n var fasGraph = new Graph();\n var maxIn = 0;\n var maxOut = 0;\n\n _.forEach(g.nodes(), function (v) {\n fasGraph.setNode(v, { v: v, in: 0, out: 0 });\n });\n\n // Aggregate weights on nodes, but also sum the weights across multi-edges\n // into a single edge for the fasGraph.\n _.forEach(g.edges(), function (e) {\n var prevWeight = fasGraph.edge(e.v, e.w) || 0;\n var weight = weightFn(e);\n var edgeWeight = prevWeight + weight;\n fasGraph.setEdge(e.v, e.w, edgeWeight);\n maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight));\n maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight));\n });\n\n var buckets = _.range(maxOut + maxIn + 3).map(function () {\n return new List();\n });\n var zeroIdx = maxIn + 1;\n\n _.forEach(fasGraph.nodes(), function (v) {\n assignBucket(buckets, zeroIdx, fasGraph.node(v));\n });\n\n return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n if (!entry.out) {\n buckets[0].enqueue(entry);\n } else if (!entry['in']) {\n buckets[buckets.length - 1].enqueue(entry);\n } else {\n buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry);\n }\n}\n", "import * as _ from 'lodash-es';\nimport { greedyFAS } from './greedy-fas.js';\n\nexport { run, undo };\n\nfunction run(g) {\n var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g);\n _.forEach(fas, function (e) {\n var label = g.edge(e);\n g.removeEdge(e);\n label.forwardName = e.name;\n label.reversed = true;\n g.setEdge(e.w, e.v, label, _.uniqueId('rev'));\n });\n\n function weightFn(g) {\n return function (e) {\n return g.edge(e).weight;\n };\n }\n}\n\nfunction dfsFAS(g) {\n var fas = [];\n var stack = {};\n var visited = {};\n\n function dfs(v) {\n if (_.has(visited, v)) {\n return;\n }\n visited[v] = true;\n stack[v] = true;\n _.forEach(g.outEdges(v), function (e) {\n if (_.has(stack, e.w)) {\n fas.push(e);\n } else {\n dfs(e.w);\n }\n });\n delete stack[v];\n }\n\n _.forEach(g.nodes(), dfs);\n return fas;\n}\n\nfunction undo(g) {\n _.forEach(g.edges(), function (e) {\n var label = g.edge(e);\n if (label.reversed) {\n g.removeEdge(e);\n\n var forwardName = label.forwardName;\n delete label.reversed;\n delete label.forwardName;\n g.setEdge(e.w, e.v, label, forwardName);\n }\n });\n}\n", "import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { run, undo };\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n * 1. The input graph is a DAG.\n * 2. Each node in the graph has a \"rank\" property.\n *\n * Post-condition:\n *\n * 1. All edges in the graph have a length of 1.\n * 2. Dummy nodes are added where edges have been split into segments.\n * 3. The graph is augmented with a \"dummyChains\" attribute which contains\n * the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n g.graph().dummyChains = [];\n _.forEach(g.edges(), function (edge) {\n normalizeEdge(g, edge);\n });\n}\n\nfunction normalizeEdge(g, e) {\n var v = e.v;\n var vRank = g.node(v).rank;\n var w = e.w;\n var wRank = g.node(w).rank;\n var name = e.name;\n var edgeLabel = g.edge(e);\n var labelRank = edgeLabel.labelRank;\n\n if (wRank === vRank + 1) return;\n\n g.removeEdge(e);\n\n var dummy, attrs, i;\n for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n edgeLabel.points = [];\n attrs = {\n width: 0,\n height: 0,\n edgeLabel: edgeLabel,\n edgeObj: e,\n rank: vRank,\n };\n dummy = util.addDummyNode(g, 'edge', attrs, '_d');\n if (vRank === labelRank) {\n attrs.width = edgeLabel.width;\n attrs.height = edgeLabel.height;\n // @ts-expect-error\n attrs.dummy = 'edge-label';\n // @ts-expect-error\n attrs.labelpos = edgeLabel.labelpos;\n }\n g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n if (i === 0) {\n g.graph().dummyChains.push(dummy);\n }\n v = dummy;\n }\n\n g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n _.forEach(g.graph().dummyChains, function (v) {\n var node = g.node(v);\n var origLabel = node.edgeLabel;\n var w;\n g.setEdge(node.edgeObj, origLabel);\n while (node.dummy) {\n w = g.successors(v)[0];\n g.removeNode(v);\n origLabel.points.push({ x: node.x, y: node.y });\n if (node.dummy === 'edge-label') {\n origLabel.x = node.x;\n origLabel.y = node.y;\n origLabel.width = node.width;\n origLabel.height = node.height;\n }\n v = w;\n node = g.node(v);\n }\n });\n}\n", "import * as _ from 'lodash-es';\n\nexport { longestPath, slack };\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG.\n * 2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n * 1. Each node will be assign an (unnormalized) \"rank\" property.\n */\nfunction longestPath(g) {\n var visited = {};\n\n function dfs(v) {\n var label = g.node(v);\n if (_.has(visited, v)) {\n return label.rank;\n }\n visited[v] = true;\n\n var rank = _.min(\n _.map(g.outEdges(v), function (e) {\n return dfs(e.w) - g.edge(e).minlen;\n })\n );\n\n if (\n rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n rank === undefined || // return value of _.map([]) for Lodash 4\n rank === null\n ) {\n // return value of _.map([null])\n rank = 0;\n }\n\n return (label.rank = rank);\n }\n\n _.forEach(g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport { slack } from './util.js';\n\nexport { feasibleTree };\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node's\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its \"minlen\" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., \"A\n * Technique for Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a DAG.\n * 2. Graph must be connected.\n * 3. Graph must have at least one node.\n * 5. Graph nodes must have been previously assigned a \"rank\" property that\n * respects the \"minlen\" property of incident edges.\n * 6. Graph edges must have a \"minlen\" property.\n *\n * Post-conditions:\n *\n * - Graph nodes will have their rank adjusted to ensure that all edges are\n * tight.\n *\n * Returns a tree (undirected graph) that is constructed using only \"tight\"\n * edges.\n */\nfunction feasibleTree(g) {\n var t = new Graph({ directed: false });\n\n // Choose arbitrary node from which to start our tree\n var start = g.nodes()[0];\n var size = g.nodeCount();\n t.setNode(start, {});\n\n var edge, delta;\n while (tightTree(t, g) < size) {\n edge = findMinSlackEdge(t, g);\n delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);\n shiftRanks(t, g, delta);\n }\n\n return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n function dfs(v) {\n _.forEach(g.nodeEdges(v), function (e) {\n var edgeV = e.v,\n w = v === edgeV ? e.w : edgeV;\n if (!t.hasNode(w) && !slack(g, e)) {\n t.setNode(w, {});\n t.setEdge(v, w, {});\n dfs(w);\n }\n });\n }\n\n _.forEach(t.nodes(), dfs);\n return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n return _.minBy(g.edges(), function (e) {\n if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n return slack(g, e);\n }\n });\n}\n\nfunction shiftRanks(t, g, delta) {\n _.forEach(t.nodes(), function (v) {\n g.node(v).rank += delta;\n });\n}\n", "import * as _ from 'lodash-es';\nimport { PriorityQueue } from '../data/priority-queue.js';\n\nexport { dijkstra };\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction dijkstra(g, source, weightFn, edgeFn) {\n return runDijkstra(\n g,\n String(source),\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn ||\n function (v) {\n return g.outEdges(v);\n }\n );\n}\n\nfunction runDijkstra(g, source, weightFn, edgeFn) {\n var results = {};\n var pq = new PriorityQueue();\n var v, vEntry;\n\n var updateNeighbors = function (edge) {\n var w = edge.v !== v ? edge.v : edge.w;\n var wEntry = results[w];\n var weight = weightFn(edge);\n var distance = vEntry.distance + weight;\n\n if (weight < 0) {\n throw new Error(\n 'dijkstra does not allow negative edge weights. ' +\n 'Bad edge: ' +\n edge +\n ' Weight: ' +\n weight\n );\n }\n\n if (distance < wEntry.distance) {\n wEntry.distance = distance;\n wEntry.predecessor = v;\n pq.decrease(w, distance);\n }\n };\n\n g.nodes().forEach(function (v) {\n var distance = v === source ? 0 : Number.POSITIVE_INFINITY;\n results[v] = { distance: distance };\n pq.add(v, distance);\n });\n\n while (pq.size() > 0) {\n v = pq.removeMin();\n vEntry = results[v];\n if (vEntry.distance === Number.POSITIVE_INFINITY) {\n break;\n }\n\n edgeFn(v).forEach(updateNeighbors);\n }\n\n return results;\n}\n", "import * as _ from 'lodash-es';\n\nexport { floydWarshall };\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction floydWarshall(g, weightFn, edgeFn) {\n return runFloydWarshall(\n g,\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn ||\n function (v) {\n return g.outEdges(v);\n }\n );\n}\n\nfunction runFloydWarshall(g, weightFn, edgeFn) {\n var results = {};\n var nodes = g.nodes();\n\n nodes.forEach(function (v) {\n results[v] = {};\n results[v][v] = { distance: 0 };\n nodes.forEach(function (w) {\n if (v !== w) {\n results[v][w] = { distance: Number.POSITIVE_INFINITY };\n }\n });\n edgeFn(v).forEach(function (edge) {\n var w = edge.v === v ? edge.w : edge.v;\n var d = weightFn(edge);\n results[v][w] = { distance: d, predecessor: v };\n });\n });\n\n nodes.forEach(function (k) {\n var rowK = results[k];\n nodes.forEach(function (i) {\n var rowI = results[i];\n nodes.forEach(function (j) {\n var ik = rowI[k];\n var kj = rowK[j];\n var ij = rowI[j];\n var altDistance = ik.distance + kj.distance;\n if (altDistance < ij.distance) {\n ij.distance = altDistance;\n ij.predecessor = kj.predecessor;\n }\n });\n });\n });\n\n return results;\n}\n", "import * as _ from 'lodash-es';\n\nexport { topsort, CycleException };\n\ntopsort.CycleException = CycleException;\n\nfunction topsort(g) {\n var visited = {};\n var stack = {};\n var results = [];\n\n function visit(node) {\n if (_.has(stack, node)) {\n throw new CycleException();\n }\n\n if (!_.has(visited, node)) {\n stack[node] = true;\n visited[node] = true;\n _.each(g.predecessors(node), visit);\n delete stack[node];\n results.push(node);\n }\n }\n\n _.each(g.sinks(), visit);\n\n if (_.size(visited) !== g.nodeCount()) {\n throw new CycleException();\n }\n\n return results;\n}\n\nfunction CycleException() {}\nCycleException.prototype = new Error(); // must be an instance of Error to pass testing\n", "import * as _ from 'lodash-es';\n\nexport { dfs };\n\n/*\n * A helper that preforms a pre- or post-order traversal on the input graph\n * and returns the nodes in the order they were visited. If the graph is\n * undirected then this algorithm will navigate using neighbors. If the graph\n * is directed then this algorithm will navigate using successors.\n *\n * Order must be one of \"pre\" or \"post\".\n */\nfunction dfs(g, vs, order) {\n if (!_.isArray(vs)) {\n vs = [vs];\n }\n\n var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);\n\n var acc = [];\n var visited = {};\n _.each(vs, function (v) {\n if (!g.hasNode(v)) {\n throw new Error('Graph does not have node: ' + v);\n }\n\n doDfs(g, v, order === 'post', visited, navigation, acc);\n });\n return acc;\n}\n\nfunction doDfs(g, v, postorder, visited, navigation, acc) {\n if (!_.has(visited, v)) {\n visited[v] = true;\n\n if (!postorder) {\n acc.push(v);\n }\n _.each(navigation(v), function (w) {\n doDfs(g, w, postorder, visited, navigation, acc);\n });\n if (postorder) {\n acc.push(v);\n }\n }\n}\n", "import { dfs } from './dfs.js';\n\nexport { postorder };\n\nfunction postorder(g, vs) {\n return dfs(g, vs, 'post');\n}\n", "import { dfs } from './dfs.js';\n\nexport { preorder };\n\nfunction preorder(g, vs) {\n return dfs(g, vs, 'pre');\n}\n", "import * as _ from 'lodash-es';\nimport * as alg from '../../graphlib/alg/index.js';\nimport { simplify } from '../util.js';\nimport { feasibleTree } from './feasible-tree.js';\nimport { longestPath, slack } from './util.js';\n\nexport { networkSimplex };\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n * 1. The input graph must be a DAG.\n * 2. All nodes in the graph must have an object value.\n * 3. All edges in the graph must have \"minlen\" and \"weight\" attributes.\n *\n * Postconditions:\n *\n * 1. All nodes in the graph will have an assigned \"rank\" attribute that has\n * been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n * 1. Assign initial ranks to each node. We use the longest path algorithm,\n * which assigns ranks to the lowest position possible. In general this\n * leads to very wide bottom ranks and unnecessarily long edges.\n * 2. Construct a feasible tight tree. A tight tree is one such that all\n * edges in the tree have no slack (difference between length of edge\n * and minlen for the edge). This by itself greatly improves the assigned\n * rankings by shorting edges.\n * 3. Iteratively find edges that have negative cut values. Generally a\n * negative cut value indicates that the edge could be removed and a new\n * tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., \"A Technique\n * for Drawing Directed Graphs.\" The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n g = simplify(g);\n longestPath(g);\n var t = feasibleTree(g);\n initLowLimValues(t);\n initCutValues(t, g);\n\n var e, f;\n while ((e = leaveEdge(t))) {\n f = enterEdge(t, g, e);\n exchangeEdges(t, g, e, f);\n }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n var vs = alg.postorder(t, t.nodes());\n vs = vs.slice(0, vs.length - 1);\n _.forEach(vs, function (v) {\n assignCutValue(t, g, v);\n });\n}\n\nfunction assignCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n // True if the child is on the tail end of the edge in the directed graph\n var childIsTail = true;\n // The graph's view of the tree edge we're inspecting\n var graphEdge = g.edge(child, parent);\n // The accumulated cut value for the edge between this node and its parent\n var cutValue = 0;\n\n if (!graphEdge) {\n childIsTail = false;\n graphEdge = g.edge(parent, child);\n }\n\n cutValue = graphEdge.weight;\n\n _.forEach(g.nodeEdges(child), function (e) {\n var isOutEdge = e.v === child,\n other = isOutEdge ? e.w : e.v;\n\n if (other !== parent) {\n var pointsToHead = isOutEdge === childIsTail,\n otherWeight = g.edge(e).weight;\n\n cutValue += pointsToHead ? otherWeight : -otherWeight;\n if (isTreeEdge(t, child, other)) {\n var otherCutValue = t.edge(child, other).cutvalue;\n cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n }\n }\n });\n\n return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n if (arguments.length < 2) {\n root = tree.nodes()[0];\n }\n dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n var low = nextLim;\n var label = tree.node(v);\n\n visited[v] = true;\n _.forEach(tree.neighbors(v), function (w) {\n if (!_.has(visited, w)) {\n nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n }\n });\n\n label.low = low;\n label.lim = nextLim++;\n if (parent) {\n label.parent = parent;\n } else {\n // TODO should be able to remove this when we incrementally update low lim\n delete label.parent;\n }\n\n return nextLim;\n}\n\nfunction leaveEdge(tree) {\n return _.find(tree.edges(), function (e) {\n return tree.edge(e).cutvalue < 0;\n });\n}\n\nfunction enterEdge(t, g, edge) {\n var v = edge.v;\n var w = edge.w;\n\n // For the rest of this function we assume that v is the tail and w is the\n // head, so if we don't have this edge in the graph we should flip it to\n // match the correct orientation.\n if (!g.hasEdge(v, w)) {\n v = edge.w;\n w = edge.v;\n }\n\n var vLabel = t.node(v);\n var wLabel = t.node(w);\n var tailLabel = vLabel;\n var flip = false;\n\n // If the root is in the tail of the edge then we need to flip the logic that\n // checks for the head and tail nodes in the candidates function below.\n if (vLabel.lim > wLabel.lim) {\n tailLabel = wLabel;\n flip = true;\n }\n\n var candidates = _.filter(g.edges(), function (edge) {\n return (\n flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n flip !== isDescendant(t, t.node(edge.w), tailLabel)\n );\n });\n\n return _.minBy(candidates, function (edge) {\n return slack(g, edge);\n });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n var v = e.v;\n var w = e.w;\n t.removeEdge(v, w);\n t.setEdge(f.v, f.w, {});\n initLowLimValues(t);\n initCutValues(t, g);\n updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n var root = _.find(t.nodes(), function (v) {\n return !g.node(v).parent;\n });\n var vs = alg.preorder(t, root);\n vs = vs.slice(1);\n _.forEach(vs, function (v) {\n var parent = t.node(v).parent,\n edge = g.edge(v, parent),\n flipped = false;\n\n if (!edge) {\n edge = g.edge(parent, v);\n flipped = true;\n }\n\n g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n", "import { feasibleTree } from './feasible-tree.js';\nimport { networkSimplex } from './network-simplex.js';\nimport { longestPath } from './util.js';\n\nexport { rank };\n\n/*\n * Assigns a rank to each node in the input graph that respects the \"minlen\"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., \"A Technique for\n * Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a connected DAG\n * 2. Graph nodes must be objects\n * 3. Graph edges must have \"weight\" and \"minlen\" attributes\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have a \"rank\" attribute based on the results of the\n * algorithm. Ranks can start at any index (including negative), we'll\n * fix them up later.\n */\nfunction rank(g) {\n switch (g.graph().ranker) {\n case 'network-simplex':\n networkSimplexRanker(g);\n break;\n case 'tight-tree':\n tightTreeRanker(g);\n break;\n case 'longest-path':\n longestPathRanker(g);\n break;\n default:\n networkSimplexRanker(g);\n }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = longestPath;\n\nfunction tightTreeRanker(g) {\n longestPath(g);\n feasibleTree(g);\n}\n\nfunction networkSimplexRanker(g) {\n networkSimplex(g);\n}\n", "import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { run, cleanup };\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n * 1. Input graph is a DAG\n * 2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n * 1. Input graph is connected.\n * 2. Dummy nodes are added for the tops and bottoms of subgraphs.\n * 3. The minlen attribute for nodes is adjusted to ensure nodes do not\n * get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, \"Layout of Compound Directed\n * Graphs.\"\n */\nfunction run(g) {\n var root = util.addDummyNode(g, 'root', {}, '_root');\n var depths = treeDepths(g);\n var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array\n var nodeSep = 2 * height + 1;\n\n g.graph().nestingRoot = root;\n\n // Multiply minlen by nodeSep to align nodes on non-border ranks.\n _.forEach(g.edges(), function (e) {\n g.edge(e).minlen *= nodeSep;\n });\n\n // Calculate a weight that is sufficient to keep subgraphs vertically compact\n var weight = sumWeights(g) + 1;\n\n // Create border nodes and link them up\n _.forEach(g.children(), function (child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n });\n\n // Save the multiplier for node layers for later removal of empty border\n // layers.\n g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n var children = g.children(v);\n if (!children.length) {\n if (v !== root) {\n g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n }\n return;\n }\n\n var top = util.addBorderNode(g, '_bt');\n var bottom = util.addBorderNode(g, '_bb');\n var label = g.node(v);\n\n g.setParent(top, v);\n label.borderTop = top;\n g.setParent(bottom, v);\n label.borderBottom = bottom;\n\n _.forEach(children, function (child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n\n var childNode = g.node(child);\n var childTop = childNode.borderTop ? childNode.borderTop : child;\n var childBottom = childNode.borderBottom ? childNode.borderBottom : child;\n var thisWeight = childNode.borderTop ? weight : 2 * weight;\n var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n g.setEdge(top, childTop, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true,\n });\n\n g.setEdge(childBottom, bottom, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true,\n });\n });\n\n if (!g.parent(v)) {\n g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n }\n}\n\nfunction treeDepths(g) {\n var depths = {};\n function dfs(v, depth) {\n var children = g.children(v);\n if (children && children.length) {\n _.forEach(children, function (child) {\n dfs(child, depth + 1);\n });\n }\n depths[v] = depth;\n }\n _.forEach(g.children(), function (v) {\n dfs(v, 1);\n });\n return depths;\n}\n\nfunction sumWeights(g) {\n return _.reduce(\n g.edges(),\n function (acc, e) {\n return acc + g.edge(e).weight;\n },\n 0\n );\n}\n\nfunction cleanup(g) {\n var graphLabel = g.graph();\n g.removeNode(graphLabel.nestingRoot);\n delete graphLabel.nestingRoot;\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.nestingEdge) {\n g.removeEdge(e);\n }\n });\n}\n", "import * as _ from 'lodash-es';\n\nexport { addSubgraphConstraints };\n\nfunction addSubgraphConstraints(g, cg, vs) {\n var prev = {},\n rootPrev;\n\n _.forEach(vs, function (v) {\n var child = g.parent(v),\n parent,\n prevChild;\n while (child) {\n parent = g.parent(child);\n if (parent) {\n prevChild = prev[parent];\n prev[parent] = child;\n } else {\n prevChild = rootPrev;\n rootPrev = child;\n }\n if (prevChild && prevChild !== child) {\n cg.setEdge(prevChild, child);\n return;\n }\n child = parent;\n }\n });\n\n /*\n function dfs(v) {\n var children = v ? g.children(v) : g.children();\n if (children.length) {\n var min = Number.POSITIVE_INFINITY,\n subgraphs = [];\n _.each(children, function(child) {\n var childMin = dfs(child);\n if (g.children(child).length) {\n subgraphs.push({ v: child, order: childMin });\n }\n min = Math.min(min, childMin);\n });\n _.reduce(_.sortBy(subgraphs, \"order\"), function(prev, curr) {\n cg.setEdge(prev.v, curr.v);\n return curr;\n });\n return min;\n }\n return g.node(v).order;\n }\n dfs(undefined);\n */\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\n\nexport { buildLayerGraph };\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the \"relationship\" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG\n * 2. Base nodes in the input graph have a rank attribute\n * 3. Subgraph nodes in the input graph has minRank and maxRank attributes\n * 4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n * 1. Output graph has all nodes in the movable rank with preserved\n * hierarchy.\n * 2. Root nodes in the movable layer are made children of the node\n * indicated by the root attribute of the graph.\n * 3. Non-movable nodes incident on movable nodes, selected by the\n * relationship parameter, are included in the graph (without hierarchy).\n * 4. Edges incident on movable nodes, selected by the relationship\n * parameter, are added to the output graph.\n * 5. The weights for copied edges are aggregated as need, since the output\n * graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n var root = createRootNode(g),\n result = new Graph({ compound: true })\n .setGraph({ root: root })\n .setDefaultNodeLabel(function (v) {\n return g.node(v);\n });\n\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v),\n parent = g.parent(v);\n\n if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) {\n result.setNode(v);\n result.setParent(v, parent || root);\n\n // This assumes we have only short edges!\n _.forEach(g[relationship](v), function (e) {\n var u = e.v === v ? e.w : e.v,\n edge = result.edge(u, v),\n weight = !_.isUndefined(edge) ? edge.weight : 0;\n result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n });\n\n if (_.has(node, 'minRank')) {\n result.setNode(v, {\n borderLeft: node.borderLeft[rank],\n borderRight: node.borderRight[rank],\n });\n }\n }\n });\n\n return result;\n}\n\nfunction createRootNode(g) {\n var v;\n while (g.hasNode((v = _.uniqueId('_root'))));\n return v;\n}\n", "import * as _ from 'lodash-es';\n\nexport { crossCount };\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n * 1. Input graph must be simple (not a multigraph), directed, and include\n * only simple edges.\n * 2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n * 1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., \"Bilayer Cross Counting.\"\n */\nfunction crossCount(g, layering) {\n var cc = 0;\n for (var i = 1; i < layering.length; ++i) {\n cc += twoLayerCrossCount(g, layering[i - 1], layering[i]);\n }\n return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n // Sort all of the edges between the north and south layers by their position\n // in the north layer and then the south. Map these edges to the position of\n // their head in the south layer.\n var southPos = _.zipObject(\n southLayer,\n _.map(southLayer, function (v, i) {\n return i;\n })\n );\n var southEntries = _.flatten(\n _.map(northLayer, function (v) {\n return _.sortBy(\n _.map(g.outEdges(v), function (e) {\n return { pos: southPos[e.w], weight: g.edge(e).weight };\n }),\n 'pos'\n );\n })\n );\n\n // Build the accumulator tree\n var firstIndex = 1;\n while (firstIndex < southLayer.length) firstIndex <<= 1;\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = _.map(new Array(treeSize), function () {\n return 0;\n });\n\n // Calculate the weighted crossings\n var cc = 0;\n _.forEach(\n // @ts-expect-error\n southEntries.forEach(function (entry) {\n var index = entry.pos + firstIndex;\n tree[index] += entry.weight;\n var weightSum = 0;\n // @ts-expect-error\n while (index > 0) {\n // @ts-expect-error\n if (index % 2) {\n weightSum += tree[index + 1];\n }\n // @ts-expect-error\n index = (index - 1) >> 1;\n tree[index] += entry.weight;\n }\n cc += entry.weight * weightSum;\n })\n );\n\n return cc;\n}\n", "import * as _ from 'lodash-es';\n\nexport { initOrder };\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., \"A Technique for Drawing Directed\n * Graphs.\"\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nfunction initOrder(g) {\n var visited = {};\n var simpleNodes = _.filter(g.nodes(), function (v) {\n return !g.children(v).length;\n });\n var maxRank = _.max(\n _.map(simpleNodes, function (v) {\n return g.node(v).rank;\n })\n );\n var layers = _.map(_.range(maxRank + 1), function () {\n return [];\n });\n\n function dfs(v) {\n if (_.has(visited, v)) return;\n visited[v] = true;\n var node = g.node(v);\n layers[node.rank].push(v);\n _.forEach(g.successors(v), dfs);\n }\n\n var orderedVs = _.sortBy(simpleNodes, function (v) {\n return g.node(v).rank;\n });\n _.forEach(orderedVs, dfs);\n\n return layers;\n}\n", "import * as _ from 'lodash-es';\n\nexport { barycenter };\n\nfunction barycenter(g, movable) {\n return _.map(movable, function (v) {\n var inV = g.inEdges(v);\n if (!inV.length) {\n return { v: v };\n } else {\n var result = _.reduce(\n inV,\n function (acc, e) {\n var edge = g.edge(e),\n nodeU = g.node(e.v);\n return {\n sum: acc.sum + edge.weight * nodeU.order,\n weight: acc.weight + edge.weight,\n };\n },\n { sum: 0, weight: 0 }\n );\n\n return {\n v: v,\n barycenter: result.sum / result.weight,\n weight: result.weight,\n };\n }\n });\n}\n", "import * as _ from 'lodash-es';\n\nexport { resolveConflicts };\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, \"A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction,\" thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n * 1. Each entry has the form {v, barycenter, weight}, or if the node has\n * no barycenter, then {v}.\n *\n * Returns:\n *\n * A new list of entries of the form {vs, i, barycenter, weight}. The list\n * `vs` may either be a singleton or it may be an aggregation of nodes\n * ordered such that they do not violate constraints from the constraint\n * graph. The property `i` is the lowest original index of any of the\n * elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n var mappedEntries = {};\n _.forEach(entries, function (entry, i) {\n var tmp = (mappedEntries[entry.v] = {\n indegree: 0,\n in: [],\n out: [],\n vs: [entry.v],\n i: i,\n });\n if (!_.isUndefined(entry.barycenter)) {\n // @ts-expect-error\n tmp.barycenter = entry.barycenter;\n // @ts-expect-error\n tmp.weight = entry.weight;\n }\n });\n\n _.forEach(cg.edges(), function (e) {\n var entryV = mappedEntries[e.v];\n var entryW = mappedEntries[e.w];\n if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) {\n entryW.indegree++;\n entryV.out.push(mappedEntries[e.w]);\n }\n });\n\n var sourceSet = _.filter(mappedEntries, function (entry) {\n // @ts-expect-error\n return !entry.indegree;\n });\n\n return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n var entries = [];\n\n function handleIn(vEntry) {\n return function (uEntry) {\n if (uEntry.merged) {\n return;\n }\n if (\n _.isUndefined(uEntry.barycenter) ||\n _.isUndefined(vEntry.barycenter) ||\n uEntry.barycenter >= vEntry.barycenter\n ) {\n mergeEntries(vEntry, uEntry);\n }\n };\n }\n\n function handleOut(vEntry) {\n return function (wEntry) {\n wEntry['in'].push(vEntry);\n if (--wEntry.indegree === 0) {\n sourceSet.push(wEntry);\n }\n };\n }\n\n while (sourceSet.length) {\n var entry = sourceSet.pop();\n entries.push(entry);\n _.forEach(entry['in'].reverse(), handleIn(entry));\n _.forEach(entry.out, handleOut(entry));\n }\n\n return _.map(\n _.filter(entries, function (entry) {\n return !entry.merged;\n }),\n function (entry) {\n return _.pick(entry, ['vs', 'i', 'barycenter', 'weight']);\n }\n );\n}\n\nfunction mergeEntries(target, source) {\n var sum = 0;\n var weight = 0;\n\n if (target.weight) {\n sum += target.barycenter * target.weight;\n weight += target.weight;\n }\n\n if (source.weight) {\n sum += source.barycenter * source.weight;\n weight += source.weight;\n }\n\n target.vs = source.vs.concat(target.vs);\n target.barycenter = sum / weight;\n target.weight = weight;\n target.i = Math.min(source.i, target.i);\n source.merged = true;\n}\n", "import * as _ from 'lodash-es';\nimport * as util from '../util.js';\n\nexport { sort };\n\nfunction sort(entries, biasRight) {\n var parts = util.partition(entries, function (entry) {\n return _.has(entry, 'barycenter');\n });\n var sortable = parts.lhs,\n unsortable = _.sortBy(parts.rhs, function (entry) {\n return -entry.i;\n }),\n vs = [],\n sum = 0,\n weight = 0,\n vsIndex = 0;\n\n sortable.sort(compareWithBias(!!biasRight));\n\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n _.forEach(sortable, function (entry) {\n vsIndex += entry.vs.length;\n vs.push(entry.vs);\n sum += entry.barycenter * entry.weight;\n weight += entry.weight;\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n });\n\n var result = { vs: _.flatten(vs) };\n if (weight) {\n result.barycenter = sum / weight;\n result.weight = weight;\n }\n return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n var last;\n while (unsortable.length && (last = _.last(unsortable)).i <= index) {\n unsortable.pop();\n vs.push(last.vs);\n index++;\n }\n return index;\n}\n\nfunction compareWithBias(bias) {\n return function (entryV, entryW) {\n if (entryV.barycenter < entryW.barycenter) {\n return -1;\n } else if (entryV.barycenter > entryW.barycenter) {\n return 1;\n }\n\n return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n };\n}\n", "import * as _ from 'lodash-es';\nimport { barycenter } from './barycenter.js';\nimport { resolveConflicts } from './resolve-conflicts.js';\nimport { sort } from './sort.js';\n\nexport { sortSubgraph };\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n var movable = g.children(v);\n var node = g.node(v);\n var bl = node ? node.borderLeft : undefined;\n var br = node ? node.borderRight : undefined;\n var subgraphs = {};\n\n if (bl) {\n movable = _.filter(movable, function (w) {\n return w !== bl && w !== br;\n });\n }\n\n var barycenters = barycenter(g, movable);\n _.forEach(barycenters, function (entry) {\n if (g.children(entry.v).length) {\n var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n subgraphs[entry.v] = subgraphResult;\n if (_.has(subgraphResult, 'barycenter')) {\n mergeBarycenters(entry, subgraphResult);\n }\n }\n });\n\n var entries = resolveConflicts(barycenters, cg);\n expandSubgraphs(entries, subgraphs);\n\n var result = sort(entries, biasRight);\n\n if (bl) {\n result.vs = _.flatten([bl, result.vs, br]);\n if (g.predecessors(bl).length) {\n var blPred = g.node(g.predecessors(bl)[0]),\n brPred = g.node(g.predecessors(br)[0]);\n if (!_.has(result, 'barycenter')) {\n result.barycenter = 0;\n result.weight = 0;\n }\n result.barycenter =\n (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2);\n result.weight += 2;\n }\n }\n\n return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n _.forEach(entries, function (entry) {\n entry.vs = _.flatten(\n entry.vs.map(function (v) {\n if (subgraphs[v]) {\n return subgraphs[v].vs;\n }\n return v;\n })\n );\n });\n}\n\nfunction mergeBarycenters(target, other) {\n if (!_.isUndefined(target.barycenter)) {\n target.barycenter =\n (target.barycenter * target.weight + other.barycenter * other.weight) /\n (target.weight + other.weight);\n target.weight += other.weight;\n } else {\n target.barycenter = other.barycenter;\n target.weight = other.weight;\n }\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport * as util from '../util.js';\nimport { addSubgraphConstraints } from './add-subgraph-constraints.js';\nimport { buildLayerGraph } from './build-layer-graph.js';\nimport { crossCount } from './cross-count.js';\nimport { initOrder } from './init-order.js';\nimport { sortSubgraph } from './sort-subgraph.js';\n\nexport { order };\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n * 1. Graph must be DAG\n * 2. Graph nodes must be objects with a \"rank\" attribute\n * 3. Graph edges must have the \"weight\" attribute\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have an \"order\" attribute based on the results of the\n * algorithm.\n */\nfunction order(g) {\n var maxRank = util.maxRank(g),\n downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), 'inEdges'),\n upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), 'outEdges');\n\n var layering = initOrder(g);\n assignOrder(g, layering);\n\n var bestCC = Number.POSITIVE_INFINITY,\n best;\n\n for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n layering = util.buildLayerMatrix(g);\n var cc = crossCount(g, layering);\n if (cc < bestCC) {\n lastBest = 0;\n best = _.cloneDeep(layering);\n bestCC = cc;\n }\n }\n\n assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n return _.map(ranks, function (rank) {\n return buildLayerGraph(g, rank, relationship);\n });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n var cg = new Graph();\n _.forEach(layerGraphs, function (lg) {\n var root = lg.graph().root;\n var sorted = sortSubgraph(lg, root, cg, biasRight);\n _.forEach(sorted.vs, function (v, i) {\n lg.node(v).order = i;\n });\n addSubgraphConstraints(lg, cg, sorted.vs);\n });\n}\n\nfunction assignOrder(g, layering) {\n _.forEach(layering, function (layer) {\n _.forEach(layer, function (v, i) {\n g.node(v).order = i;\n });\n });\n}\n", "import * as _ from 'lodash-es';\n\nexport { parentDummyChains };\n\nfunction parentDummyChains(g) {\n var postorderNums = postorder(g);\n\n _.forEach(g.graph().dummyChains, function (v) {\n var node = g.node(v);\n var edgeObj = node.edgeObj;\n var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);\n var path = pathData.path;\n var lca = pathData.lca;\n var pathIdx = 0;\n var pathV = path[pathIdx];\n var ascending = true;\n\n while (v !== edgeObj.w) {\n node = g.node(v);\n\n if (ascending) {\n while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) {\n pathIdx++;\n }\n\n if (pathV === lca) {\n ascending = false;\n }\n }\n\n if (!ascending) {\n while (\n pathIdx < path.length - 1 &&\n g.node((pathV = path[pathIdx + 1])).minRank <= node.rank\n ) {\n pathIdx++;\n }\n pathV = path[pathIdx];\n }\n\n g.setParent(v, pathV);\n v = g.successors(v)[0];\n }\n });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n var vPath = [];\n var wPath = [];\n var low = Math.min(postorderNums[v].low, postorderNums[w].low);\n var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);\n var parent;\n var lca;\n\n // Traverse up from v to find the LCA\n parent = v;\n do {\n parent = g.parent(parent);\n vPath.push(parent);\n } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n lca = parent;\n\n // Traverse from w to LCA\n parent = w;\n while ((parent = g.parent(parent)) !== lca) {\n wPath.push(parent);\n }\n\n return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n var result = {};\n var lim = 0;\n\n function dfs(v) {\n var low = lim;\n _.forEach(g.children(v), dfs);\n result[v] = { low: low, lim: lim++ };\n }\n _.forEach(g.children(), dfs);\n\n return result;\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport * as util from '../util.js';\n\n/*\n * This module provides coordinate assignment based on Brandes and K\u00F6pf, \"Fast\n * and Simple Horizontal Coordinate Assignment.\"\n */\n\nexport {\n positionX,\n findType1Conflicts,\n findType2Conflicts,\n addConflict,\n hasConflict,\n verticalAlignment,\n horizontalCompaction,\n alignCoordinates,\n findSmallestWidthAlignment,\n balance,\n};\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the \"type1Conflict\"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the \"dummy\" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n var conflicts = {};\n\n function visitLayer(prevLayer, layer) {\n var // last visited node in the previous layer that is incident on an inner\n // segment.\n k0 = 0,\n // Tracks the last node in this layer scanned for crossings with a type-1\n // segment.\n scanPos = 0,\n prevLayerLength = prevLayer.length,\n lastNode = _.last(layer);\n\n _.forEach(layer, function (v, i) {\n var w = findOtherInnerSegmentNode(g, v),\n k1 = w ? g.node(w).order : prevLayerLength;\n\n if (w || v === lastNode) {\n _.forEach(layer.slice(scanPos, i + 1), function (scanNode) {\n _.forEach(g.predecessors(scanNode), function (u) {\n var uLabel = g.node(u),\n uPos = uLabel.order;\n if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) {\n addConflict(conflicts, u, scanNode);\n }\n });\n });\n // @ts-expect-error\n scanPos = i + 1;\n k0 = k1;\n }\n });\n\n return layer;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n var conflicts = {};\n\n function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n var v;\n _.forEach(_.range(southPos, southEnd), function (i) {\n v = south[i];\n if (g.node(v).dummy) {\n _.forEach(g.predecessors(v), function (u) {\n var uNode = g.node(u);\n if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n addConflict(conflicts, u, v);\n }\n });\n }\n });\n }\n\n function visitLayer(north, south) {\n var prevNorthPos = -1,\n nextNorthPos,\n southPos = 0;\n\n _.forEach(south, function (v, southLookahead) {\n if (g.node(v).dummy === 'border') {\n var predecessors = g.predecessors(v);\n if (predecessors.length) {\n nextNorthPos = g.node(predecessors[0]).order;\n scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n // @ts-expect-error\n southPos = southLookahead;\n prevNorthPos = nextNorthPos;\n }\n }\n scan(south, southPos, south.length, nextNorthPos, north.length);\n });\n\n return south;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n if (g.node(v).dummy) {\n return _.find(g.predecessors(v), function (u) {\n return g.node(u).dummy;\n });\n }\n}\n\nfunction addConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n\n var conflictsV = conflicts[v];\n if (!conflictsV) {\n conflicts[v] = conflictsV = {};\n }\n conflictsV[w] = true;\n}\n\nfunction hasConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return _.has(conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical \"blocks\" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we're trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n var root = {},\n align = {},\n pos = {};\n\n // We cache the position here based on the layering because the graph and\n // layering may be out of sync. The layering matrix is manipulated to\n // generate different extreme alignments.\n _.forEach(layering, function (layer) {\n _.forEach(layer, function (v, order) {\n root[v] = v;\n align[v] = v;\n pos[v] = order;\n });\n });\n\n _.forEach(layering, function (layer) {\n var prevIdx = -1;\n _.forEach(layer, function (v) {\n var ws = neighborFn(v);\n if (ws.length) {\n ws = _.sortBy(ws, function (w) {\n return pos[w];\n });\n var mp = (ws.length - 1) / 2;\n for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n var w = ws[i];\n if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) {\n align[w] = v;\n align[v] = root[v] = root[w];\n prevIdx = pos[w];\n }\n }\n }\n });\n });\n\n return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n // This portion of the algorithm differs from BK due to a number of problems.\n // Instead of their algorithm we construct a new block graph and do two\n // sweeps. The first sweep places blocks with the smallest possible\n // coordinates. The second sweep removes unused space by moving blocks to the\n // greatest coordinates without violating separation.\n var xs = {},\n blockG = buildBlockGraph(g, layering, root, reverseSep),\n borderType = reverseSep ? 'borderLeft' : 'borderRight';\n\n function iterate(setXsFunc, nextNodesFunc) {\n var stack = blockG.nodes();\n var elem = stack.pop();\n var visited = {};\n while (elem) {\n if (visited[elem]) {\n setXsFunc(elem);\n } else {\n visited[elem] = true;\n stack.push(elem);\n stack = stack.concat(nextNodesFunc(elem));\n }\n\n elem = stack.pop();\n }\n }\n\n // First pass, assign smallest coordinates\n function pass1(elem) {\n xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) {\n return Math.max(acc, xs[e.v] + blockG.edge(e));\n }, 0);\n }\n\n // Second pass, assign greatest coordinates\n function pass2(elem) {\n var min = blockG.outEdges(elem).reduce(function (acc, e) {\n return Math.min(acc, xs[e.w] - blockG.edge(e));\n }, Number.POSITIVE_INFINITY);\n\n var node = g.node(elem);\n if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n xs[elem] = Math.max(xs[elem], min);\n }\n }\n\n iterate(pass1, blockG.predecessors.bind(blockG));\n iterate(pass2, blockG.successors.bind(blockG));\n\n // Assign x coordinates to all nodes\n _.forEach(align, function (v) {\n xs[v] = xs[root[v]];\n });\n\n return xs;\n}\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n var blockGraph = new Graph(),\n graphLabel = g.graph(),\n sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n _.forEach(layering, function (layer) {\n var u;\n _.forEach(layer, function (v) {\n var vRoot = root[v];\n blockGraph.setNode(vRoot);\n if (u) {\n var uRoot = root[u],\n prevMax = blockGraph.edge(uRoot, vRoot);\n blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n }\n u = v;\n });\n });\n\n return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n return _.minBy(_.values(xss), function (xs) {\n var max = Number.NEGATIVE_INFINITY;\n var min = Number.POSITIVE_INFINITY;\n\n _.forIn(xs, function (x, v) {\n var halfWidth = width(g, v) / 2;\n\n max = Math.max(x + halfWidth, max);\n min = Math.min(x - halfWidth, min);\n });\n\n return max - min;\n });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n var alignToVals = _.values(alignTo),\n alignToMin = _.min(alignToVals),\n alignToMax = _.max(alignToVals);\n\n _.forEach(['u', 'd'], function (vert) {\n _.forEach(['l', 'r'], function (horiz) {\n var alignment = vert + horiz,\n xs = xss[alignment],\n delta;\n if (xs === alignTo) return;\n\n var xsVals = _.values(xs);\n delta = horiz === 'l' ? alignToMin - _.min(xsVals) : alignToMax - _.max(xsVals);\n\n if (delta) {\n xss[alignment] = _.mapValues(xs, function (x) {\n return x + delta;\n });\n }\n });\n });\n}\n\nfunction balance(xss, align) {\n return _.mapValues(xss.ul, function (ignore, v) {\n if (align) {\n return xss[align.toLowerCase()][v];\n } else {\n var xs = _.sortBy(_.map(xss, v));\n return (xs[1] + xs[2]) / 2;\n }\n });\n}\n\nfunction positionX(g) {\n var layering = util.buildLayerMatrix(g);\n var conflicts = _.merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering));\n\n var xss = {};\n var adjustedLayering;\n _.forEach(['u', 'd'], function (vert) {\n adjustedLayering = vert === 'u' ? layering : _.values(layering).reverse();\n _.forEach(['l', 'r'], function (horiz) {\n if (horiz === 'r') {\n adjustedLayering = _.map(adjustedLayering, function (inner) {\n return _.values(inner).reverse();\n });\n }\n\n var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g);\n var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r');\n if (horiz === 'r') {\n xs = _.mapValues(xs, function (x) {\n return -x;\n });\n }\n xss[vert + horiz] = xs;\n });\n });\n\n var smallestWidth = findSmallestWidthAlignment(g, xss);\n alignCoordinates(xss, smallestWidth);\n return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n return function (g, v, w) {\n var vLabel = g.node(v);\n var wLabel = g.node(w);\n var sum = 0;\n var delta;\n\n sum += vLabel.width / 2;\n if (_.has(vLabel, 'labelpos')) {\n switch (vLabel.labelpos.toLowerCase()) {\n case 'l':\n delta = -vLabel.width / 2;\n break;\n case 'r':\n delta = vLabel.width / 2;\n break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n sum += wLabel.width / 2;\n if (_.has(wLabel, 'labelpos')) {\n switch (wLabel.labelpos.toLowerCase()) {\n case 'l':\n delta = wLabel.width / 2;\n break;\n case 'r':\n delta = -wLabel.width / 2;\n break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n return sum;\n };\n}\n\nfunction width(g, v) {\n return g.node(v).width;\n}\n", "import * as _ from 'lodash-es';\nimport * as util from '../util.js';\nimport { positionX } from './bk.js';\n\nexport { position };\n\nfunction position(g) {\n g = util.asNonCompoundGraph(g);\n\n positionY(g);\n _.forOwn(positionX(g), function (x, v) {\n g.node(v).x = x;\n });\n}\n\nfunction positionY(g) {\n var layering = util.buildLayerMatrix(g);\n var rankSep = g.graph().ranksep;\n var prevY = 0;\n _.forEach(layering, function (layer) {\n var maxHeight = _.max(\n _.map(layer, function (v) {\n return g.node(v).height;\n })\n );\n _.forEach(layer, function (v) {\n g.node(v).y = prevY + maxHeight / 2;\n });\n prevY += maxHeight + rankSep;\n });\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\nimport { addBorderSegments } from './add-border-segments.js';\nimport * as coordinateSystem from './coordinate-system.js';\nimport * as acyclic from './acyclic.js';\nimport * as normalize from './normalize.js';\nimport { rank } from './rank/index.js';\nimport * as nestingGraph from './nesting-graph.js';\nimport { order } from './order/index.js';\nimport { parentDummyChains } from './parent-dummy-chains.js';\nimport { position } from './position/index.js';\nimport * as util from './util.js';\n\nexport { layout };\n\nfunction layout(g, opts) {\n var time = opts && opts.debugTiming ? util.time : util.notime;\n time('layout', function () {\n var layoutGraph = time(' buildLayoutGraph', function () {\n return buildLayoutGraph(g);\n });\n time(' runLayout', function () {\n runLayout(layoutGraph, time);\n });\n time(' updateInputGraph', function () {\n updateInputGraph(g, layoutGraph);\n });\n });\n}\n\nfunction runLayout(g, time) {\n time(' makeSpaceForEdgeLabels', function () {\n makeSpaceForEdgeLabels(g);\n });\n time(' removeSelfEdges', function () {\n removeSelfEdges(g);\n });\n time(' acyclic', function () {\n acyclic.run(g);\n });\n time(' nestingGraph.run', function () {\n nestingGraph.run(g);\n });\n time(' rank', function () {\n rank(util.asNonCompoundGraph(g));\n });\n time(' injectEdgeLabelProxies', function () {\n injectEdgeLabelProxies(g);\n });\n time(' removeEmptyRanks', function () {\n util.removeEmptyRanks(g);\n });\n time(' nestingGraph.cleanup', function () {\n nestingGraph.cleanup(g);\n });\n time(' normalizeRanks', function () {\n util.normalizeRanks(g);\n });\n time(' assignRankMinMax', function () {\n assignRankMinMax(g);\n });\n time(' removeEdgeLabelProxies', function () {\n removeEdgeLabelProxies(g);\n });\n time(' normalize.run', function () {\n normalize.run(g);\n });\n time(' parentDummyChains', function () {\n parentDummyChains(g);\n });\n time(' addBorderSegments', function () {\n addBorderSegments(g);\n });\n time(' order', function () {\n order(g);\n });\n time(' insertSelfEdges', function () {\n insertSelfEdges(g);\n });\n time(' adjustCoordinateSystem', function () {\n coordinateSystem.adjust(g);\n });\n time(' position', function () {\n position(g);\n });\n time(' positionSelfEdges', function () {\n positionSelfEdges(g);\n });\n time(' removeBorderNodes', function () {\n removeBorderNodes(g);\n });\n time(' normalize.undo', function () {\n normalize.undo(g);\n });\n time(' fixupEdgeLabelCoords', function () {\n fixupEdgeLabelCoords(g);\n });\n time(' undoCoordinateSystem', function () {\n coordinateSystem.undo(g);\n });\n time(' translateGraph', function () {\n translateGraph(g);\n });\n time(' assignNodeIntersects', function () {\n assignNodeIntersects(g);\n });\n time(' reversePoints', function () {\n reversePointsForReversedEdges(g);\n });\n time(' acyclic.undo', function () {\n acyclic.undo(g);\n });\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n _.forEach(inputGraph.nodes(), function (v) {\n var inputLabel = inputGraph.node(v);\n var layoutLabel = layoutGraph.node(v);\n\n if (inputLabel) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n\n if (layoutGraph.children(v).length) {\n inputLabel.width = layoutLabel.width;\n inputLabel.height = layoutLabel.height;\n }\n }\n });\n\n _.forEach(inputGraph.edges(), function (e) {\n var inputLabel = inputGraph.edge(e);\n var layoutLabel = layoutGraph.edge(e);\n\n inputLabel.points = layoutLabel.points;\n if (_.has(layoutLabel, 'x')) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n }\n });\n\n inputGraph.graph().width = layoutGraph.graph().width;\n inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy'];\nvar graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' };\nvar graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align'];\nvar nodeNumAttrs = ['width', 'height'];\nvar nodeDefaults = { width: 0, height: 0 };\nvar edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset'];\nvar edgeDefaults = {\n minlen: 1,\n weight: 1,\n width: 0,\n height: 0,\n labeloffset: 10,\n labelpos: 'r',\n};\nvar edgeAttrs = ['labelpos'];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n var g = new Graph({ multigraph: true, compound: true });\n var graph = canonicalize(inputGraph.graph());\n\n g.setGraph(\n _.merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), _.pick(graph, graphAttrs))\n );\n\n _.forEach(inputGraph.nodes(), function (v) {\n var node = canonicalize(inputGraph.node(v));\n g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n g.setParent(v, inputGraph.parent(v));\n });\n\n _.forEach(inputGraph.edges(), function (e) {\n var edge = canonicalize(inputGraph.edge(e));\n g.setEdge(\n e,\n _.merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), _.pick(edge, edgeAttrs))\n );\n });\n\n return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n var graph = g.graph();\n graph.ranksep /= 2;\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n edge.minlen *= 2;\n if (edge.labelpos.toLowerCase() !== 'c') {\n if (graph.rankdir === 'TB' || graph.rankdir === 'BT') {\n edge.width += edge.labeloffset;\n } else {\n edge.height += edge.labeloffset;\n }\n }\n });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge's\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label's position.\n */\nfunction injectEdgeLabelProxies(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.width && edge.height) {\n var v = g.node(e.v);\n var w = g.node(e.w);\n var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n util.addDummyNode(g, 'edge-proxy', label, '_ep');\n }\n });\n}\n\nfunction assignRankMinMax(g) {\n var maxRank = 0;\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.borderTop) {\n node.minRank = g.node(node.borderTop).rank;\n node.maxRank = g.node(node.borderBottom).rank;\n // @ts-expect-error\n maxRank = _.max(maxRank, node.maxRank);\n }\n });\n g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.dummy === 'edge-proxy') {\n g.edge(node.e).labelRank = node.rank;\n g.removeNode(v);\n }\n });\n}\n\nfunction translateGraph(g) {\n var minX = Number.POSITIVE_INFINITY;\n var maxX = 0;\n var minY = Number.POSITIVE_INFINITY;\n var maxY = 0;\n var graphLabel = g.graph();\n var marginX = graphLabel.marginx || 0;\n var marginY = graphLabel.marginy || 0;\n\n function getExtremes(attrs) {\n var x = attrs.x;\n var y = attrs.y;\n var w = attrs.width;\n var h = attrs.height;\n minX = Math.min(minX, x - w / 2);\n maxX = Math.max(maxX, x + w / 2);\n minY = Math.min(minY, y - h / 2);\n maxY = Math.max(maxY, y + h / 2);\n }\n\n _.forEach(g.nodes(), function (v) {\n getExtremes(g.node(v));\n });\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (_.has(edge, 'x')) {\n getExtremes(edge);\n }\n });\n\n minX -= marginX;\n minY -= marginY;\n\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n node.x -= minX;\n node.y -= minY;\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, function (p) {\n p.x -= minX;\n p.y -= minY;\n });\n if (_.has(edge, 'x')) {\n edge.x -= minX;\n }\n if (_.has(edge, 'y')) {\n edge.y -= minY;\n }\n });\n\n graphLabel.width = maxX - minX + marginX;\n graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n var nodeV = g.node(e.v);\n var nodeW = g.node(e.w);\n var p1, p2;\n if (!edge.points) {\n edge.points = [];\n p1 = nodeW;\n p2 = nodeV;\n } else {\n p1 = edge.points[0];\n p2 = edge.points[edge.points.length - 1];\n }\n edge.points.unshift(util.intersectRect(nodeV, p1));\n edge.points.push(util.intersectRect(nodeW, p2));\n });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (_.has(edge, 'x')) {\n if (edge.labelpos === 'l' || edge.labelpos === 'r') {\n edge.width -= edge.labeloffset;\n }\n switch (edge.labelpos) {\n case 'l':\n edge.x -= edge.width / 2 + edge.labeloffset;\n break;\n case 'r':\n edge.x += edge.width / 2 + edge.labeloffset;\n break;\n }\n }\n });\n}\n\nfunction reversePointsForReversedEdges(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.reversed) {\n edge.points.reverse();\n }\n });\n}\n\nfunction removeBorderNodes(g) {\n _.forEach(g.nodes(), function (v) {\n if (g.children(v).length) {\n var node = g.node(v);\n var t = g.node(node.borderTop);\n var b = g.node(node.borderBottom);\n var l = g.node(_.last(node.borderLeft));\n var r = g.node(_.last(node.borderRight));\n\n node.width = Math.abs(r.x - l.x);\n node.height = Math.abs(b.y - t.y);\n node.x = l.x + node.width / 2;\n node.y = t.y + node.height / 2;\n }\n });\n\n _.forEach(g.nodes(), function (v) {\n if (g.node(v).dummy === 'border') {\n g.removeNode(v);\n }\n });\n}\n\nfunction removeSelfEdges(g) {\n _.forEach(g.edges(), function (e) {\n if (e.v === e.w) {\n var node = g.node(e.v);\n if (!node.selfEdges) {\n node.selfEdges = [];\n }\n node.selfEdges.push({ e: e, label: g.edge(e) });\n g.removeEdge(e);\n }\n });\n}\n\nfunction insertSelfEdges(g) {\n var layers = util.buildLayerMatrix(g);\n _.forEach(layers, function (layer) {\n var orderShift = 0;\n _.forEach(layer, function (v, i) {\n var node = g.node(v);\n node.order = i + orderShift;\n _.forEach(node.selfEdges, function (selfEdge) {\n util.addDummyNode(\n g,\n 'selfedge',\n {\n width: selfEdge.label.width,\n height: selfEdge.label.height,\n rank: node.rank,\n order: i + ++orderShift,\n e: selfEdge.e,\n label: selfEdge.label,\n },\n '_se'\n );\n });\n delete node.selfEdges;\n });\n });\n}\n\nfunction positionSelfEdges(g) {\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.dummy === 'selfedge') {\n var selfNode = g.node(node.e.v);\n var x = selfNode.x + selfNode.width / 2;\n var y = selfNode.y;\n var dx = node.x - x;\n var dy = selfNode.height / 2;\n g.setEdge(node.e, node.label);\n g.removeNode(v);\n node.label.points = [\n { x: x + (2 * dx) / 3, y: y - dy },\n { x: x + (5 * dx) / 6, y: y - dy },\n { x: x + dx, y: y },\n { x: x + (5 * dx) / 6, y: y + dy },\n { x: x + (2 * dx) / 3, y: y + dy },\n ];\n node.label.x = node.x;\n node.label.y = node.y;\n }\n });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n return _.mapValues(_.pick(obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n var newAttrs = {};\n _.forEach(attrs, function (v, k) {\n newAttrs[k.toLowerCase()] = v;\n });\n return newAttrs;\n}\n"], + "mappings": "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", + "names": ["addDummyNode", "g", "type", "attrs", "name", "v", "uniqueId_default", "simplify", "simplified", "Graph", "forEach_default", "e", "simpleLabel", "label", "asNonCompoundGraph", "intersectRect", "rect", "point", "x", "y", "dx", "dy", "w", "h", "sx", "sy", "buildLayerMatrix", "g", "layering", "map_default", "range_default", "maxRank", "forEach_default", "v", "node", "rank", "isUndefined_default", "normalizeRanks", "min", "min_default", "has_default", "removeEmptyRanks", "offset", "layers", "delta", "nodeRankFactor", "vs", "i", "addBorderNode", "prefix", "order", "addDummyNode", "max_default", "partition", "collection", "fn", "result", "value", "time", "name", "start", "now_default", "notime", "addBorderSegments", "g", "dfs", "v", "children", "node", "forEach_default", "has_default", "rank", "maxRank", "addBorderNode", "prop", "prefix", "sg", "sgNode", "label", "prev", "curr", "addDummyNode", "adjust", "g", "rankDir", "swapWidthHeight", "undo", "reverseY", "swapXY", "forEach_default", "v", "swapWidthHeightOne", "attrs", "w", "reverseYOne", "edge", "has_default", "swapXYOne", "x", "List", "sentinel", "entry", "unlink", "strs", "curr", "filterOutLinks", "k", "v", "DEFAULT_WEIGHT_FN", "constant_default", "greedyFAS", "g", "weightFn", "state", "buildState", "results", "doGreedyFAS", "flatten_default", "map_default", "e", "buckets", "zeroIdx", "sources", "sinks", "entry", "removeNode", "i", "collectPredecessors", "forEach_default", "edge", "weight", "uEntry", "assignBucket", "w", "wEntry", "fasGraph", "Graph", "maxIn", "maxOut", "v", "prevWeight", "edgeWeight", "range_default", "List", "run", "g", "fas", "greedyFAS", "weightFn", "dfsFAS", "forEach_default", "e", "label", "uniqueId_default", "stack", "visited", "dfs", "v", "has_default", "undo", "forwardName", "run", "g", "forEach_default", "edge", "normalizeEdge", "v", "vRank", "w", "wRank", "name", "edgeLabel", "labelRank", "dummy", "attrs", "i", "addDummyNode", "undo", "node", "origLabel", "longestPath", "g", "visited", "dfs", "v", "label", "has_default", "rank", "min_default", "map_default", "e", "forEach_default", "slack", "feasibleTree", "g", "t", "Graph", "start", "size", "edge", "delta", "tightTree", "findMinSlackEdge", "slack", "shiftRanks", "dfs", "v", "forEach_default", "e", "edgeV", "w", "minBy_default", "DEFAULT_WEIGHT_FUNC", "constant_default", "DEFAULT_WEIGHT_FUNC", "constant_default", "topsort", "CycleException", "g", "visited", "stack", "results", "visit", "node", "has_default", "forEach_default", "size_default", "dfs", "g", "vs", "order", "isArray_default", "navigation", "acc", "visited", "forEach_default", "v", "doDfs", "postorder", "has_default", "w", "postorder", "g", "vs", "dfs", "preorder", "g", "vs", "dfs", "networkSimplex", "initLowLimValues", "initCutValues", "calcCutValue", "leaveEdge", "enterEdge", "exchangeEdges", "g", "simplify", "longestPath", "t", "feasibleTree", "e", "f", "vs", "postorder", "forEach_default", "v", "assignCutValue", "child", "childLab", "parent", "childIsTail", "graphEdge", "cutValue", "isOutEdge", "other", "pointsToHead", "otherWeight", "isTreeEdge", "otherCutValue", "tree", "root", "dfsAssignLowLim", "visited", "nextLim", "low", "label", "w", "has_default", "find_default", "edge", "vLabel", "wLabel", "tailLabel", "flip", "candidates", "filter_default", "isDescendant", "minBy_default", "slack", "updateRanks", "preorder", "flipped", "u", "rootLabel", "rank", "g", "networkSimplexRanker", "tightTreeRanker", "longestPathRanker", "longestPath", "feasibleTree", "networkSimplex", "run", "g", "root", "addDummyNode", "depths", "treeDepths", "height", "max_default", "values_default", "nodeSep", "forEach_default", "e", "weight", "sumWeights", "child", "dfs", "v", "children", "top", "addBorderNode", "bottom", "label", "childNode", "childTop", "childBottom", "thisWeight", "minlen", "depth", "reduce_default", "acc", "cleanup", "graphLabel", "edge", "addSubgraphConstraints", "g", "cg", "vs", "prev", "rootPrev", "forEach_default", "v", "child", "parent", "prevChild", "buildLayerGraph", "g", "rank", "relationship", "root", "createRootNode", "result", "Graph", "v", "forEach_default", "node", "parent", "e", "u", "edge", "weight", "isUndefined_default", "has_default", "uniqueId_default", "crossCount", "g", "layering", "cc", "i", "twoLayerCrossCount", "northLayer", "southLayer", "southPos", "zipObject_default", "map_default", "v", "southEntries", "flatten_default", "sortBy_default", "e", "firstIndex", "treeSize", "tree", "forEach_default", "entry", "index", "weightSum", "initOrder", "g", "visited", "simpleNodes", "filter_default", "v", "maxRank", "max_default", "map_default", "layers", "range_default", "dfs", "has_default", "node", "forEach_default", "orderedVs", "sortBy_default", "barycenter", "g", "movable", "map_default", "v", "inV", "result", "reduce_default", "acc", "e", "edge", "nodeU", "resolveConflicts", "entries", "cg", "mappedEntries", "forEach_default", "entry", "tmp", "isUndefined_default", "e", "entryV", "entryW", "sourceSet", "filter_default", "doResolveConflicts", "handleIn", "vEntry", "uEntry", "mergeEntries", "handleOut", "wEntry", "map_default", "pick_default", "target", "source", "sum", "weight", "sort", "entries", "biasRight", "parts", "partition", "entry", "has_default", "sortable", "unsortable", "sortBy_default", "vs", "sum", "weight", "vsIndex", "compareWithBias", "consumeUnsortable", "forEach_default", "result", "flatten_default", "index", "last", "last_default", "bias", "entryV", "entryW", "sortSubgraph", "g", "v", "cg", "biasRight", "movable", "node", "bl", "br", "subgraphs", "filter_default", "w", "barycenters", "barycenter", "forEach_default", "entry", "subgraphResult", "has_default", "mergeBarycenters", "entries", "resolveConflicts", "expandSubgraphs", "result", "sort", "flatten_default", "blPred", "brPred", "target", "other", "isUndefined_default", "order", "g", "maxRank", "downLayerGraphs", "buildLayerGraphs", "range_default", "upLayerGraphs", "layering", "initOrder", "assignOrder", "bestCC", "best", "i", "lastBest", "sweepLayerGraphs", "buildLayerMatrix", "cc", "crossCount", "cloneDeep_default", "ranks", "relationship", "map_default", "rank", "buildLayerGraph", "layerGraphs", "biasRight", "cg", "Graph", "forEach_default", "lg", "root", "sorted", "sortSubgraph", "v", "addSubgraphConstraints", "layer", "parentDummyChains", "g", "postorderNums", "postorder", "forEach_default", "v", "node", "edgeObj", "pathData", "findPath", "path", "lca", "pathIdx", "pathV", "ascending", "w", "vPath", "wPath", "low", "lim", "parent", "result", "dfs", "findType1Conflicts", "g", "layering", "conflicts", "visitLayer", "prevLayer", "layer", "k0", "scanPos", "prevLayerLength", "lastNode", "last_default", "forEach_default", "v", "i", "w", "findOtherInnerSegmentNode", "k1", "scanNode", "u", "uLabel", "uPos", "addConflict", "reduce_default", "findType2Conflicts", "scan", "south", "southPos", "southEnd", "prevNorthBorder", "nextNorthBorder", "range_default", "uNode", "north", "prevNorthPos", "nextNorthPos", "southLookahead", "predecessors", "find_default", "tmp", "conflictsV", "hasConflict", "has_default", "verticalAlignment", "neighborFn", "root", "align", "pos", "order", "prevIdx", "ws", "sortBy_default", "mp", "il", "horizontalCompaction", "reverseSep", "xs", "blockG", "buildBlockGraph", "borderType", "iterate", "setXsFunc", "nextNodesFunc", "stack", "elem", "visited", "pass1", "acc", "e", "pass2", "min", "node", "blockGraph", "Graph", "graphLabel", "sepFn", "sep", "vRoot", "uRoot", "prevMax", "findSmallestWidthAlignment", "xss", "minBy_default", "values_default", "max", "forIn_default", "x", "halfWidth", "width", "alignCoordinates", "alignTo", "alignToVals", "alignToMin", "min_default", "alignToMax", "max_default", "vert", "horiz", "alignment", "delta", "xsVals", "mapValues_default", "balance", "ignore", "map_default", "positionX", "buildLayerMatrix", "merge_default", "adjustedLayering", "inner", "smallestWidth", "nodeSep", "edgeSep", "vLabel", "wLabel", "sum", "position", "g", "asNonCompoundGraph", "positionY", "forOwn_default", "positionX", "x", "v", "layering", "buildLayerMatrix", "rankSep", "prevY", "forEach_default", "layer", "maxHeight", "max_default", "map_default", "layout", "g", "opts", "time", "notime", "layoutGraph", "buildLayoutGraph", "runLayout", "updateInputGraph", "makeSpaceForEdgeLabels", "removeSelfEdges", "run", "rank", "asNonCompoundGraph", "injectEdgeLabelProxies", "removeEmptyRanks", "cleanup", "normalizeRanks", "assignRankMinMax", "removeEdgeLabelProxies", "parentDummyChains", "addBorderSegments", "order", "insertSelfEdges", "adjust", "position", "positionSelfEdges", "removeBorderNodes", "undo", "fixupEdgeLabelCoords", "translateGraph", "assignNodeIntersects", "reversePointsForReversedEdges", "inputGraph", "forEach_default", "v", "inputLabel", "layoutLabel", "e", "has_default", "graphNumAttrs", "graphDefaults", "graphAttrs", "nodeNumAttrs", "nodeDefaults", "edgeNumAttrs", "edgeDefaults", "edgeAttrs", "Graph", "graph", "canonicalize", "merge_default", "selectNumberAttrs", "pick_default", "node", "defaults_default", "edge", "w", "label", "addDummyNode", "maxRank", "max_default", "minX", "maxX", "minY", "maxY", "graphLabel", "marginX", "marginY", "getExtremes", "attrs", "x", "y", "h", "p", "nodeV", "nodeW", "p1", "p2", "intersectRect", "t", "b", "l", "last_default", "r", "layers", "buildLayerMatrix", "layer", "orderShift", "selfEdge", "selfNode", "dx", "dy", "obj", "mapValues_default", "newAttrs", "k"] +} diff --git a/public/chunk-XUHMPXWX.min.js b/public/chunk-XUHMPXWX.min.js new file mode 100644 index 000000000..2bad670a3 --- /dev/null +++ b/public/chunk-XUHMPXWX.min.js @@ -0,0 +1,2 @@ +var g=Object.create;var e=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var m=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(b,c)=>(typeof require<"u"?require:b)[c]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var n=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports),o=(a,b)=>{for(var c in b)e(a,c,{get:b[c],enumerable:!0})},l=(a,b,c,f)=>{if(b&&typeof b=="object"||typeof b=="function")for(let d of i(b))!k.call(a,d)&&d!==c&&e(a,d,{get:()=>b[d],enumerable:!(f=h(b,d))||f.enumerable});return a};var p=(a,b,c)=>(c=a!=null?g(j(a)):{},l(b||!a||!a.__esModule?e(c,"default",{value:a,enumerable:!0}):c,a));export{m as a,n as b,o as c,p as d}; +//# sourceMappingURL=chunk-XUHMPXWX.min.js.map diff --git a/public/chunk-XUHMPXWX.min.js.map b/public/chunk-XUHMPXWX.min.js.map new file mode 100644 index 000000000..98652118b --- /dev/null +++ b/public/chunk-XUHMPXWX.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/public/chunk-YEACHCAA.min.js b/public/chunk-YEACHCAA.min.js new file mode 100644 index 000000000..172750511 --- /dev/null +++ b/public/chunk-YEACHCAA.min.js @@ -0,0 +1,101 @@ +import{b as za,d as qa}from"./chunk-XUHMPXWX.min.js";var Tc=za((Wa,Ua)=>{(function(t,e){typeof Wa=="object"&&typeof Ua<"u"?Ua.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(Wa,function(){"use strict";var t=1e3,e=6e4,r=36e5,i="millisecond",o="second",n="minute",a="hour",s="day",l="week",c="month",h="quarter",f="year",u="date",p="Invalid Date",x=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,_=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,b={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(T){var C=["th","st","nd","rd"],g=T%100;return"["+T+(C[(g-20)%10]||C[g]||C[0])+"]"}},w=function(T,C,g){var A=String(T);return!A||A.length>=C?T:""+Array(C+1-A.length).join(g)+T},v={s:w,z:function(T){var C=-T.utcOffset(),g=Math.abs(C),A=Math.floor(g/60),F=g%60;return(C<=0?"+":"-")+w(A,2,"0")+":"+w(F,2,"0")},m:function T(C,g){if(C.date()1)return T(R[0])}else{var j=C.name;E[j]=C,F=j}return!A&&F&&(M=F),F||!A&&M},y=function(T,C){if(I(T))return T.clone();var g=typeof C=="object"?C:{};return g.date=T,g.args=arguments,new et(g)},$=v;$.l=B,$.i=I,$.w=function(T,C){return y(T,{locale:C.$L,utc:C.$u,x:C.$x,$offset:C.$offset})};var et=function(){function T(g){this.$L=B(g.locale,null,!0),this.parse(g)}var C=T.prototype;return C.parse=function(g){this.$d=function(A){var F=A.date,N=A.utc;if(F===null)return new Date(NaN);if($.u(F))return new Date;if(F instanceof Date)return new Date(F);if(typeof F=="string"&&!/Z$/i.test(F)){var R=F.match(x);if(R){var j=R[2]-1||0,G=(R[7]||"0").substring(0,3);return N?new Date(Date.UTC(R[1],j,R[3]||1,R[4]||0,R[5]||0,R[6]||0,G)):new Date(R[1],j,R[3]||1,R[4]||0,R[5]||0,R[6]||0,G)}}return new Date(F)}(g),this.$x=g.x||{},this.init()},C.init=function(){var g=this.$d;this.$y=g.getFullYear(),this.$M=g.getMonth(),this.$D=g.getDate(),this.$W=g.getDay(),this.$H=g.getHours(),this.$m=g.getMinutes(),this.$s=g.getSeconds(),this.$ms=g.getMilliseconds()},C.$utils=function(){return $},C.isValid=function(){return this.$d.toString()!==p},C.isSame=function(g,A){var F=y(g);return this.startOf(A)<=F&&F<=this.endOf(A)},C.isAfter=function(g,A){return y(g){"use strict";Object.defineProperty(Bo,"__esModule",{value:!0});Bo.sanitizeUrl=void 0;var Xg=/^([^\w]*)(javascript|data|vbscript)/im,Kg=/&#(\w+)(^\w|;)?/g,Zg=/&(newline|tab);/gi,Qg=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,Jg=/^.+(:|:)/gim,t0=[".","/"];function e0(t){return t0.indexOf(t[0])>-1}function r0(t){return t.replace(Kg,function(e,r){return String.fromCharCode(r)})}function i0(t){var e=r0(t||"").replace(Zg,"").replace(Qg,"").trim();if(!e)return"about:blank";if(e0(e))return e;var r=e.match(Jg);if(!r)return e;var i=r[0];return Xg.test(i)?"about:blank":e}Bo.sanitizeUrl=i0});var Xf=za((hl,fl)=>{(function(t,e){typeof hl=="object"&&typeof fl<"u"?fl.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self,t.DOMPurify=e())})(hl,function(){"use strict";let{entries:t,setPrototypeOf:e,isFrozen:r,getPrototypeOf:i,getOwnPropertyDescriptor:o}=Object,{freeze:n,seal:a,create:s}=Object,{apply:l,construct:c}=typeof Reflect<"u"&&Reflect;l||(l=function(P,Q,J){return P.apply(Q,J)}),n||(n=function(P){return P}),a||(a=function(P){return P}),c||(c=function(P,Q){return new P(...Q)});let h=I(Array.prototype.forEach),f=I(Array.prototype.pop),u=I(Array.prototype.push),p=I(String.prototype.toLowerCase),x=I(String.prototype.toString),_=I(String.prototype.match),b=I(String.prototype.replace),w=I(String.prototype.indexOf),v=I(String.prototype.trim),M=I(RegExp.prototype.test),E=B(TypeError);function I(X){return function(P){for(var Q=arguments.length,J=new Array(Q>1?Q-1:0),Ct=1;Ct/gm),Bt=a(/\${[\w\W]*}/gm),Gt=a(/^data-[\-\w.\u00B7-\uFFFF]/),gt=a(/^aria-[\-\w]+$/),Pt=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),ht=a(/^(?:\w+script|data):/i),It=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),O=a(/^html$/i);var V=Object.freeze({__proto__:null,MUSTACHE_EXPR:at,ERB_EXPR:At,TMPLIT_EXPR:Bt,DATA_ATTR:Gt,ARIA_ATTR:gt,IS_ALLOWED_URI:Pt,IS_SCRIPT_OR_DATA:ht,ATTR_WHITESPACE:It,DOCTYPE_NAME:O});let K=()=>typeof window>"u"?null:window,k=function(P,Q){if(typeof P!="object"||typeof P.createPolicy!="function")return null;let J=null,Ct="data-tt-policy-suffix";Q&&Q.hasAttribute(Ct)&&(J=Q.getAttribute(Ct));let te="dompurify"+(J?"#"+J:"");try{return P.createPolicy(te,{createHTML(se){return se},createScriptURL(se){return se}})}catch{return console.warn("TrustedTypes policy "+te+" could not be created."),null}};function Ft(){let X=arguments.length>0&&arguments[0]!==void 0?arguments[0]:K(),P=W=>Ft(W);if(P.version="3.0.5",P.removed=[],!X||!X.document||X.document.nodeType!==9)return P.isSupported=!1,P;let Q=X.document,J=Q.currentScript,{document:Ct}=X,{DocumentFragment:te,HTMLTemplateElement:se,Node:ba,Element:Zl,NodeFilter:Ta,NamedNodeMap:Ag=X.NamedNodeMap||X.MozNamedAttrMap,HTMLFormElement:Bg,DOMParser:Fg,trustedTypes:Co}=X,bo=Zl.prototype,Mg=et(bo,"cloneNode"),Lg=et(bo,"nextSibling"),Eg=et(bo,"childNodes"),va=et(bo,"parentNode");if(typeof se=="function"){let W=Ct.createElement("template");W.content&&W.content.ownerDocument&&(Ct=W.content.ownerDocument)}let Rt,wi="",{implementation:ka,createNodeIterator:Og,createDocumentFragment:Ig,getElementsByTagName:Dg}=Ct,{importNode:Ng}=Q,le={};P.isSupported=typeof t=="function"&&typeof va=="function"&&ka&&ka.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:Sa,ERB_EXPR:wa,TMPLIT_EXPR:Aa,DATA_ATTR:Pg,ARIA_ATTR:Rg,IS_SCRIPT_OR_DATA:$g,ATTR_WHITESPACE:Ql}=V,{IS_ALLOWED_URI:Jl}=V,bt=null,tc=y({},[...rt,...T,...C,...A,...N]),Tt=null,ec=y({},[...R,...j,...G,...Z]),ft=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ai=null,Ba=null,rc=!0,Fa=!0,ic=!1,oc=!0,Dr=!1,rr=!1,Ma=!1,La=!1,Nr=!1,To=!1,vo=!1,nc=!0,ac=!1,zg="user-content-",Ea=!0,Bi=!1,Pr={},Rr=null,sc=y({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),lc=null,cc=y({},["audio","video","img","source","image","track"]),Oa=null,uc=y({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),ko="http://www.w3.org/1998/Math/MathML",So="http://www.w3.org/2000/svg",_e="http://www.w3.org/1999/xhtml",$r=_e,Ia=!1,Da=null,qg=y({},[ko,So,_e],x),ir,Wg=["application/xhtml+xml","text/html"],Ug="text/html",vt,zr=null,Hg=Ct.createElement("form"),hc=function(d){return d instanceof RegExp||d instanceof Function},Na=function(d){if(!(zr&&zr===d)){if((!d||typeof d!="object")&&(d={}),d=$(d),ir=Wg.indexOf(d.PARSER_MEDIA_TYPE)===-1?ir=Ug:ir=d.PARSER_MEDIA_TYPE,vt=ir==="application/xhtml+xml"?x:p,bt="ALLOWED_TAGS"in d?y({},d.ALLOWED_TAGS,vt):tc,Tt="ALLOWED_ATTR"in d?y({},d.ALLOWED_ATTR,vt):ec,Da="ALLOWED_NAMESPACES"in d?y({},d.ALLOWED_NAMESPACES,x):qg,Oa="ADD_URI_SAFE_ATTR"in d?y($(uc),d.ADD_URI_SAFE_ATTR,vt):uc,lc="ADD_DATA_URI_TAGS"in d?y($(cc),d.ADD_DATA_URI_TAGS,vt):cc,Rr="FORBID_CONTENTS"in d?y({},d.FORBID_CONTENTS,vt):sc,Ai="FORBID_TAGS"in d?y({},d.FORBID_TAGS,vt):{},Ba="FORBID_ATTR"in d?y({},d.FORBID_ATTR,vt):{},Pr="USE_PROFILES"in d?d.USE_PROFILES:!1,rc=d.ALLOW_ARIA_ATTR!==!1,Fa=d.ALLOW_DATA_ATTR!==!1,ic=d.ALLOW_UNKNOWN_PROTOCOLS||!1,oc=d.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Dr=d.SAFE_FOR_TEMPLATES||!1,rr=d.WHOLE_DOCUMENT||!1,Nr=d.RETURN_DOM||!1,To=d.RETURN_DOM_FRAGMENT||!1,vo=d.RETURN_TRUSTED_TYPE||!1,La=d.FORCE_BODY||!1,nc=d.SANITIZE_DOM!==!1,ac=d.SANITIZE_NAMED_PROPS||!1,Ea=d.KEEP_CONTENT!==!1,Bi=d.IN_PLACE||!1,Jl=d.ALLOWED_URI_REGEXP||Pt,$r=d.NAMESPACE||_e,ft=d.CUSTOM_ELEMENT_HANDLING||{},d.CUSTOM_ELEMENT_HANDLING&&hc(d.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ft.tagNameCheck=d.CUSTOM_ELEMENT_HANDLING.tagNameCheck),d.CUSTOM_ELEMENT_HANDLING&&hc(d.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ft.attributeNameCheck=d.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),d.CUSTOM_ELEMENT_HANDLING&&typeof d.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(ft.allowCustomizedBuiltInElements=d.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Dr&&(Fa=!1),To&&(Nr=!0),Pr&&(bt=y({},[...N]),Tt=[],Pr.html===!0&&(y(bt,rt),y(Tt,R)),Pr.svg===!0&&(y(bt,T),y(Tt,j),y(Tt,Z)),Pr.svgFilters===!0&&(y(bt,C),y(Tt,j),y(Tt,Z)),Pr.mathMl===!0&&(y(bt,A),y(Tt,G),y(Tt,Z))),d.ADD_TAGS&&(bt===tc&&(bt=$(bt)),y(bt,d.ADD_TAGS,vt)),d.ADD_ATTR&&(Tt===ec&&(Tt=$(Tt)),y(Tt,d.ADD_ATTR,vt)),d.ADD_URI_SAFE_ATTR&&y(Oa,d.ADD_URI_SAFE_ATTR,vt),d.FORBID_CONTENTS&&(Rr===sc&&(Rr=$(Rr)),y(Rr,d.FORBID_CONTENTS,vt)),Ea&&(bt["#text"]=!0),rr&&y(bt,["html","head","body"]),bt.table&&(y(bt,["tbody"]),delete Ai.tbody),d.TRUSTED_TYPES_POLICY){if(typeof d.TRUSTED_TYPES_POLICY.createHTML!="function")throw E('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof d.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw E('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');Rt=d.TRUSTED_TYPES_POLICY,wi=Rt.createHTML("")}else Rt===void 0&&(Rt=k(Co,J)),Rt!==null&&typeof wi=="string"&&(wi=Rt.createHTML(""));n&&n(d),zr=d}},fc=y({},["mi","mo","mn","ms","mtext"]),pc=y({},["foreignobject","desc","title","annotation-xml"]),Yg=y({},["title","style","font","a","script"]),wo=y({},T);y(wo,C),y(wo,g);let Pa=y({},A);y(Pa,F);let jg=function(d){let S=va(d);(!S||!S.tagName)&&(S={namespaceURI:$r,tagName:"template"});let D=p(d.tagName),ot=p(S.tagName);return Da[d.namespaceURI]?d.namespaceURI===So?S.namespaceURI===_e?D==="svg":S.namespaceURI===ko?D==="svg"&&(ot==="annotation-xml"||fc[ot]):!!wo[D]:d.namespaceURI===ko?S.namespaceURI===_e?D==="math":S.namespaceURI===So?D==="math"&&pc[ot]:!!Pa[D]:d.namespaceURI===_e?S.namespaceURI===So&&!pc[ot]||S.namespaceURI===ko&&!fc[ot]?!1:!Pa[D]&&(Yg[D]||!wo[D]):!!(ir==="application/xhtml+xml"&&Da[d.namespaceURI]):!1},or=function(d){u(P.removed,{element:d});try{d.parentNode.removeChild(d)}catch{d.remove()}},Ra=function(d,S){try{u(P.removed,{attribute:S.getAttributeNode(d),from:S})}catch{u(P.removed,{attribute:null,from:S})}if(S.removeAttribute(d),d==="is"&&!Tt[d])if(Nr||To)try{or(S)}catch{}else try{S.setAttribute(d,"")}catch{}},dc=function(d){let S,D;if(La)d=""+d;else{let Xt=_(d,/^[\r\n\t ]+/);D=Xt&&Xt[0]}ir==="application/xhtml+xml"&&$r===_e&&(d=''+d+"");let ot=Rt?Rt.createHTML(d):d;if($r===_e)try{S=new Fg().parseFromString(ot,ir)}catch{}if(!S||!S.documentElement){S=ka.createDocument($r,"template",null);try{S.documentElement.innerHTML=Ia?wi:ot}catch{}}let kt=S.body||S.documentElement;return d&&D&&kt.insertBefore(Ct.createTextNode(D),kt.childNodes[0]||null),$r===_e?Dg.call(S,rr?"html":"body")[0]:rr?S.documentElement:kt},mc=function(d){return Og.call(d.ownerDocument||d,d,Ta.SHOW_ELEMENT|Ta.SHOW_COMMENT|Ta.SHOW_TEXT,null,!1)},Gg=function(d){return d instanceof Bg&&(typeof d.nodeName!="string"||typeof d.textContent!="string"||typeof d.removeChild!="function"||!(d.attributes instanceof Ag)||typeof d.removeAttribute!="function"||typeof d.setAttribute!="function"||typeof d.namespaceURI!="string"||typeof d.insertBefore!="function"||typeof d.hasChildNodes!="function")},Ao=function(d){return typeof ba=="object"?d instanceof ba:d&&typeof d=="object"&&typeof d.nodeType=="number"&&typeof d.nodeName=="string"},Ce=function(d,S,D){le[d]&&h(le[d],ot=>{ot.call(P,S,D,zr)})},gc=function(d){let S;if(Ce("beforeSanitizeElements",d,null),Gg(d))return or(d),!0;let D=vt(d.nodeName);if(Ce("uponSanitizeElement",d,{tagName:D,allowedTags:bt}),d.hasChildNodes()&&!Ao(d.firstElementChild)&&(!Ao(d.content)||!Ao(d.content.firstElementChild))&&M(/<[/\w]/g,d.innerHTML)&&M(/<[/\w]/g,d.textContent))return or(d),!0;if(!bt[D]||Ai[D]){if(!Ai[D]&&yc(D)&&(ft.tagNameCheck instanceof RegExp&&M(ft.tagNameCheck,D)||ft.tagNameCheck instanceof Function&&ft.tagNameCheck(D)))return!1;if(Ea&&!Rr[D]){let ot=va(d)||d.parentNode,kt=Eg(d)||d.childNodes;if(kt&&ot){let Xt=kt.length;for(let ut=Xt-1;ut>=0;--ut)ot.insertBefore(Mg(kt[ut],!0),Lg(d))}}return or(d),!0}return d instanceof Zl&&!jg(d)||(D==="noscript"||D==="noembed"||D==="noframes")&&M(/<\/no(script|embed|frames)/i,d.innerHTML)?(or(d),!0):(Dr&&d.nodeType===3&&(S=d.textContent,S=b(S,Sa," "),S=b(S,wa," "),S=b(S,Aa," "),d.textContent!==S&&(u(P.removed,{element:d.cloneNode()}),d.textContent=S)),Ce("afterSanitizeElements",d,null),!1)},xc=function(d,S,D){if(nc&&(S==="id"||S==="name")&&(D in Ct||D in Hg))return!1;if(!(Fa&&!Ba[S]&&M(Pg,S))){if(!(rc&&M(Rg,S))){if(!Tt[S]||Ba[S]){if(!(yc(d)&&(ft.tagNameCheck instanceof RegExp&&M(ft.tagNameCheck,d)||ft.tagNameCheck instanceof Function&&ft.tagNameCheck(d))&&(ft.attributeNameCheck instanceof RegExp&&M(ft.attributeNameCheck,S)||ft.attributeNameCheck instanceof Function&&ft.attributeNameCheck(S))||S==="is"&&ft.allowCustomizedBuiltInElements&&(ft.tagNameCheck instanceof RegExp&&M(ft.tagNameCheck,D)||ft.tagNameCheck instanceof Function&&ft.tagNameCheck(D))))return!1}else if(!Oa[S]){if(!M(Jl,b(D,Ql,""))){if(!((S==="src"||S==="xlink:href"||S==="href")&&d!=="script"&&w(D,"data:")===0&&lc[d])){if(!(ic&&!M($g,b(D,Ql,"")))){if(D)return!1}}}}}}return!0},yc=function(d){return d.indexOf("-")>0},_c=function(d){let S,D,ot,kt;Ce("beforeSanitizeAttributes",d,null);let{attributes:Xt}=d;if(!Xt)return;let ut={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Tt};for(kt=Xt.length;kt--;){S=Xt[kt];let{name:ce,namespaceURI:$a}=S;if(D=ce==="value"?S.value:v(S.value),ot=vt(ce),ut.attrName=ot,ut.attrValue=D,ut.keepAttr=!0,ut.forceKeepAttr=void 0,Ce("uponSanitizeAttribute",d,ut),D=ut.attrValue,ut.forceKeepAttr||(Ra(ce,d),!ut.keepAttr))continue;if(!oc&&M(/\/>/i,D)){Ra(ce,d);continue}Dr&&(D=b(D,Sa," "),D=b(D,wa," "),D=b(D,Aa," "));let Cc=vt(d.nodeName);if(xc(Cc,ot,D)){if(ac&&(ot==="id"||ot==="name")&&(Ra(ce,d),D=zg+D),Rt&&typeof Co=="object"&&typeof Co.getAttributeType=="function"&&!$a)switch(Co.getAttributeType(Cc,ot)){case"TrustedHTML":{D=Rt.createHTML(D);break}case"TrustedScriptURL":{D=Rt.createScriptURL(D);break}}try{$a?d.setAttributeNS($a,ce,D):d.setAttribute(ce,D),f(P.removed)}catch{}}}Ce("afterSanitizeAttributes",d,null)},Vg=function W(d){let S,D=mc(d);for(Ce("beforeSanitizeShadowDOM",d,null);S=D.nextNode();)Ce("uponSanitizeShadowNode",S,null),!gc(S)&&(S.content instanceof te&&W(S.content),_c(S));Ce("afterSanitizeShadowDOM",d,null)};return P.sanitize=function(W){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},S,D,ot,kt;if(Ia=!W,Ia&&(W=""),typeof W!="string"&&!Ao(W))if(typeof W.toString=="function"){if(W=W.toString(),typeof W!="string")throw E("dirty is not a string, aborting")}else throw E("toString is not a function");if(!P.isSupported)return W;if(Ma||Na(d),P.removed=[],typeof W=="string"&&(Bi=!1),Bi){if(W.nodeName){let ce=vt(W.nodeName);if(!bt[ce]||Ai[ce])throw E("root node is forbidden and cannot be sanitized in-place")}}else if(W instanceof ba)S=dc(""),D=S.ownerDocument.importNode(W,!0),D.nodeType===1&&D.nodeName==="BODY"||D.nodeName==="HTML"?S=D:S.appendChild(D);else{if(!Nr&&!Dr&&!rr&&W.indexOf("<")===-1)return Rt&&vo?Rt.createHTML(W):W;if(S=dc(W),!S)return Nr?null:vo?wi:""}S&&La&&or(S.firstChild);let Xt=mc(Bi?W:S);for(;ot=Xt.nextNode();)gc(ot)||(ot.content instanceof te&&Vg(ot.content),_c(ot));if(Bi)return W;if(Nr){if(To)for(kt=Ig.call(S.ownerDocument);S.firstChild;)kt.appendChild(S.firstChild);else kt=S;return(Tt.shadowroot||Tt.shadowrootmode)&&(kt=Ng.call(Q,kt,!0)),kt}let ut=rr?S.outerHTML:S.innerHTML;return rr&&bt["!doctype"]&&S.ownerDocument&&S.ownerDocument.doctype&&S.ownerDocument.doctype.name&&M(O,S.ownerDocument.doctype.name)&&(ut=" +`+ut),Dr&&(ut=b(ut,Sa," "),ut=b(ut,wa," "),ut=b(ut,Aa," ")),Rt&&vo?Rt.createHTML(ut):ut},P.setConfig=function(W){Na(W),Ma=!0},P.clearConfig=function(){zr=null,Ma=!1},P.isValidAttribute=function(W,d,S){zr||Na({});let D=vt(W),ot=vt(d);return xc(D,ot,S)},P.addHook=function(W,d){typeof d=="function"&&(le[W]=le[W]||[],u(le[W],d))},P.removeHook=function(W){if(le[W])return f(le[W])},P.removeHooks=function(W){le[W]&&(le[W]=[])},P.removeAllHooks=function(){le={}},P}var it=Ft();return it})});function bc(t){for(var e=[],r=1;r=i)&&(r=i);else{let i=-1;for(let o of t)(o=e(o,++i,t))!=null&&(r=o)&&(r=o)}return r}function Sc(t,e){let r;if(e===void 0)for(let i of t)i!=null&&(r>i||r===void 0&&i>=i)&&(r=i);else{let i=-1;for(let o of t)(o=e(o,++i,t))!=null&&(r>o||r===void 0&&o>=o)&&(r=o)}return r}function nr(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}function Ha(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}function ar(t){let e,r,i;t.length!==2?(e=nr,r=(s,l)=>nr(t(s),l),i=(s,l)=>t(s)-l):(e=t===nr||t===Ha?t:o0,r=t,i=t);function o(s,l,c=0,h=s.length){if(c>>1;r(s[f],l)<0?c=f+1:h=f}while(c>>1;r(s[f],l)<=0?c=f+1:h=f}while(cc&&i(s[f-1],l)>-i(s[f],l)?f-1:f}return{left:o,center:a,right:n}}function o0(){return 0}function Ya(t){return t===null?NaN:+t}var wc=ar(nr),Ac=wc.right,n0=wc.left,a0=ar(Ya).center,ja=Ac;var qr=class extends Map{constructor(e,r=c0){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[i,o]of e)this.set(i,o)}get(e){return super.get(Bc(this,e))}has(e){return super.has(Bc(this,e))}set(e,r){return super.set(s0(this,e),r)}delete(e){return super.delete(l0(this,e))}};function Bc({_intern:t,_key:e},r){let i=e(r);return t.has(i)?t.get(i):r}function s0({_intern:t,_key:e},r){let i=e(r);return t.has(i)?t.get(i):(t.set(i,r),r)}function l0({_intern:t,_key:e},r){let i=e(r);return t.has(i)&&(r=t.get(i),t.delete(i)),r}function c0(t){return t!==null&&typeof t=="object"?t.valueOf():t}var u0=Math.sqrt(50),h0=Math.sqrt(10),f0=Math.sqrt(2);function Fo(t,e,r){let i=(e-t)/Math.max(0,r),o=Math.floor(Math.log10(i)),n=i/Math.pow(10,o),a=n>=u0?10:n>=h0?5:n>=f0?2:1,s,l,c;return o<0?(c=Math.pow(10,-o)/a,s=Math.round(t*c),l=Math.round(e*c),s/ce&&--l,c=-c):(c=Math.pow(10,o)*a,s=Math.round(t/c),l=Math.round(e/c),s*ce&&--l),l0))return[];if(t===e)return[t];let i=e=o))return[];let s=n-o+1,l=new Array(s);if(i)if(a<0)for(let c=0;c+t(e)}function g0(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function x0(){return!this.__axis}function Lc(t,e){var r=[],i=null,o=null,n=6,a=6,s=3,l=typeof window<"u"&&window.devicePixelRatio>1?0:.5,c=t===Oo||t===Eo?-1:1,h=t===Eo||t===Ga?"x":"y",f=t===Oo||t===Va?p0:d0;function u(p){var x=i??(e.ticks?e.ticks.apply(e,r):e.domain()),_=o??(e.tickFormat?e.tickFormat.apply(e,r):Fc),b=Math.max(n,0)+s,w=e.range(),v=+w[0]+l,M=+w[w.length-1]+l,E=(e.bandwidth?g0:m0)(e.copy(),l),I=p.selection?p.selection():p,B=I.selectAll(".domain").data([null]),y=I.selectAll(".tick").data(x,e).order(),$=y.exit(),et=y.enter().append("g").attr("class","tick"),rt=y.select("line"),T=y.select("text");B=B.merge(B.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),y=y.merge(et),rt=rt.merge(et.append("line").attr("stroke","currentColor").attr(h+"2",c*n)),T=T.merge(et.append("text").attr("fill","currentColor").attr(h,c*b).attr("dy",t===Oo?"0em":t===Va?"0.71em":"0.32em")),p!==I&&(B=B.transition(p),y=y.transition(p),rt=rt.transition(p),T=T.transition(p),$=$.transition(p).attr("opacity",Mc).attr("transform",function(C){return isFinite(C=E(C))?f(C+l):this.getAttribute("transform")}),et.attr("opacity",Mc).attr("transform",function(C){var g=this.parentNode.__axis;return f((g&&isFinite(g=g(C))?g:E(C))+l)})),$.remove(),B.attr("d",t===Eo||t===Ga?a?"M"+c*a+","+v+"H"+l+"V"+M+"H"+c*a:"M"+l+","+v+"V"+M:a?"M"+v+","+c*a+"V"+l+"H"+M+"V"+c*a:"M"+v+","+l+"H"+M),y.attr("opacity",1).attr("transform",function(C){return f(E(C)+l)}),rt.attr(h+"2",c*n),T.attr(h,c*b).text(_),I.filter(x0).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===Ga?"start":t===Eo?"end":"middle"),I.each(function(){this.__axis=E})}return u.scale=function(p){return arguments.length?(e=p,u):e},u.ticks=function(){return r=Array.from(arguments),u},u.tickArguments=function(p){return arguments.length?(r=p==null?[]:Array.from(p),u):r.slice()},u.tickValues=function(p){return arguments.length?(i=p==null?null:Array.from(p),u):i&&i.slice()},u.tickFormat=function(p){return arguments.length?(o=p,u):o},u.tickSize=function(p){return arguments.length?(n=a=+p,u):n},u.tickSizeInner=function(p){return arguments.length?(n=+p,u):n},u.tickSizeOuter=function(p){return arguments.length?(a=+p,u):a},u.tickPadding=function(p){return arguments.length?(s=+p,u):s},u.offset=function(p){return arguments.length?(l=+p,u):l},u}function y0(t){return Lc(Oo,t)}function _0(t){return Lc(Va,t)}function C0(){}function sr(t){return t==null?C0:function(){return this.querySelector(t)}}function Ec(t){typeof t!="function"&&(t=sr(t));for(var e=this._groups,r=e.length,i=new Array(r),o=0;o=M&&(M=v+1);!(I=b[M])&&++M=0;)(a=i[o])&&(n&&a.compareDocumentPosition(n)^4&&n.parentNode.insertBefore(a,n),n=a);return this}function Hc(t){t||(t=O0);function e(f,u){return f&&u?t(f.__data__,u.__data__):!f-!u}for(var r=this._groups,i=r.length,o=new Array(i),n=0;ne?1:t>=e?0:NaN}function Yc(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function jc(){return Array.from(this)}function Gc(){for(var t=this._groups,e=0,r=t.length;e=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),Xa.hasOwnProperty(e)?{space:Xa[e],local:t}:t}function I0(t){return function(){this.removeAttribute(t)}}function D0(t){return function(){this.removeAttributeNS(t.space,t.local)}}function N0(t,e){return function(){this.setAttribute(t,e)}}function P0(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function R0(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function $0(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function Zc(t,e){var r=be(t);if(arguments.length<2){var i=this.node();return r.local?i.getAttributeNS(r.space,r.local):i.getAttribute(r)}return this.each((e==null?r.local?D0:I0:typeof e=="function"?r.local?$0:R0:r.local?P0:N0)(r,e))}function Po(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function z0(t){return function(){this.style.removeProperty(t)}}function q0(t,e,r){return function(){this.style.setProperty(t,e,r)}}function W0(t,e,r){return function(){var i=e.apply(this,arguments);i==null?this.style.removeProperty(t):this.style.setProperty(t,i,r)}}function Qc(t,e,r){return arguments.length>1?this.each((e==null?z0:typeof e=="function"?W0:q0)(t,e,r??"")):De(this.node(),t)}function De(t,e){return t.style.getPropertyValue(e)||Po(t).getComputedStyle(t,null).getPropertyValue(e)}function U0(t){return function(){delete this[t]}}function H0(t,e){return function(){this[t]=e}}function Y0(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function Jc(t,e){return arguments.length>1?this.each((e==null?U0:typeof e=="function"?Y0:H0)(t,e)):this.node()[t]}function tu(t){return t.trim().split(/^|\s+/)}function Ka(t){return t.classList||new eu(t)}function eu(t){this._node=t,this._names=tu(t.getAttribute("class")||"")}eu.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function ru(t,e){for(var r=Ka(t),i=-1,o=e.length;++i=0&&(r=e.slice(i+1),e=e.slice(0,i)),{type:e,name:r}})}function hx(t){return function(){var e=this.__on;if(e){for(var r=0,i=-1,o=e.length,n;r>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?$o(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?$o(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=yx.exec(t))?new Mt(e[1],e[2],e[3],1):(e=_x.exec(t))?new Mt(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=Cx.exec(t))?$o(e[1],e[2],e[3],e[4]):(e=bx.exec(t))?$o(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=Tx.exec(t))?Su(e[1],e[2]/100,e[3]/100,1):(e=vx.exec(t))?Su(e[1],e[2]/100,e[3]/100,e[4]):_u.hasOwnProperty(t)?Tu(_u[t]):t==="transparent"?new Mt(NaN,NaN,NaN,0):null}function Tu(t){return new Mt(t>>16&255,t>>8&255,t&255,1)}function $o(t,e,r,i){return i<=0&&(t=e=r=NaN),new Mt(t,e,r,i)}function Qa(t){return t instanceof Ne||(t=re(t)),t?(t=t.rgb(),new Mt(t.r,t.g,t.b,t.opacity)):new Mt}function Yr(t,e,r,i){return arguments.length===1?Qa(t):new Mt(t,e,r,i??1)}function Mt(t,e,r,i){this.r=+t,this.g=+e,this.b=+r,this.opacity=+i}lr(Mt,Yr,Ur(Ne,{brighter(t){return t=t==null?qo:Math.pow(qo,t),new Mt(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?Di:Math.pow(Di,t),new Mt(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Mt(ur(this.r),ur(this.g),ur(this.b),Wo(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:vu,formatHex:vu,formatHex8:wx,formatRgb:ku,toString:ku}));function vu(){return`#${cr(this.r)}${cr(this.g)}${cr(this.b)}`}function wx(){return`#${cr(this.r)}${cr(this.g)}${cr(this.b)}${cr((isNaN(this.opacity)?1:this.opacity)*255)}`}function ku(){let t=Wo(this.opacity);return`${t===1?"rgb(":"rgba("}${ur(this.r)}, ${ur(this.g)}, ${ur(this.b)}${t===1?")":`, ${t})`}`}function Wo(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ur(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function cr(t){return t=ur(t),(t<16?"0":"")+t.toString(16)}function Su(t,e,r,i){return i<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new ee(t,e,r,i)}function Au(t){if(t instanceof ee)return new ee(t.h,t.s,t.l,t.opacity);if(t instanceof Ne||(t=re(t)),!t)return new ee;if(t instanceof ee)return t;t=t.rgb();var e=t.r/255,r=t.g/255,i=t.b/255,o=Math.min(e,r,i),n=Math.max(e,r,i),a=NaN,s=n-o,l=(n+o)/2;return s?(e===n?a=(r-i)/s+(r0&&l<1?0:a,new ee(a,s,l,t.opacity)}function Bu(t,e,r,i){return arguments.length===1?Au(t):new ee(t,e,r,i??1)}function ee(t,e,r,i){this.h=+t,this.s=+e,this.l=+r,this.opacity=+i}lr(ee,Bu,Ur(Ne,{brighter(t){return t=t==null?qo:Math.pow(qo,t),new ee(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?Di:Math.pow(Di,t),new ee(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,i=r+(r<.5?r:1-r)*e,o=2*r-i;return new Mt(Za(t>=240?t-240:t+120,o,i),Za(t,o,i),Za(t<120?t+240:t-120,o,i),this.opacity)},clamp(){return new ee(wu(this.h),zo(this.s),zo(this.l),Wo(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=Wo(this.opacity);return`${t===1?"hsl(":"hsla("}${wu(this.h)}, ${zo(this.s)*100}%, ${zo(this.l)*100}%${t===1?")":`, ${t})`}`}}));function wu(t){return t=(t||0)%360,t<0?t+360:t}function zo(t){return Math.max(0,Math.min(1,t||0))}function Za(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var Fu=Math.PI/180,Mu=180/Math.PI;var Uo=18,Lu=.96422,Eu=1,Ou=.82521,Iu=4/29,jr=6/29,Du=3*jr*jr,Ax=jr*jr*jr;function Nu(t){if(t instanceof he)return new he(t.l,t.a,t.b,t.opacity);if(t instanceof ve)return Pu(t);t instanceof Mt||(t=Qa(t));var e=rs(t.r),r=rs(t.g),i=rs(t.b),o=Ja((.2225045*e+.7168786*r+.0606169*i)/Eu),n,a;return e===r&&r===i?n=a=o:(n=Ja((.4360747*e+.3850649*r+.1430804*i)/Lu),a=Ja((.0139322*e+.0971045*r+.7141733*i)/Ou)),new he(116*o-16,500*(n-o),200*(o-a),t.opacity)}function is(t,e,r,i){return arguments.length===1?Nu(t):new he(t,e,r,i??1)}function he(t,e,r,i){this.l=+t,this.a=+e,this.b=+r,this.opacity=+i}lr(he,is,Ur(Ne,{brighter(t){return new he(this.l+Uo*(t??1),this.a,this.b,this.opacity)},darker(t){return new he(this.l-Uo*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=Lu*ts(e),t=Eu*ts(t),r=Ou*ts(r),new Mt(es(3.1338561*e-1.6168667*t-.4906146*r),es(-.9787684*e+1.9161415*t+.033454*r),es(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));function Ja(t){return t>Ax?Math.pow(t,1/3):t/Du+Iu}function ts(t){return t>jr?t*t*t:Du*(t-Iu)}function es(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function rs(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Bx(t){if(t instanceof ve)return new ve(t.h,t.c,t.l,t.opacity);if(t instanceof he||(t=Nu(t)),t.a===0&&t.b===0)return new ve(NaN,0()=>t;function Ru(t,e){return function(r){return t+r*e}}function Fx(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(i){return Math.pow(t+i*e,r)}}function $u(t,e){var r=e-t;return r?Ru(t,r>180||r<-180?r-360*Math.round(r/360):r):Gr(isNaN(t)?e:t)}function zu(t){return(t=+t)==1?ke:function(e,r){return r-e?Fx(e,r,t):Gr(isNaN(e)?r:e)}}function ke(t,e){var r=e-t;return r?Ru(t,r):Gr(isNaN(t)?e:t)}function qu(t){return function(e,r){var i=t((e=Pi(e)).h,(r=Pi(r)).h),o=ke(e.c,r.c),n=ke(e.l,r.l),a=ke(e.opacity,r.opacity);return function(s){return e.h=i(s),e.c=o(s),e.l=n(s),e.opacity=a(s),e+""}}}var Mx=qu($u),Lx=qu(ke);function os(t,e,r,i,o){var n=t*t,a=n*t;return((1-3*t+3*n-a)*e+(4-6*n+3*a)*r+(1+3*t+3*n-3*a)*i+a*o)/6}function Wu(t){var e=t.length-1;return function(r){var i=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),o=t[i],n=t[i+1],a=i>0?t[i-1]:2*o-n,s=ir&&(n=e.slice(r,n),s[a]?s[a]+=n:s[++a]=n),(i=i[0])===(o=o[0])?s[a]?s[a]+=o:s[++a]=o:(s[++a]=null,l.push({i:a,x:Lt(i,o)})),r=ns.lastIndex;return r180?h+=360:h-c>180&&(c+=360),u.push({i:f.push(o(f)+"rotate(",null,i)-2,x:Lt(c,h)})):h&&f.push(o(f)+"rotate("+h+i)}function s(c,h,f,u){c!==h?u.push({i:f.push(o(f)+"skewX(",null,i)-2,x:Lt(c,h)}):h&&f.push(o(f)+"skewX("+h+i)}function l(c,h,f,u,p,x){if(c!==f||h!==u){var _=p.push(o(p)+"scale(",null,",",null,")");x.push({i:_-4,x:Lt(c,f)},{i:_-2,x:Lt(h,u)})}else(f!==1||u!==1)&&p.push(o(p)+"scale("+f+","+u+")")}return function(c,h){var f=[],u=[];return c=t(c),h=t(h),n(c.translateX,c.translateY,h.translateX,h.translateY,f,u),a(c.rotate,h.rotate,f,u),s(c.skewX,h.skewX,f,u),l(c.scaleX,c.scaleY,h.scaleX,h.scaleY,f,u),c=h=null,function(p){for(var x=-1,_=u.length,b;++x<_;)f[(b=u[x]).i]=b.x(p);return f.join("")}}}var cs=Ju(Zu,"px, ","px)","deg)"),us=Ju(Qu,", ",")",")");function Pe(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var hs=Symbol("implicit");function $i(){var t=new qr,e=[],r=[],i=hs;function o(n){let a=t.get(n);if(a===void 0){if(i!==hs)return i;t.set(n,a=e.push(n)-1)}return r[a%r.length]}return o.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new qr;for(let a of n)t.has(a)||t.set(a,e.push(a)-1);return o},o.range=function(n){return arguments.length?(r=Array.from(n),o):r.slice()},o.unknown=function(n){return arguments.length?(i=n,o):i},o.copy=function(){return $i(e,r).unknown(i)},Pe.apply(o,arguments),o}function fs(){var t=$i().unknown(void 0),e=t.domain,r=t.range,i=0,o=1,n,a,s=!1,l=0,c=0,h=.5;delete t.unknown;function f(){var u=e().length,p=oe&&(r=t,t=e,e=r),function(i){return Math.max(t,Math.min(e,i))}}function Px(t,e,r){var i=t[0],o=t[1],n=e[0],a=e[1];return o2?Rx:Px,l=c=null,f}function f(u){return u==null||isNaN(u=+u)?n:(l||(l=s(t.map(i),e,r)))(i(a(u)))}return f.invert=function(u){return a(o((c||(c=s(e,t.map(i),Lt)))(u)))},f.domain=function(u){return arguments.length?(t=Array.from(u,ds),h()):t.slice()},f.range=function(u){return arguments.length?(e=Array.from(u),h()):e.slice()},f.rangeRound=function(u){return e=Array.from(u),r=ss,h()},f.clamp=function(u){return arguments.length?(a=u?!0:Vr,h()):a!==Vr},f.interpolate=function(u){return arguments.length?(r=u,h()):r},f.unknown=function(u){return arguments.length?(n=u,f):n},function(u,p){return i=u,o=p,h()}}function zi(){return $x()(Vr,Vr)}function eh(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function pr(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,i=t.slice(0,r);return[i.length>1?i[0]+i.slice(2):i,+t.slice(r+1)]}function fe(t){return t=pr(Math.abs(t)),t?t[1]:NaN}function rh(t,e){return function(r,i){for(var o=r.length,n=[],a=0,s=t[0],l=0;o>0&&s>0&&(l+s+1>i&&(s=Math.max(1,i-l)),n.push(r.substring(o-=s,o+s)),!((l+=s+1)>i));)s=t[a=(a+1)%t.length];return n.reverse().join(e)}}function ih(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var zx=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Re(t){if(!(e=zx.exec(t)))throw new Error("invalid format: "+t);var e;return new Go({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}Re.prototype=Go.prototype;function Go(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}Go.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function oh(t){t:for(var e=t.length,r=1,i=-1,o;r0&&(i=0);break}return i>0?t.slice(0,i)+t.slice(o+1):t}var gs;function nh(t,e){var r=pr(t,e);if(!r)return t+"";var i=r[0],o=r[1],n=o-(gs=Math.max(-8,Math.min(8,Math.floor(o/3)))*3)+1,a=i.length;return n===a?i:n>a?i+new Array(n-a+1).join("0"):n>0?i.slice(0,n)+"."+i.slice(n):"0."+new Array(1-n).join("0")+pr(t,Math.max(0,e+n-1))[0]}function xs(t,e){var r=pr(t,e);if(!r)return t+"";var i=r[0],o=r[1];return o<0?"0."+new Array(-o).join("0")+i:i.length>o+1?i.slice(0,o+1)+"."+i.slice(o+1):i+new Array(o-i.length+2).join("0")}var ys={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:eh,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>xs(t*100,e),r:xs,s:nh,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function _s(t){return t}var ah=Array.prototype.map,sh=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function lh(t){var e=t.grouping===void 0||t.thousands===void 0?_s:rh(ah.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",i=t.currency===void 0?"":t.currency[1]+"",o=t.decimal===void 0?".":t.decimal+"",n=t.numerals===void 0?_s:ih(ah.call(t.numerals,String)),a=t.percent===void 0?"%":t.percent+"",s=t.minus===void 0?"\u2212":t.minus+"",l=t.nan===void 0?"NaN":t.nan+"";function c(f){f=Re(f);var u=f.fill,p=f.align,x=f.sign,_=f.symbol,b=f.zero,w=f.width,v=f.comma,M=f.precision,E=f.trim,I=f.type;I==="n"?(v=!0,I="g"):ys[I]||(M===void 0&&(M=12),E=!0,I="g"),(b||u==="0"&&p==="=")&&(b=!0,u="0",p="=");var B=_==="$"?r:_==="#"&&/[boxX]/.test(I)?"0"+I.toLowerCase():"",y=_==="$"?i:/[%p]/.test(I)?a:"",$=ys[I],et=/[defgprs%]/.test(I);M=M===void 0?6:/[gprs]/.test(I)?Math.max(1,Math.min(21,M)):Math.max(0,Math.min(20,M));function rt(T){var C=B,g=y,A,F,N;if(I==="c")g=$(T)+g,T="";else{T=+T;var R=T<0||1/T<0;if(T=isNaN(T)?l:$(Math.abs(T),M),E&&(T=oh(T)),R&&+T==0&&x!=="+"&&(R=!1),C=(R?x==="("?x:s:x==="-"||x==="("?"":x)+C,g=(I==="s"?sh[8+gs/3]:"")+g+(R&&x==="("?")":""),et){for(A=-1,F=T.length;++AN||N>57){g=(N===46?o+T.slice(A+1):T.slice(A))+g,T=T.slice(0,A);break}}}v&&!b&&(T=e(T,1/0));var j=C.length+T.length+g.length,G=j>1)+C+T+g+G.slice(j);break;default:T=G+C+T+g;break}return n(T)}return rt.toString=function(){return f+""},rt}function h(f,u){var p=c((f=Re(f),f.type="f",f)),x=Math.max(-8,Math.min(8,Math.floor(fe(u)/3)))*3,_=Math.pow(10,-x),b=sh[8+x/3];return function(w){return p(_*w)+b}}return{format:c,formatPrefix:h}}var Vo,Xo,Ko;Cs({thousands:",",grouping:[3],currency:["$",""]});function Cs(t){return Vo=lh(t),Xo=Vo.format,Ko=Vo.formatPrefix,Vo}function bs(t){return Math.max(0,-fe(Math.abs(t)))}function Ts(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(fe(e)/3)))*3-fe(Math.abs(t)))}function vs(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,fe(e)-fe(t))+1}function ks(t,e,r,i){var o=Wr(t,e,r),n;switch(i=Re(i??",f"),i.type){case"s":{var a=Math.max(Math.abs(t),Math.abs(e));return i.precision==null&&!isNaN(n=Ts(o,a))&&(i.precision=n),Ko(i,a)}case"":case"e":case"g":case"p":case"r":{i.precision==null&&!isNaN(n=vs(o,Math.max(Math.abs(t),Math.abs(e))))&&(i.precision=n-(i.type==="e"));break}case"f":case"%":{i.precision==null&&!isNaN(n=bs(o))&&(i.precision=n-(i.type==="%")*2);break}}return Xo(i)}function qx(t){var e=t.domain;return t.ticks=function(r){var i=e();return Mo(i[0],i[i.length-1],r??10)},t.tickFormat=function(r,i){var o=e();return ks(o[0],o[o.length-1],r??10,i)},t.nice=function(r){r==null&&(r=10);var i=e(),o=0,n=i.length-1,a=i[o],s=i[n],l,c,h=10;for(s0;){if(c=Fi(a,s,r),c===l)return i[o]=a,i[n]=s,e(i);if(c>0)a=Math.floor(a/c)*c,s=Math.ceil(s/c)*c;else if(c<0)a=Math.ceil(a*c)/c,s=Math.floor(s*c)/c;else break;l=c}return t},t}function Ss(){var t=zi();return t.copy=function(){return jo(t,Ss())},Pe.apply(t,arguments),qx(t)}var ws=new Date,As=new Date;function nt(t,e,r,i){function o(n){return t(n=arguments.length===0?new Date:new Date(+n)),n}return o.floor=n=>(t(n=new Date(+n)),n),o.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),o.round=n=>{let a=o(n),s=o.ceil(n);return n-a(e(n=new Date(+n),a==null?1:Math.floor(a)),n),o.range=(n,a,s)=>{let l=[];if(n=o.ceil(n),s=s==null?1:Math.floor(s),!(n0))return l;let c;do l.push(c=new Date(+n)),e(n,s),t(n);while(cnt(a=>{if(a>=a)for(;t(a),!n(a);)a.setTime(a-1)},(a,s)=>{if(a>=a)if(s<0)for(;++s<=0;)for(;e(a,-1),!n(a););else for(;--s>=0;)for(;e(a,1),!n(a););}),r&&(o.count=(n,a)=>(ws.setTime(+n),As.setTime(+a),t(ws),t(As),Math.floor(r(ws,As))),o.every=n=>(n=Math.floor(n),!isFinite(n)||!(n>0)?null:n>1?o.filter(i?a=>i(a)%n===0:a=>o.count(0,a)%n===0):o)),o}var dr=nt(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);dr.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?nt(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):dr);var ch=dr.range;var pe=nt(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),uh=pe.range;var Xr=nt(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),Wx=Xr.range,Zo=nt(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),Ux=Zo.range;var Kr=nt(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),Hx=Kr.range,Qo=nt(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),Yx=Qo.range;var Se=nt(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),jx=Se.range,Wi=nt(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),Gx=Wi.range,Jo=nt(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),Vx=Jo.range;function xr(t){return nt(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}var we=xr(0),Zr=xr(1),fh=xr(2),ph=xr(3),$e=xr(4),dh=xr(5),mh=xr(6),gh=we.range,Xx=Zr.range,Kx=fh.range,Zx=ph.range,Qx=$e.range,Jx=dh.range,ty=mh.range;function yr(t){return nt(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var _r=yr(0),Qr=yr(1),xh=yr(2),yh=yr(3),ze=yr(4),_h=yr(5),Ch=yr(6),bh=_r.range,ey=Qr.range,ry=xh.range,iy=yh.range,oy=ze.range,ny=_h.range,ay=Ch.range;var Jr=nt(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),sy=Jr.range,tn=nt(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),ly=tn.range;var Vt=nt(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());Vt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:nt(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});var cy=Vt.range,ie=nt(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());ie.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:nt(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});var uy=ie.range;function vh(t,e,r,i,o,n){let a=[[pe,1,1e3],[pe,5,5*1e3],[pe,15,15*1e3],[pe,30,30*1e3],[n,1,6e4],[n,5,5*6e4],[n,15,15*6e4],[n,30,30*6e4],[o,1,36e5],[o,3,3*36e5],[o,6,6*36e5],[o,12,12*36e5],[i,1,864e5],[i,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function s(c,h,f){let u=hb).right(a,u);if(p===a.length)return t.every(Wr(c/31536e6,h/31536e6,f));if(p===0)return dr.every(Math.max(Wr(c,h,f),1));let[x,_]=a[u/a[p-1][2]53)return null;"w"in k||(k.w=1),"Z"in k?(it=Ls(Ui(k.y,0,1)),X=it.getUTCDay(),it=X>4||X===0?Qr.ceil(it):Qr(it),it=Wi.offset(it,(k.V-1)*7),k.y=it.getUTCFullYear(),k.m=it.getUTCMonth(),k.d=it.getUTCDate()+(k.w+6)%7):(it=Ms(Ui(k.y,0,1)),X=it.getDay(),it=X>4||X===0?Zr.ceil(it):Zr(it),it=Se.offset(it,(k.V-1)*7),k.y=it.getFullYear(),k.m=it.getMonth(),k.d=it.getDate()+(k.w+6)%7)}else("W"in k||"U"in k)&&("w"in k||(k.w="u"in k?k.u%7:"W"in k?1:0),X="Z"in k?Ls(Ui(k.y,0,1)).getUTCDay():Ms(Ui(k.y,0,1)).getDay(),k.m=0,k.d="W"in k?(k.w+6)%7+k.W*7-(X+5)%7:k.w+k.U*7-(X+6)%7);return"Z"in k?(k.H+=k.Z/100|0,k.M+=k.Z%100,Ls(k)):Ms(k)}}function $(O,V,K,k){for(var Ft=0,it=V.length,X=K.length,P,Q;Ft=X)return-1;if(P=V.charCodeAt(Ft++),P===37){if(P=V.charAt(Ft++),Q=I[P in kh?V.charAt(Ft++):P],!Q||(k=Q(O,K,k))<0)return-1}else if(P!=K.charCodeAt(k++))return-1}return k}function et(O,V,K){var k=c.exec(V.slice(K));return k?(O.p=h.get(k[0].toLowerCase()),K+k[0].length):-1}function rt(O,V,K){var k=p.exec(V.slice(K));return k?(O.w=x.get(k[0].toLowerCase()),K+k[0].length):-1}function T(O,V,K){var k=f.exec(V.slice(K));return k?(O.w=u.get(k[0].toLowerCase()),K+k[0].length):-1}function C(O,V,K){var k=w.exec(V.slice(K));return k?(O.m=v.get(k[0].toLowerCase()),K+k[0].length):-1}function g(O,V,K){var k=_.exec(V.slice(K));return k?(O.m=b.get(k[0].toLowerCase()),K+k[0].length):-1}function A(O,V,K){return $(O,e,V,K)}function F(O,V,K){return $(O,r,V,K)}function N(O,V,K){return $(O,i,V,K)}function R(O){return a[O.getDay()]}function j(O){return n[O.getDay()]}function G(O){return l[O.getMonth()]}function Z(O){return s[O.getMonth()]}function at(O){return o[+(O.getHours()>=12)]}function At(O){return 1+~~(O.getMonth()/3)}function Bt(O){return a[O.getUTCDay()]}function Gt(O){return n[O.getUTCDay()]}function gt(O){return l[O.getUTCMonth()]}function Pt(O){return s[O.getUTCMonth()]}function ht(O){return o[+(O.getUTCHours()>=12)]}function It(O){return 1+~~(O.getUTCMonth()/3)}return{format:function(O){var V=B(O+="",M);return V.toString=function(){return O},V},parse:function(O){var V=y(O+="",!1);return V.toString=function(){return O},V},utcFormat:function(O){var V=B(O+="",E);return V.toString=function(){return O},V},utcParse:function(O){var V=y(O+="",!0);return V.toString=function(){return O},V}}}var kh={"-":"",_:" ",0:"0"},St=/^\s*\d+/,dy=/^%/,my=/[\\^$*+?|[\]().{}]/g;function tt(t,e,r){var i=t<0?"-":"",o=(i?-t:t)+"",n=o.length;return i+(n[e.toLowerCase(),r]))}function xy(t,e,r){var i=St.exec(e.slice(r,r+1));return i?(t.w=+i[0],r+i[0].length):-1}function yy(t,e,r){var i=St.exec(e.slice(r,r+1));return i?(t.u=+i[0],r+i[0].length):-1}function _y(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.U=+i[0],r+i[0].length):-1}function Cy(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.V=+i[0],r+i[0].length):-1}function by(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.W=+i[0],r+i[0].length):-1}function Sh(t,e,r){var i=St.exec(e.slice(r,r+4));return i?(t.y=+i[0],r+i[0].length):-1}function wh(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.y=+i[0]+(+i[0]>68?1900:2e3),r+i[0].length):-1}function Ty(t,e,r){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return i?(t.Z=i[1]?0:-(i[2]+(i[3]||"00")),r+i[0].length):-1}function vy(t,e,r){var i=St.exec(e.slice(r,r+1));return i?(t.q=i[0]*3-3,r+i[0].length):-1}function ky(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.m=i[0]-1,r+i[0].length):-1}function Ah(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.d=+i[0],r+i[0].length):-1}function Sy(t,e,r){var i=St.exec(e.slice(r,r+3));return i?(t.m=0,t.d=+i[0],r+i[0].length):-1}function Bh(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.H=+i[0],r+i[0].length):-1}function wy(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.M=+i[0],r+i[0].length):-1}function Ay(t,e,r){var i=St.exec(e.slice(r,r+2));return i?(t.S=+i[0],r+i[0].length):-1}function By(t,e,r){var i=St.exec(e.slice(r,r+3));return i?(t.L=+i[0],r+i[0].length):-1}function Fy(t,e,r){var i=St.exec(e.slice(r,r+6));return i?(t.L=Math.floor(i[0]/1e3),r+i[0].length):-1}function My(t,e,r){var i=dy.exec(e.slice(r,r+1));return i?r+i[0].length:-1}function Ly(t,e,r){var i=St.exec(e.slice(r));return i?(t.Q=+i[0],r+i[0].length):-1}function Ey(t,e,r){var i=St.exec(e.slice(r));return i?(t.s=+i[0],r+i[0].length):-1}function Fh(t,e){return tt(t.getDate(),e,2)}function Oy(t,e){return tt(t.getHours(),e,2)}function Iy(t,e){return tt(t.getHours()%12||12,e,2)}function Dy(t,e){return tt(1+Se.count(Vt(t),t),e,3)}function Ih(t,e){return tt(t.getMilliseconds(),e,3)}function Ny(t,e){return Ih(t,e)+"000"}function Py(t,e){return tt(t.getMonth()+1,e,2)}function Ry(t,e){return tt(t.getMinutes(),e,2)}function $y(t,e){return tt(t.getSeconds(),e,2)}function zy(t){var e=t.getDay();return e===0?7:e}function qy(t,e){return tt(we.count(Vt(t)-1,t),e,2)}function Dh(t){var e=t.getDay();return e>=4||e===0?$e(t):$e.ceil(t)}function Wy(t,e){return t=Dh(t),tt($e.count(Vt(t),t)+(Vt(t).getDay()===4),e,2)}function Uy(t){return t.getDay()}function Hy(t,e){return tt(Zr.count(Vt(t)-1,t),e,2)}function Yy(t,e){return tt(t.getFullYear()%100,e,2)}function jy(t,e){return t=Dh(t),tt(t.getFullYear()%100,e,2)}function Gy(t,e){return tt(t.getFullYear()%1e4,e,4)}function Vy(t,e){var r=t.getDay();return t=r>=4||r===0?$e(t):$e.ceil(t),tt(t.getFullYear()%1e4,e,4)}function Xy(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+tt(e/60|0,"0",2)+tt(e%60,"0",2)}function Mh(t,e){return tt(t.getUTCDate(),e,2)}function Ky(t,e){return tt(t.getUTCHours(),e,2)}function Zy(t,e){return tt(t.getUTCHours()%12||12,e,2)}function Qy(t,e){return tt(1+Wi.count(ie(t),t),e,3)}function Nh(t,e){return tt(t.getUTCMilliseconds(),e,3)}function Jy(t,e){return Nh(t,e)+"000"}function t_(t,e){return tt(t.getUTCMonth()+1,e,2)}function e_(t,e){return tt(t.getUTCMinutes(),e,2)}function r_(t,e){return tt(t.getUTCSeconds(),e,2)}function i_(t){var e=t.getUTCDay();return e===0?7:e}function o_(t,e){return tt(_r.count(ie(t)-1,t),e,2)}function Ph(t){var e=t.getUTCDay();return e>=4||e===0?ze(t):ze.ceil(t)}function n_(t,e){return t=Ph(t),tt(ze.count(ie(t),t)+(ie(t).getUTCDay()===4),e,2)}function a_(t){return t.getUTCDay()}function s_(t,e){return tt(Qr.count(ie(t)-1,t),e,2)}function l_(t,e){return tt(t.getUTCFullYear()%100,e,2)}function c_(t,e){return t=Ph(t),tt(t.getUTCFullYear()%100,e,2)}function u_(t,e){return tt(t.getUTCFullYear()%1e4,e,4)}function h_(t,e){var r=t.getUTCDay();return t=r>=4||r===0?ze(t):ze.ceil(t),tt(t.getUTCFullYear()%1e4,e,4)}function f_(){return"+0000"}function Lh(){return"%"}function Eh(t){return+t}function Oh(t){return Math.floor(+t/1e3)}var ti,en,Rh,$h,zh;Os({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Os(t){return ti=Es(t),en=ti.format,Rh=ti.parse,$h=ti.utcFormat,zh=ti.utcParse,ti}function Is(t,e){t=t.slice();var r=0,i=t.length-1,o=t[r],n=t[i],a;return n1?0:t<-1?ei:Math.acos(t)}function Ns(t){return t>=1?ji:t<=-1?-ji:Math.asin(t)}var Ps=Math.PI,Rs=2*Ps,br=1e-6,g_=Rs-br;function jh(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return jh;let r=10**e;return function(i){this._+=i[0];for(let o=1,n=i.length;obr)if(!(Math.abs(f*l-c*h)>br)||!n)this._append`L${this._x1=e},${this._y1=r}`;else{let p=i-a,x=o-s,_=l*l+c*c,b=p*p+x*x,w=Math.sqrt(_),v=Math.sqrt(u),M=n*Math.tan((Ps-Math.acos((_+u-b)/(2*w*v)))/2),E=M/v,I=M/w;Math.abs(E-1)>br&&this._append`L${e+E*h},${r+E*f}`,this._append`A${n},${n},0,0,${+(f*p>h*x)},${this._x1=e+I*l},${this._y1=r+I*c}`}}arc(e,r,i,o,n,a){if(e=+e,r=+r,i=+i,a=!!a,i<0)throw new Error(`negative radius: ${i}`);let s=i*Math.cos(o),l=i*Math.sin(o),c=e+s,h=r+l,f=1^a,u=a?o-n:n-o;this._x1===null?this._append`M${c},${h}`:(Math.abs(this._x1-c)>br||Math.abs(this._y1-h)>br)&&this._append`L${c},${h}`,i&&(u<0&&(u=u%Rs+Rs),u>g_?this._append`A${i},${i},0,1,${f},${e-s},${r-l}A${i},${i},0,1,${f},${this._x1=c},${this._y1=h}`:u>br&&this._append`A${i},${i},0,${+(u>=Ps)},${f},${this._x1=e+i*Math.cos(n)},${this._y1=r+i*Math.sin(n)}`)}rect(e,r,i,o){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${i=+i}v${+o}h${-i}Z`}toString(){return this._}};function Gh(){return new Tr}Gh.prototype=Tr.prototype;function on(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let i=Math.floor(r);if(!(i>=0))throw new RangeError(`invalid digits: ${r}`);e=i}return t},()=>new Tr(e)}function y_(t){return t.innerRadius}function __(t){return t.outerRadius}function C_(t){return t.startAngle}function b_(t){return t.endAngle}function T_(t){return t&&t.padAngle}function v_(t,e,r,i,o,n,a,s){var l=r-t,c=i-e,h=a-o,f=s-n,u=f*l-h*c;if(!(u*uA*A+F*F&&($=rt,et=T),{cx:$,cy:et,x01:-h,y01:-f,x11:$*(o/I-1),y11:et*(o/I-1)}}function k_(){var t=y_,e=__,r=ct(0),i=null,o=C_,n=b_,a=T_,s=null,l=on(c);function c(){var h,f,u=+t.apply(this,arguments),p=+e.apply(this,arguments),x=o.apply(this,arguments)-ji,_=n.apply(this,arguments)-ji,b=Ds(_-x),w=_>x;if(s||(s=h=l()),pwt))s.moveTo(0,0);else if(b>ri-wt)s.moveTo(p*qe(x),p*oe(x)),s.arc(0,0,p,x,_,!w),u>wt&&(s.moveTo(u*qe(_),u*oe(_)),s.arc(0,0,u,_,x,w));else{var v=x,M=_,E=x,I=_,B=b,y=b,$=a.apply(this,arguments)/2,et=$>wt&&(i?+i.apply(this,arguments):Cr(u*u+p*p)),rt=rn(Ds(p-u)/2,+r.apply(this,arguments)),T=rt,C=rt,g,A;if(et>wt){var F=Ns(et/u*oe($)),N=Ns(et/p*oe($));(B-=F*2)>wt?(F*=w?1:-1,E+=F,I-=F):(B=0,E=I=(x+_)/2),(y-=N*2)>wt?(N*=w?1:-1,v+=N,M-=N):(y=0,v=M=(x+_)/2)}var R=p*qe(v),j=p*oe(v),G=u*qe(I),Z=u*oe(I);if(rt>wt){var at=p*qe(M),At=p*oe(M),Bt=u*qe(E),Gt=u*oe(E),gt;if(bwt?C>wt?(g=nn(Bt,Gt,R,j,p,C,w),A=nn(at,At,G,Z,p,C,w),s.moveTo(g.cx+g.x01,g.cy+g.y01),Cwt)||!(B>wt)?s.lineTo(G,Z):T>wt?(g=nn(G,Z,at,At,u,-T,w),A=nn(R,j,Bt,Gt,u,-T,w),s.lineTo(g.cx+g.x01,g.cy+g.y01),Tt?1:e>=t?0:NaN}function Qh(t){return t}function w_(){var t=Qh,e=Zh,r=null,i=ct(0),o=ct(ri),n=ct(0);function a(s){var l,c=(s=an(s)).length,h,f,u=0,p=new Array(c),x=new Array(c),_=+i.apply(this,arguments),b=Math.min(ri,Math.max(-ri,o.apply(this,arguments)-_)),w,v=Math.min(Math.abs(b)/c,n.apply(this,arguments)),M=v*(b<0?-1:1),E;for(l=0;l0&&(u+=E);for(e!=null?p.sort(function(I,B){return e(x[I],x[B])}):r!=null&&p.sort(function(I,B){return r(s[I],s[B])}),l=0,f=u?(b-c*M)/u:0;l0?E*f:0)+M,x[h]={data:s[h],index:l,value:E,startAngle:_,endAngle:w,padAngle:v};return x}return a.value=function(s){return arguments.length?(t=typeof s=="function"?s:ct(+s),a):t},a.sortValues=function(s){return arguments.length?(e=s,r=null,a):e},a.sort=function(s){return arguments.length?(r=s,e=null,a):r},a.startAngle=function(s){return arguments.length?(i=typeof s=="function"?s:ct(+s),a):i},a.endAngle=function(s){return arguments.length?(o=typeof s=="function"?s:ct(+s),a):o},a.padAngle=function(s){return arguments.length?(n=typeof s=="function"?s:ct(+s),a):n},a}function ii(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function Vi(t){this._context=t}Vi.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:ii(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:ii(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function $s(t){return new Vi(t)}var sn=class{constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};function zs(t){return new sn(t,!0)}function qs(t){return new sn(t,!1)}function Kt(){}function Jh(t){this._context=t}Jh.prototype={areaStart:Kt,areaEnd:Kt,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:ii(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function Ws(t){return new Jh(t)}function tf(t){this._context=t}tf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,i=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,i):this._context.moveTo(r,i);break;case 3:this._point=4;default:ii(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function Us(t){return new tf(t)}function ef(t,e){this._basis=new Vi(t),this._beta=e}ef.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var i=t[0],o=e[0],n=t[r]-i,a=e[r]-o,s=-1,l;++s<=r;)l=s/r,this._basis.point(this._beta*t[s]+(1-this._beta)*(i+l*n),this._beta*e[s]+(1-this._beta)*(o+l*a));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var Hs=function t(e){function r(i){return e===1?new Vi(i):new ef(i,e)}return r.beta=function(i){return t(+i)},r}(.85);function oi(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function ln(t,e){this._context=t,this._k=(1-e)/6}ln.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:oi(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:oi(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Ys=function t(e){function r(i){return new ln(i,e)}return r.tension=function(i){return t(+i)},r}(0);function cn(t,e){this._context=t,this._k=(1-e)/6}cn.prototype={areaStart:Kt,areaEnd:Kt,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:oi(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var js=function t(e){function r(i){return new cn(i,e)}return r.tension=function(i){return t(+i)},r}(0);function un(t,e){this._context=t,this._k=(1-e)/6}un.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:oi(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Gs=function t(e){function r(i){return new un(i,e)}return r.tension=function(i){return t(+i)},r}(0);function Xi(t,e,r){var i=t._x1,o=t._y1,n=t._x2,a=t._y2;if(t._l01_a>wt){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);i=(i*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,o=(o*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>wt){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);n=(n*c+t._x1*t._l23_2a-e*t._l12_2a)/h,a=(a*c+t._y1*t._l23_2a-r*t._l12_2a)/h}t._context.bezierCurveTo(i,o,n,a,t._x2,t._y2)}function rf(t,e){this._context=t,this._alpha=e}rf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Xi(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Vs=function t(e){function r(i){return e?new rf(i,e):new ln(i,0)}return r.alpha=function(i){return t(+i)},r}(.5);function of(t,e){this._context=t,this._alpha=e}of.prototype={areaStart:Kt,areaEnd:Kt,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Xi(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Xs=function t(e){function r(i){return e?new of(i,e):new cn(i,0)}return r.alpha=function(i){return t(+i)},r}(.5);function nf(t,e){this._context=t,this._alpha=e}nf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+i*i,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Xi(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Ks=function t(e){function r(i){return e?new nf(i,e):new un(i,0)}return r.alpha=function(i){return t(+i)},r}(.5);function af(t){this._context=t}af.prototype={areaStart:Kt,areaEnd:Kt,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};function Zs(t){return new af(t)}function sf(t){return t<0?-1:1}function lf(t,e,r){var i=t._x1-t._x0,o=e-t._x1,n=(t._y1-t._y0)/(i||o<0&&-0),a=(r-t._y1)/(o||i<0&&-0),s=(n*o+a*i)/(i+o);return(sf(n)+sf(a))*Math.min(Math.abs(n),Math.abs(a),.5*Math.abs(s))||0}function cf(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function Qs(t,e,r){var i=t._x0,o=t._y0,n=t._x1,a=t._y1,s=(n-i)/3;t._context.bezierCurveTo(i+s,o+s*e,n-s,a-s*r,n,a)}function hn(t){this._context=t}hn.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Qs(this,this._t0,cf(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Qs(this,cf(this,r=lf(this,t,e)),r);break;default:Qs(this,this._t0,r=lf(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}}};function uf(t){this._context=new hf(t)}(uf.prototype=Object.create(hn.prototype)).point=function(t,e){hn.prototype.point.call(this,e,t)};function hf(t){this._context=t}hf.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,r,i,o,n){this._context.bezierCurveTo(e,t,i,r,n,o)}};function Js(t){return new hn(t)}function tl(t){return new uf(t)}function pf(t){this._context=t}pf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var i=ff(t),o=ff(e),n=0,a=1;a=0;--e)o[e]=(a[e]-o[e+1])/n[e];for(n[r-1]=(t[r]+o[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e}};function rl(t){return new fn(t,.5)}function il(t){return new fn(t,0)}function ol(t){return new fn(t,1)}var A_={value:()=>{}};function mf(){for(var t=0,e=arguments.length,r={},i;t=0&&(i=r.slice(o+1),r=r.slice(0,o)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:i}})}pn.prototype=mf.prototype={constructor:pn,on:function(t,e){var r=this._,i=B_(t+"",r),o,n=-1,a=i.length;if(arguments.length<2){for(;++n0)for(var r=new Array(o),i=0,o,n;i=0&&t._call.call(void 0,e),t=t._next;--ni}function gf(){vr=(mn=Ji.now())+gn,ni=Zi=0;try{_f()}finally{ni=0,E_(),vr=0}}function L_(){var t=Ji.now(),e=t-mn;e>xf&&(gn-=e,mn=t)}function E_(){for(var t,e=dn,r,i=1/0;e;)e._call?(i>e._time&&(i=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:dn=r);Qi=t,al(i)}function al(t){if(!ni){Zi&&(Zi=clearTimeout(Zi));var e=t-vr;e>24?(t<1/0&&(Zi=setTimeout(gf,t-Ji.now()-gn)),Ki&&(Ki=clearInterval(Ki))):(Ki||(mn=Ji.now(),Ki=setInterval(L_,xf)),ni=1,yf(gf))}}function yn(t,e,r){var i=new to;return e=e==null?0:+e,i.restart(o=>{i.stop(),t(o+e)},e,r),i}var O_=nl("start","end","cancel","interrupt"),I_=[],Tf=0,Cf=1,Cn=2,_n=3,bf=4,bn=5,ro=6;function We(t,e,r,i,o,n){var a=t.__transition;if(!a)t.__transition={};else if(r in a)return;D_(t,r,{name:e,index:i,group:o,on:O_,tween:I_,time:n.time,delay:n.delay,duration:n.duration,ease:n.ease,timer:null,state:Tf})}function io(t,e){var r=xt(t,e);if(r.state>Tf)throw new Error("too late; already scheduled");return r}function Ot(t,e){var r=xt(t,e);if(r.state>_n)throw new Error("too late; already running");return r}function xt(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function D_(t,e,r){var i=t.__transition,o;i[e]=r,r.timer=xn(n,0,r.time);function n(c){r.state=Cf,r.timer.restart(a,r.delay,r.time),r.delay<=c&&a(c-r.delay)}function a(c){var h,f,u,p;if(r.state!==Cf)return l();for(h in i)if(p=i[h],p.name===r.name){if(p.state===_n)return yn(a);p.state===bf?(p.state=ro,p.timer.stop(),p.on.call("interrupt",t,t.__data__,p.index,p.group),delete i[h]):+hCn&&i.state=0&&(e=e.slice(0,r)),!e||e==="start"})}function eC(t,e,r){var i,o,n=tC(e)?io:Ot;return function(){var a=n(this,t),s=a.on;s!==i&&(o=(i=s).copy()).on(e,r),a.on=o}}function Of(t,e){var r=this._id;return arguments.length<2?xt(this.node(),r).on.on(t):this.each(eC(r,t,e))}function rC(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function If(){return this.on("end.remove",rC(this._id))}function Df(t){var e=this._name,r=this._id;typeof t!="function"&&(t=sr(t));for(var i=this._groups,o=i.length,n=new Array(o),a=0;aVf(e,r).then(i=>new DOMParser().parseFromString(i,t))}var _C=ll("application/xml"),CC=ll("text/html"),bC=ll("image/svg+xml");function Ue(t,e,r){this.k=t,this.x=e,this.y=r}Ue.prototype={constructor:Ue,scale:function(t){return t===1?this:new Ue(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new Ue(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var cl=new Ue(1,0,0);ul.prototype=Ue.prototype;function ul(t){for(;!t.__zoom;)if(!(t=t.parentNode))return cl;return t.__zoom}var wn={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),hsl2rgb:({h:t,s:e,l:r},i)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let o=r<.5?r*(1+e):r+e-r*e,n=2*r-o;switch(i){case"r":return wn.hue2rgb(n,o,t+.3333333333333333)*255;case"g":return wn.hue2rgb(n,o,t)*255;case"b":return wn.hue2rgb(n,o,t-.3333333333333333)*255}},rgb2hsl:({r:t,g:e,b:r},i)=>{t/=255,e/=255,r/=255;let o=Math.max(t,e,r),n=Math.min(t,e,r),a=(o+n)/2;if(i==="l")return a*100;if(o===n)return 0;let s=o-n,l=a>.5?s/(2-o-n):s/(o+n);if(i==="s")return l*100;switch(o){case t:return((e-r)/s+(ee>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),round:t=>Math.round(t*1e10)/1e10},Zf=TC;var vC={dec2hex:t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}},Qf=vC;var kC={channel:Kf,lang:Zf,unit:Qf},q=kC;var Be={};for(let t=0;t<=255;t++)Be[t]=q.unit.dec2hex(t);var yt={ALL:0,RGB:1,HSL:2};var pl=class{constructor(){this.type=yt.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=yt.ALL}is(e){return this.type===e}},Jf=pl;var dl=class{constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new Jf}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=yt.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:i,l:o}=e;r===void 0&&(e.h=q.channel.rgb2hsl(e,"h")),i===void 0&&(e.s=q.channel.rgb2hsl(e,"s")),o===void 0&&(e.l=q.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:i,b:o}=e;r===void 0&&(e.r=q.channel.hsl2rgb(e,"r")),i===void 0&&(e.g=q.channel.hsl2rgb(e,"g")),o===void 0&&(e.b=q.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(yt.HSL)&&r!==void 0?r:(this._ensureHSL(),q.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(yt.HSL)&&r!==void 0?r:(this._ensureHSL(),q.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(yt.HSL)&&r!==void 0?r:(this._ensureHSL(),q.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(yt.RGB)&&r!==void 0?r:(this._ensureRGB(),q.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(yt.RGB)&&r!==void 0?r:(this._ensureRGB(),q.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(yt.RGB)&&r!==void 0?r:(this._ensureRGB(),q.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(yt.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(yt.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(yt.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(yt.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(yt.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(yt.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},tp=dl;var SC=new tp({r:0,g:0,b:0,a:0},"transparent"),He=SC;var ep={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(ep.re);if(!e)return;let r=e[1],i=parseInt(r,16),o=r.length,n=o%4===0,a=o>4,s=a?1:17,l=a?8:4,c=n?0:-1,h=a?255:15;return He.set({r:(i>>l*(c+3)&h)*s,g:(i>>l*(c+2)&h)*s,b:(i>>l*(c+1)&h)*s,a:n?(i&h)*s/255:1},t)},stringify:t=>{let{r:e,g:r,b:i,a:o}=t;return o<1?`#${Be[Math.round(e)]}${Be[Math.round(r)]}${Be[Math.round(i)]}${Be[Math.round(o*255)]}`:`#${Be[Math.round(e)]}${Be[Math.round(r)]}${Be[Math.round(i)]}`}},kr=ep;var An={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{let e=t.match(An.hueRe);if(e){let[,r,i]=e;switch(i){case"grad":return q.channel.clamp.h(parseFloat(r)*.9);case"rad":return q.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return q.channel.clamp.h(parseFloat(r)*360)}}return q.channel.clamp.h(parseFloat(t))},parse:t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(An.re);if(!r)return;let[,i,o,n,a,s]=r;return He.set({h:An._hue2deg(i),s:q.channel.clamp.s(parseFloat(o)),l:q.channel.clamp.l(parseFloat(n)),a:a?q.channel.clamp.a(s?parseFloat(a)/100:parseFloat(a)):1},t)},stringify:t=>{let{h:e,s:r,l:i,a:o}=t;return o<1?`hsla(${q.lang.round(e)}, ${q.lang.round(r)}%, ${q.lang.round(i)}%, ${o})`:`hsl(${q.lang.round(e)}, ${q.lang.round(r)}%, ${q.lang.round(i)}%)`}},oo=An;var Bn={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();let e=Bn.colors[t];if(e)return kr.parse(e)},stringify:t=>{let e=kr.stringify(t);for(let r in Bn.colors)if(Bn.colors[r]===e)return r}},ml=Bn;var rp={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(rp.re);if(!r)return;let[,i,o,n,a,s,l,c,h]=r;return He.set({r:q.channel.clamp.r(o?parseFloat(i)*2.55:parseFloat(i)),g:q.channel.clamp.g(a?parseFloat(n)*2.55:parseFloat(n)),b:q.channel.clamp.b(l?parseFloat(s)*2.55:parseFloat(s)),a:c?q.channel.clamp.a(h?parseFloat(c)/100:parseFloat(c)):1},t)},stringify:t=>{let{r:e,g:r,b:i,a:o}=t;return o<1?`rgba(${q.lang.round(e)}, ${q.lang.round(r)}, ${q.lang.round(i)}, ${q.lang.round(o)})`:`rgb(${q.lang.round(e)}, ${q.lang.round(r)}, ${q.lang.round(i)})`}},no=rp;var wC={format:{keyword:ml,hex:kr,rgb:no,rgba:no,hsl:oo,hsla:oo},parse:t=>{if(typeof t!="string")return t;let e=kr.parse(t)||no.parse(t)||oo.parse(t)||ml.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(yt.HSL)||t.data.r===void 0?oo.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?no.stringify(t):kr.stringify(t)},_t=wC;var AC=(t,e)=>{let r=_t.parse(t);for(let i in e)r[i]=q.channel.clamp[i](e[i]);return _t.stringify(r)},Fn=AC;var BC=(t,e,r=0,i=1)=>{if(typeof t!="number")return Fn(t,{a:e});let o=He.set({r:q.channel.clamp.r(t),g:q.channel.clamp.g(e),b:q.channel.clamp.b(r),a:q.channel.clamp.a(i)});return _t.stringify(o)},Ye=BC;var FC=(t,e)=>q.lang.round(_t.parse(t)[e]),MC=FC;var LC=t=>{let{r:e,g:r,b:i}=_t.parse(t),o=.2126*q.channel.toLinear(e)+.7152*q.channel.toLinear(r)+.0722*q.channel.toLinear(i);return q.lang.round(o)},ip=LC;var EC=t=>ip(t)>=.5,op=EC;var OC=t=>!op(t),Sr=OC;var IC=(t,e,r)=>{let i=_t.parse(t),o=i[e],n=q.channel.clamp[e](o+r);return o!==n&&(i[e]=n),_t.stringify(i)},Mn=IC;var DC=(t,e)=>Mn(t,"l",e),z=DC;var NC=(t,e)=>Mn(t,"l",-e),H=NC;var PC=(t,e)=>{let r=_t.parse(t),i={};for(let o in e)e[o]&&(i[o]=r[o]+e[o]);return Fn(t,i)},m=PC;var RC=(t,e,r=50)=>{let{r:i,g:o,b:n,a}=_t.parse(t),{r:s,g:l,b:c,a:h}=_t.parse(e),f=r/100,u=f*2-1,p=a-h,_=((u*p===-1?u:(u+p)/(1+u*p))+1)/2,b=1-_,w=i*_+s*b,v=o*_+l*b,M=n*_+c*b,E=a*f+h*(1-f);return Ye(w,v,M,E)},np=RC;var $C=(t,e=100)=>{let r=_t.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,np(r,t,e)},L=$C;var zC=typeof global=="object"&&global&&global.Object===Object&&global,Ln=zC;var qC=typeof self=="object"&&self&&self.Object===Object&&self,WC=Ln||qC||Function("return this")(),pt=WC;var UC=pt.Symbol,si=UC;var ap=Object.prototype,HC=ap.hasOwnProperty,YC=ap.toString,ao=si?si.toStringTag:void 0;function jC(t){var e=HC.call(t,ao),r=t[ao];try{t[ao]=void 0;var i=!0}catch{}var o=YC.call(t);return i&&(e?t[ao]=r:delete t[ao]),o}var sp=jC;var GC=Object.prototype,VC=GC.toString;function XC(t){return VC.call(t)}var lp=XC;var KC="[object Null]",ZC="[object Undefined]",cp=si?si.toStringTag:void 0;function QC(t){return t==null?t===void 0?ZC:KC:cp&&cp in Object(t)?sp(t):lp(t)}var ne=QC;function JC(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var Ut=JC;var t1="[object AsyncFunction]",e1="[object Function]",r1="[object GeneratorFunction]",i1="[object Proxy]";function o1(t){if(!Ut(t))return!1;var e=ne(t);return e==e1||e==r1||e==t1||e==i1}var li=o1;var n1=pt["__core-js_shared__"],En=n1;var up=function(){var t=/[^.]+$/.exec(En&&En.keys&&En.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function a1(t){return!!up&&up in t}var hp=a1;var s1=Function.prototype,l1=s1.toString;function c1(t){if(t!=null){try{return l1.call(t)}catch{}try{return t+""}catch{}}return""}var Fe=c1;var u1=/[\\^$.*+?()[\]{}|]/g,h1=/^\[object .+?Constructor\]$/,f1=Function.prototype,p1=Object.prototype,d1=f1.toString,m1=p1.hasOwnProperty,g1=RegExp("^"+d1.call(m1).replace(u1,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function x1(t){if(!Ut(t)||hp(t))return!1;var e=li(t)?g1:h1;return e.test(Fe(t))}var fp=x1;function y1(t,e){return t?.[e]}var pp=y1;function _1(t,e){var r=pp(t,e);return fp(r)?r:void 0}var Ht=_1;var C1=Ht(Object,"create"),Me=C1;function b1(){this.__data__=Me?Me(null):{},this.size=0}var dp=b1;function T1(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var mp=T1;var v1="__lodash_hash_undefined__",k1=Object.prototype,S1=k1.hasOwnProperty;function w1(t){var e=this.__data__;if(Me){var r=e[t];return r===v1?void 0:r}return S1.call(e,t)?e[t]:void 0}var gp=w1;var A1=Object.prototype,B1=A1.hasOwnProperty;function F1(t){var e=this.__data__;return Me?e[t]!==void 0:B1.call(e,t)}var xp=F1;var M1="__lodash_hash_undefined__";function L1(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Me&&e===void 0?M1:e,this}var yp=L1;function ci(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1}var Tp=$1;function z1(t,e){var r=this.__data__,i=Ge(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}var vp=z1;function ui(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=wb}var Nn=Ab;function Bb(t){return t!=null&&Nn(t.length)&&!li(t)}var Qe=Bb;function Fb(t){return me(t)&&Qe(t)}var Kp=Fb;function Mb(){return!1}var Zp=Mb;var td=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Qp=td&&typeof module=="object"&&module&&!module.nodeType&&module,Lb=Qp&&Qp.exports===td,Jp=Lb?pt.Buffer:void 0,Eb=Jp?Jp.isBuffer:void 0,Ob=Eb||Zp,mi=Ob;var Ib="[object Object]",Db=Function.prototype,Nb=Object.prototype,ed=Db.toString,Pb=Nb.hasOwnProperty,Rb=ed.call(Object);function $b(t){if(!me(t)||ne(t)!=Ib)return!1;var e=Dn(t);if(e===null)return!0;var r=Pb.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&ed.call(r)==Rb}var rd=$b;var zb="[object Arguments]",qb="[object Array]",Wb="[object Boolean]",Ub="[object Date]",Hb="[object Error]",Yb="[object Function]",jb="[object Map]",Gb="[object Number]",Vb="[object Object]",Xb="[object RegExp]",Kb="[object Set]",Zb="[object String]",Qb="[object WeakMap]",Jb="[object ArrayBuffer]",tT="[object DataView]",eT="[object Float32Array]",rT="[object Float64Array]",iT="[object Int8Array]",oT="[object Int16Array]",nT="[object Int32Array]",aT="[object Uint8Array]",sT="[object Uint8ClampedArray]",lT="[object Uint16Array]",cT="[object Uint32Array]",lt={};lt[eT]=lt[rT]=lt[iT]=lt[oT]=lt[nT]=lt[aT]=lt[sT]=lt[lT]=lt[cT]=!0;lt[zb]=lt[qb]=lt[Jb]=lt[Wb]=lt[tT]=lt[Ub]=lt[Hb]=lt[Yb]=lt[jb]=lt[Gb]=lt[Vb]=lt[Xb]=lt[Kb]=lt[Zb]=lt[Qb]=!1;function uT(t){return me(t)&&Nn(t.length)&&!!lt[ne(t)]}var id=uT;function hT(t){return function(e){return t(e)}}var od=hT;var nd=typeof exports=="object"&&exports&&!exports.nodeType&&exports,co=nd&&typeof module=="object"&&module&&!module.nodeType&&module,fT=co&&co.exports===nd,Cl=fT&&Ln.process,pT=function(){try{var t=co&&co.require&&co.require("util").types;return t||Cl&&Cl.binding&&Cl.binding("util")}catch{}}(),bl=pT;var ad=bl&&bl.isTypedArray,dT=ad?od(ad):id,gi=dT;function mT(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var uo=mT;var gT=Object.prototype,xT=gT.hasOwnProperty;function yT(t,e,r){var i=t[e];(!(xT.call(t,e)&&je(i,r))||r===void 0&&!(e in t))&&di(t,e,r)}var sd=yT;function _T(t,e,r,i){var o=!r;r||(r={});for(var n=-1,a=e.length;++n-1&&t%1==0&&t0){if(++e>=$T)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var Td=WT;var UT=Td(bd),vd=UT;function HT(t,e){return vd(_d(t,e,$n),t+"")}var kd=HT;function YT(t,e,r){if(!Ut(r))return!1;var i=typeof e;return(i=="number"?Qe(r)&&Pn(e,r.length):i=="string"&&e in r)?je(r[e],t):!1}var Sd=YT;function jT(t){return kd(function(e,r){var i=-1,o=r.length,n=o>1?r[o-1]:void 0,a=o>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(o--,n):void 0,a&&Sd(r[0],r[1],a)&&(n=o<3?void 0:n,o=1),e=Object(e);++i0?Fr(_i,--Zt):0,yi--,dt===10&&(yi=1,Zn--),dt}function Qt(){return dt=Zt2||Tl(dt)>3?"":" "}function jd(t,e){for(;--e&&Qt()&&!(dt<48||dt>102||dt>57&&dt<65||dt>70&&dt<97););return Jn(t,fo()+(e<6&&Je()==32&&Qt()==32))}function vl(t){for(;Qt();)switch(dt){case t:return Zt;case 34:case 39:t!==34&&t!==39&&vl(dt);break;case 40:t===41&&vl(t);break;case 92:Qt();break}return Zt}function Gd(t,e){for(;Qt()&&t+dt!==57;)if(t+dt===84&&Je()===47)break;return"/*"+Jn(e,Zt-1)+"*"+ho(t===47?t:Qt())}function Vd(t){for(;!Tl(Je());)Qt();return Jn(t,Zt)}function Zd(t){return Hd(ea("",null,null,null,[""],t=Ud(t),0,[0],t))}function ea(t,e,r,i,o,n,a,s,l){for(var c=0,h=0,f=a,u=0,p=0,x=0,_=1,b=1,w=1,v=0,M="",E=o,I=n,B=i,y=M;b;)switch(x=v,v=Qt()){case 40:if(x!=108&&Fr(y,f-1)==58){$d(y+=Xn(ta(v),"&","&\f"),"&\f")!=-1&&(w=-1);break}case 34:case 39:case 91:y+=ta(v);break;case 9:case 10:case 13:case 32:y+=Yd(x);break;case 92:y+=jd(fo()-1,7);continue;case 47:switch(Je()){case 42:case 47:xi(pv(Gd(Qt(),fo()),e,r),l);break;default:y+="/"}break;case 123*_:s[c++]=ae(y)*w;case 125*_:case 59:case 0:switch(v){case 0:case 125:b=0;case 59+h:p>0&&ae(y)-f&&xi(p>32?Kd(y+";",i,r,f-1):Kd(Xn(y," ","")+";",i,r,f-2),l);break;case 59:y+=";";default:if(xi(B=Xd(y,e,r,c,h,o,s,M,E=[],I=[],f),n),v===123)if(h===0)ea(y,e,B,B,E,n,f,s,I);else switch(u===99&&Fr(y,3)===110?100:u){case 100:case 109:case 115:ea(t,B,B,i&&xi(Xd(t,B,B,0,0,o,s,M,o,E=[],f),I),o,I,f,s,i?E:I);break;default:ea(y,B,B,B,[""],I,0,s,I)}}c=h=p=0,_=w=1,M=y="",f=a;break;case 58:f=1+ae(y),p=x;default:if(_<1){if(v==123)--_;else if(v==125&&_++==0&&Wd()==125)continue}switch(y+=ho(v),v*_){case 38:w=h>0?1:(y+="\f",-1);break;case 44:s[c++]=(ae(y)-1)*w,w=1;break;case 64:Je()===45&&(y+=ta(Qt())),u=Je(),h=f=ae(M=y+=Vd(fo())),v++;break;case 45:x===45&&ae(y)==2&&(_=0)}}return n}function Xd(t,e,r,i,o,n,a,s,l,c,h){for(var f=o-1,u=o===0?n:[""],p=Kn(u),x=0,_=0,b=0;x0?u[w]+" "+v:Xn(v,/&\f/g,u[w])))&&(l[b++]=M);return Qn(t,e,r,o===0?jn:s,l,c,h)}function pv(t,e,r){return Qn(t,e,r,Yn,ho(qd()),Mr(t,2,-2),0)}function Kd(t,e,r,i){return Qn(t,e,r,Gn,Mr(t,0,i),Mr(t,i+1,-1),i)}function ra(t,e){for(var r="",i=Kn(t),o=0;o{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},Dl=function(t="fatal"){let e=Le.fatal;typeof t=="string"?(t=t.toLowerCase(),t in Le&&(e=Le[t])):typeof t=="number"&&(e=t),Y.trace=()=>{},Y.debug=()=>{},Y.info=()=>{},Y.warn=()=>{},Y.error=()=>{},Y.fatal=()=>{},e<=Le.fatal&&(Y.fatal=console.error?console.error.bind(console,Jt("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Jt("FATAL"))),e<=Le.error&&(Y.error=console.error?console.error.bind(console,Jt("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Jt("ERROR"))),e<=Le.warn&&(Y.warn=console.warn?console.warn.bind(console,Jt("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Jt("WARN"))),e<=Le.info&&(Y.info=console.info?console.info.bind(console,Jt("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Jt("INFO"))),e<=Le.debug&&(Y.debug=console.debug?console.debug.bind(console,Jt("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Jt("DEBUG"))),e<=Le.trace&&(Y.trace=console.debug?console.debug.bind(console,Jt("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Jt("TRACE")))},Jt=t=>`%c${(0,ym.default)().format("ss.SSS")} : ${t} : `,_o=//gi,dv=t=>t?bm(t).replace(/\\n/g,"#br#").split("#br#"):[""],mv=(()=>{let t=!1;return()=>{t||(gv(),t=!0)}})();function gv(){let t="data-temp-href-target";Or.default.addHook("beforeSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")||"")}),Or.default.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)||""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var Cm=t=>(mv(),Or.default.sanitize(t)),Jd=(t,e)=>{var r;if(((r=e.flowchart)==null?void 0:r.htmlLabels)!==!1){let i=e.securityLevel;i==="antiscript"||i==="strict"?t=Cm(t):i!=="loose"&&(t=bm(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=Cv(t))}return t},xo=(t,e)=>t&&(e.dompurifyConfig?t=Or.default.sanitize(Jd(t,e),e.dompurifyConfig).toString():t=Or.default.sanitize(Jd(t,e),{FORBID_TAGS:["style"]}).toString(),t),xv=(t,e)=>typeof t=="string"?xo(t,e):t.flat().map(r=>xo(r,e)),yv=t=>_o.test(t),_v=t=>t.split(_o),Cv=t=>t.replace(/#br#/g,"
"),bm=t=>t.replace(_o,"#br#"),bv=t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},Tm=t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),Tv=function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},vv=function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},sq=function(t){let e=t.split(/(,)/),r=[];for(let i=0;i0&&i+1Math.max(0,t.split(e).length-1),kv=(t,e)=>{let r=Bl(t,"~"),i=Bl(e,"~");return r===1&&i===1},Sv=t=>{let e=Bl(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let i=[...t],o=i.indexOf("~"),n=i.lastIndexOf("~");for(;o!==-1&&n!==-1&&o!==n;)i[o]="<",i[n]=">",o=i.indexOf("~"),n=i.lastIndexOf("~");return r&&i.unshift("~"),i.join("")},tm=()=>window.MathMLElement!==void 0,Fl=/\$\$(.*)\$\$/g,em=t=>{var e;return(((e=t.match(Fl))==null?void 0:e.length)??0)>0},lq=async(t,e)=>{t=await wv(t,e);let r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0";let i=document.querySelector("body");i?.insertAdjacentElement("beforeend",r);let o={width:r.clientWidth,height:r.clientHeight};return r.remove(),o},wv=async(t,e)=>{if(!em(t))return t;if(!tm()&&!e.legacyMathML)return t.replace(Fl,"MathML is unsupported in this environment.");let{default:r}=await import("./katex-F45OXAZ7.min.js");return t.split(_o).map(i=>em(i)?` +
+ ${i} +
+ `:`
${i}
`).join("").replace(Fl,(i,o)=>r.renderToString(o,{throwOnError:!0,displayMode:!0,output:tm()?"mathml":"htmlAndMathml"}).replace(/\n/g," ").replace(//g,""))},Nl={getRows:dv,sanitizeText:xo,sanitizeTextOrArray:xv,hasBreaks:yv,splitBreaks:_v,lineBreakRegex:_o,removeScript:Cm,getUrl:bv,evaluate:Tm,getMax:Tv,getMin:vv},qt=(t,e)=>e?m(t,{s:-40,l:10}):m(t,{s:-40,l:-10}),ga="#ffffff",xa="#f2f2f2",Av=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var e,r,i,o,n,a,s,l,c,h,f;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||m(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||m(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||qt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||qt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||qt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||qt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||L(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||L(this.tertiaryColor),this.lineColor=this.lineColor||L(this.background),this.arrowheadColor=this.arrowheadColor||L(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?H(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||H(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||L(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||z(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||m(this.primaryColor,{h:30}),this.cScale4=this.cScale4||m(this.primaryColor,{h:60}),this.cScale5=this.cScale5||m(this.primaryColor,{h:90}),this.cScale6=this.cScale6||m(this.primaryColor,{h:120}),this.cScale7=this.cScale7||m(this.primaryColor,{h:150}),this.cScale8=this.cScale8||m(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||m(this.primaryColor,{h:270}),this.cScale10=this.cScale10||m(this.primaryColor,{h:300}),this.cScale11=this.cScale11||m(this.primaryColor,{h:330}),this.darkMode)for(let p=0;p{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Bv=t=>{let e=new Av;return e.calculate(t),e},Fv=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=z(this.primaryColor,16),this.tertiaryColor=m(this.primaryColor,{h:-160}),this.primaryBorderColor=L(this.background),this.secondaryBorderColor=qt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=qt(this.tertiaryColor,this.darkMode),this.primaryTextColor=L(this.primaryColor),this.secondaryTextColor=L(this.secondaryColor),this.tertiaryTextColor=L(this.tertiaryColor),this.lineColor=L(this.background),this.textColor=L(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=z(L("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=Ye(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=H("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=H(this.sectionBkgColor,10),this.taskBorderColor=Ye(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Ye(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var e,r,i,o,n,a,s,l,c,h,f;this.secondBkg=z(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=z(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=z(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=m(this.primaryColor,{h:64}),this.fillType3=m(this.secondaryColor,{h:64}),this.fillType4=m(this.primaryColor,{h:-64}),this.fillType5=m(this.secondaryColor,{h:-64}),this.fillType6=m(this.primaryColor,{h:128}),this.fillType7=m(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||m(this.primaryColor,{h:30}),this.cScale4=this.cScale4||m(this.primaryColor,{h:60}),this.cScale5=this.cScale5||m(this.primaryColor,{h:90}),this.cScale6=this.cScale6||m(this.primaryColor,{h:120}),this.cScale7=this.cScale7||m(this.primaryColor,{h:150}),this.cScale8=this.cScale8||m(this.primaryColor,{h:210}),this.cScale9=this.cScale9||m(this.primaryColor,{h:270}),this.cScale10=this.cScale10||m(this.primaryColor,{h:300}),this.cScale11=this.cScale11||m(this.primaryColor,{h:330});for(let u=0;u{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Mv=t=>{let e=new Fv;return e.calculate(t),e},Lv=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=m(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=m(this.primaryColor,{h:-160}),this.primaryBorderColor=qt(this.primaryColor,this.darkMode),this.secondaryBorderColor=qt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=qt(this.tertiaryColor,this.darkMode),this.primaryTextColor=L(this.primaryColor),this.secondaryTextColor=L(this.secondaryColor),this.tertiaryTextColor=L(this.tertiaryColor),this.lineColor=L(this.background),this.textColor=L(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=Ye(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var e,r,i,o,n,a,s,l,c,h,f;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||m(this.primaryColor,{h:30}),this.cScale4=this.cScale4||m(this.primaryColor,{h:60}),this.cScale5=this.cScale5||m(this.primaryColor,{h:90}),this.cScale6=this.cScale6||m(this.primaryColor,{h:120}),this.cScale7=this.cScale7||m(this.primaryColor,{h:150}),this.cScale8=this.cScale8||m(this.primaryColor,{h:210}),this.cScale9=this.cScale9||m(this.primaryColor,{h:270}),this.cScale10=this.cScale10||m(this.primaryColor,{h:300}),this.cScale11=this.cScale11||m(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||H(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||H(this.tertiaryColor,40);for(let u=0;u{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Ev=t=>{let e=new Lv;return e.calculate(t),e},Ov=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=z("#cde498",10),this.primaryBorderColor=qt(this.primaryColor,this.darkMode),this.secondaryBorderColor=qt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=qt(this.tertiaryColor,this.darkMode),this.primaryTextColor=L(this.primaryColor),this.secondaryTextColor=L(this.secondaryColor),this.tertiaryTextColor=L(this.primaryColor),this.lineColor=L(this.background),this.textColor=L(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var e,r,i,o,n,a,s,l,c,h,f;this.actorBorder=H(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||m(this.primaryColor,{h:30}),this.cScale4=this.cScale4||m(this.primaryColor,{h:60}),this.cScale5=this.cScale5||m(this.primaryColor,{h:90}),this.cScale6=this.cScale6||m(this.primaryColor,{h:120}),this.cScale7=this.cScale7||m(this.primaryColor,{h:150}),this.cScale8=this.cScale8||m(this.primaryColor,{h:210}),this.cScale9=this.cScale9||m(this.primaryColor,{h:270}),this.cScale10=this.cScale10||m(this.primaryColor,{h:300}),this.cScale11=this.cScale11||m(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||H(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||H(this.tertiaryColor,40);for(let u=0;u{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Iv=t=>{let e=new Ov;return e.calculate(t),e},Ml=class{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=z(this.contrast,55),this.background="#ffffff",this.tertiaryColor=m(this.primaryColor,{h:-160}),this.primaryBorderColor=qt(this.primaryColor,this.darkMode),this.secondaryBorderColor=qt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=qt(this.tertiaryColor,this.darkMode),this.primaryTextColor=L(this.primaryColor),this.secondaryTextColor=L(this.secondaryColor),this.tertiaryTextColor=L(this.tertiaryColor),this.lineColor=L(this.background),this.textColor=L(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var e,r,i,o,n,a,s,l,c,h,f;this.secondBkg=z(this.contrast,55),this.border2=this.contrast,this.actorBorder=z(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let u=0;u{this[i]=e[i]}),this.updateColors(),r.forEach(i=>{this[i]=e[i]})}},Dv=t=>{let e=new Ml;return e.calculate(t),e},Ie={base:{getThemeVariables:Bv},dark:{getThemeVariables:Mv},default:{getThemeVariables:Ev},forest:{getThemeVariables:Iv},neutral:{getThemeVariables:Dv}},Ee={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},theme:"default",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","maxEdges"],legacyMathML:!1,deterministicIds:!1,fontSize:16},vm={...Ee,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:Ie.default.getThemeVariables(),sequence:{...Ee.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...Ee.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Ee.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...Ee.pie,useWidth:984},xyChart:{...Ee.xyChart,useWidth:void 0},requirement:{...Ee.requirement,useWidth:void 0},gitGraph:{...Ee.gitGraph,useMaxWidth:!1},sankey:{...Ee.sankey,useMaxWidth:!1}},km=(t,e="")=>Object.keys(t).reduce((r,i)=>Array.isArray(t[i])?r:typeof t[i]=="object"&&t[i]!==null?[...r,e+i,...km(t[i],"")]:[...r,e+i],[]),Nv=new Set(km(vm,"")),Pv=vm,na=t=>{if(Y.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>na(e));return}for(let e of Object.keys(t)){if(Y.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Nv.has(e)||t[e]==null){Y.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){Y.debug("sanitizing object",e),na(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let i of r)e.includes(i)&&(Y.debug("sanitizing css option",e),t[e]=Rv(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}Y.debug("After sanitization",t)}},Rv=t=>{let e=0,r=0;for(let i of t){if(e{for(let{id:e,detector:r,loader:i}of t)Am(e,r,i)},Am=(t,e,r)=>{Ti[t]?Y.error(`Detector with key ${t} already exists`):Ti[t]={detector:e,loader:r},Y.debug(`Detector with key ${t} added${r?" with loader":""}`)},zv=t=>Ti[t].loader,Ll=(t,e,{depth:r=2,clobber:i=!1}={})=>{let o={depth:r,clobber:i};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(n=>Ll(t,n,o)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(n=>{t.includes(n)||t.push(n)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(n=>{typeof e[n]=="object"&&(t[n]===void 0||typeof t[n]=="object")?(t[n]===void 0&&(t[n]=Array.isArray(e[n])?[]:{}),t[n]=Ll(t[n],e[n],{depth:r-1,clobber:i})):(i||typeof t[n]!="object"&&typeof e[n]!="object")&&(t[n]=e[n])}),t)},Dt=Ll,qv="\u200B",Wv={curveBasis:$s,curveBasisClosed:Ws,curveBasisOpen:Us,curveBumpX:zs,curveBumpY:qs,curveBundle:Hs,curveCardinalClosed:js,curveCardinalOpen:Gs,curveCardinal:Ys,curveCatmullRomClosed:Xs,curveCatmullRomOpen:Ks,curveCatmullRom:Vs,curveLinear:Gi,curveLinearClosed:Zs,curveMonotoneX:Js,curveMonotoneY:tl,curveNatural:el,curveStep:rl,curveStepAfter:ol,curveStepBefore:il},Uv=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Hv=function(t,e){let r=Bm(t,/(?:init\b)|(?:initialize\b)/),i={};if(Array.isArray(r)){let a=r.map(s=>s.args);na(a),i=Dt(i,[...a])}else i=r.args;if(!i)return;let o=ya(t,e),n="config";return i[n]!==void 0&&(o==="flowchart-v2"&&(o="flowchart"),i[o]=i[n],delete i[n]),i},Bm=function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${Uv.source})(?=[}][%]{2}).* +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),Y.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let i,o=[];for(;(i=po.exec(t))!==null;)if(i.index===po.lastIndex&&po.lastIndex++,i&&!e||e&&i[1]&&i[1].match(e)||e&&i[2]&&i[2].match(e)){let n=i[1]?i[1]:i[2],a=i[3]?i[3].trim():i[4]?JSON.parse(i[4].trim()):null;o.push({type:n,args:a})}return o.length===0?{type:t,args:null}:o.length===1?o[0]:o}catch(r){return Y.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},Yv=function(t){return t.replace(po,"")},jv=function(t,e){for(let[r,i]of e.entries())if(i.match(t))return r;return-1};function Gv(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return Wv[r]??e}function Vv(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,_m.sanitizeUrl)(r):r}var Xv=(t,...e)=>{let r=t.split("."),i=r.length-1,o=r[i],n=window;for(let a=0;a{r+=Fm(o,e),e=o});let i=r/2;return Pl(t,i)}function Zv(t){return t.length===1?t[0]:Kv(t)}var rm=(t,e=2)=>{let r=Math.pow(10,e);return Math.round(t*r)/r},Pl=(t,e)=>{let r,i=e;for(let o of t){if(r){let n=Fm(o,r);if(n=1)return{x:o.x,y:o.y};if(a>0&&a<1)return{x:rm((1-a)*r.x+a*o.x,5),y:rm((1-a)*r.y+a*o.y,5)}}}r=o}throw new Error("Could not find a suitable point for the given distance")},Qv=(t,e,r)=>{Y.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let o=Pl(e,25),n=t?10:5,a=Math.atan2(e[0].y-o.y,e[0].x-o.x),s={x:0,y:0};return s.x=Math.sin(a)*n+(e[0].x+o.x)/2,s.y=-Math.cos(a)*n+(e[0].y+o.y)/2,s};function Jv(t,e,r){let i=structuredClone(r);Y.info("our points",i),e!=="start_left"&&e!=="start_right"&&i.reverse();let o=25+t,n=Pl(i,o),a=10+t*.5,s=Math.atan2(i[0].y-n.y,i[0].x-n.x),l={x:0,y:0};return e==="start_left"?(l.x=Math.sin(s+Math.PI)*a+(i[0].x+n.x)/2,l.y=-Math.cos(s+Math.PI)*a+(i[0].y+n.y)/2):e==="end_right"?(l.x=Math.sin(s-Math.PI)*a+(i[0].x+n.x)/2-5,l.y=-Math.cos(s-Math.PI)*a+(i[0].y+n.y)/2-5):e==="end_left"?(l.x=Math.sin(s)*a+(i[0].x+n.x)/2-5,l.y=-Math.cos(s)*a+(i[0].y+n.y)/2-5):(l.x=Math.sin(s)*a+(i[0].x+n.x)/2,l.y=-Math.cos(s)*a+(i[0].y+n.y)/2),l}function tk(t){let e="",r="";for(let i of t)i!==void 0&&(i.startsWith("color:")||i.startsWith("text-align:")?r=r+i+";":e=e+i+";");return{style:e,labelStyle:r}}var im=0,ek=()=>(im++,"id-"+Math.random().toString(36).substr(2,12)+"-"+im);function rk(t){let e="",r="0123456789abcdef",i=r.length;for(let o=0;ork(t.length),ok=function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},nk=function(t,e){let r=e.text.replace(Nl.lineBreakRegex," "),[,i]=$l(e.fontSize),o=t.append("text");o.attr("x",e.x),o.attr("y",e.y),o.style("text-anchor",e.anchor),o.style("font-family",e.fontFamily),o.style("font-size",i),o.style("font-weight",e.fontWeight),o.attr("fill",e.fill),e.class!==void 0&&o.attr("class",e.class);let n=o.append("tspan");return n.attr("x",e.x+e.textMargin*2),n.attr("fill",e.fill),n.text(r),o},ak=On((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),Nl.lineBreakRegex.test(t)))return t;let i=t.split(" "),o=[],n="";return i.forEach((a,s)=>{let l=sa(`${a} `,r),c=sa(n,r);if(l>e){let{hyphenatedStrings:u,remainingWord:p}=sk(a,e,"-",r);o.push(n,...u),n=p}else c+l>=e?(o.push(n),n=a):n=[n,a].filter(Boolean).join(" ");s+1===i.length&&o.push(n)}),o.filter(a=>a!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),sk=On((t,e,r="-",i)=>{i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},i);let o=[...t],n=[],a="";return o.forEach((s,l)=>{let c=`${a}${s}`;if(sa(c,i)>=e){let f=l+1,u=o.length===f,p=`${c}${r}`;n.push(u?c:p),a=""}else a=c}),{hyphenatedStrings:n,remainingWord:a}},(t,e,r="-",i)=>`${t}${e}${r}${i.fontSize}${i.fontWeight}${i.fontFamily}`);function lk(t,e){return Rl(t,e).height}function sa(t,e){return Rl(t,e).width}var Rl=On((t,e)=>{let{fontSize:r=12,fontFamily:i="Arial",fontWeight:o=400}=e;if(!t)return{width:0,height:0};let[,n]=$l(r),a=["sans-serif",i],s=t.split(Nl.lineBreakRegex),l=[],c=Wt("body");if(!c.remove)return{width:0,height:0,lineHeight:0};let h=c.append("svg");for(let u of a){let p=0,x={width:0,height:0,lineHeight:0};for(let _ of s){let b=ok();b.text=_||qv;let w=nk(h,b).style("font-size",n).style("font-weight",o).style("font-family",u),v=(w._groups||w)[0][0].getBBox();if(v.width===0&&v.height===0)throw new Error("svg element not in render tree");x.width=Math.round(Math.max(x.width,v.width)),p=Math.round(v.height),x.height+=p,x.lineHeight=Math.round(Math.max(x.lineHeight,p))}l.push(x)}h.remove();let f=isNaN(l[1].height)||isNaN(l[1].width)||isNaN(l[1].lineHeight)||l[0].height>l[1].height&&l[0].width>l[1].width&&l[0].lineHeight>l[1].lineHeight?0:1;return l[f]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),El=class{constructor(e=!1,r){this.count=0,this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}},ia,ck=function(t){return ia=ia||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),ia.innerHTML=t,unescape(ia.textContent)};function Mm(t){return"str"in t}var uk=(t,e,r,i)=>{var o;if(!i)return;let n=(o=t.node())==null?void 0:o.getBBox();n&&t.append("text").text(i).attr("x",n.x+n.width/2).attr("y",-r).attr("class",e)},$l=t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]};function Lm(t,e){return Ad({},t,e)}var mo={assignWithDepth:Dt,wrapLabel:ak,calculateTextHeight:lk,calculateTextWidth:sa,calculateTextDimensions:Rl,cleanAndMerge:Lm,detectInit:Hv,detectDirective:Bm,isSubstringInArray:jv,interpolateToCurve:Gv,calcLabelPosition:Zv,calcCardinalityPosition:Qv,calcTerminalLabelPosition:Jv,formatUrl:Vv,getStylesFromArray:tk,generateId:ek,random:ik,runFunc:Xv,entityDecode:ck,insertTitle:uk,parseFontSize:$l,InitIDGenerator:El},hk=function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let i=r.substring(1,r.length-1);return/^\+?\d+$/.test(i)?"\uFB02\xB0\xB0"+i+"\xB6\xDF":"\uFB02\xB0"+i+"\xB6\xDF"}),e},fk=function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},om="10.9.1",vi=Object.freeze(Pv),Yt=Dt({},vi),Em,ki=[],go=Dt({},vi),_a=(t,e)=>{let r=Dt({},t),i={};for(let o of e)Dm(o),i=Dt(i,o);if(r=Dt(r,i),i.theme&&i.theme in Ie){let o=Dt({},Em),n=Dt(o.themeVariables||{},i.themeVariables);r.theme&&r.theme in Ie&&(r.themeVariables=Ie[r.theme].getThemeVariables(n))}return go=r,Nm(go),go},pk=t=>(Yt=Dt({},vi),Yt=Dt(Yt,t),t.theme&&Ie[t.theme]&&(Yt.themeVariables=Ie[t.theme].getThemeVariables(t.themeVariables)),_a(Yt,ki),Yt),dk=t=>{Em=Dt({},t)},mk=t=>(Yt=Dt(Yt,t),_a(Yt,ki),Yt),Om=()=>Dt({},Yt),Im=t=>(Nm(t),Dt(go,t),xe()),xe=()=>Dt({},go),Dm=t=>{t&&(["secure",...Yt.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(Y.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&Dm(t[e])}))},gk=t=>{na(t),t.fontFamily&&(!t.themeVariables||!t.themeVariables.fontFamily)&&(t.themeVariables={fontFamily:t.fontFamily}),ki.push(t),_a(Yt,ki)},la=(t=Yt)=>{ki=[],_a(t,ki)},xk={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},nm={},yk=t=>{nm[t]||(Y.warn(xk[t]),nm[t]=!0)},Nm=t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&yk("LAZY_LOAD_DEPRECATED")},Pm="c4",_k=t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),Ck=async()=>{let{diagram:t}=await import("./c4Diagram-ae766693-CZAYTAZR.min.js");return{id:Pm,diagram:t}},bk={id:Pm,detector:_k,loader:Ck},Tk=bk,Rm="flowchart",vk=(t,e)=>{var r,i;return((r=e?.flowchart)==null?void 0:r.defaultRenderer)==="dagre-wrapper"||((i=e?.flowchart)==null?void 0:i.defaultRenderer)==="elk"?!1:/^\s*graph/.test(t)},kk=async()=>{let{diagram:t}=await import("./flowDiagram-b222e15a-KHGBC5KH.min.js");return{id:Rm,diagram:t}},Sk={id:Rm,detector:vk,loader:kk},wk=Sk,$m="flowchart-v2",Ak=(t,e)=>{var r,i,o;return((r=e?.flowchart)==null?void 0:r.defaultRenderer)==="dagre-d3"||((i=e?.flowchart)==null?void 0:i.defaultRenderer)==="elk"?!1:/^\s*graph/.test(t)&&((o=e?.flowchart)==null?void 0:o.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)},Bk=async()=>{let{diagram:t}=await import("./flowDiagram-v2-13329dc7-7HQDDRUE.min.js");return{id:$m,diagram:t}},Fk={id:$m,detector:Ak,loader:Bk},Mk=Fk,zm="er",Lk=t=>/^\s*erDiagram/.test(t),Ek=async()=>{let{diagram:t}=await import("./erDiagram-09d1c15f-DTEA6AXO.min.js");return{id:zm,diagram:t}},Ok={id:zm,detector:Lk,loader:Ek},Ik=Ok,qm="gitGraph",Dk=t=>/^\s*gitGraph/.test(t),Nk=async()=>{let{diagram:t}=await import("./gitGraphDiagram-942e62fe-MKYST3PD.min.js");return{id:qm,diagram:t}},Pk={id:qm,detector:Dk,loader:Nk},Rk=Pk,Wm="gantt",$k=t=>/^\s*gantt/.test(t),zk=async()=>{let{diagram:t}=await import("./ganttDiagram-b62c793e-AG7E44IT.min.js");return{id:Wm,diagram:t}},qk={id:Wm,detector:$k,loader:zk},Wk=qk,Um="info",Uk=t=>/^\s*info/.test(t),Hk=async()=>{let{diagram:t}=await import("./infoDiagram-94cd232f-QDJEABPW.min.js");return{id:Um,diagram:t}},Yk={id:Um,detector:Uk,loader:Hk},Hm="pie",jk=t=>/^\s*pie/.test(t),Gk=async()=>{let{diagram:t}=await import("./pieDiagram-bb1d19e5-S5GML3CT.min.js");return{id:Hm,diagram:t}},Vk={id:Hm,detector:jk,loader:Gk},Ym="quadrantChart",Xk=t=>/^\s*quadrantChart/.test(t),Kk=async()=>{let{diagram:t}=await import("./quadrantDiagram-c759a472-M63GQYLB.min.js");return{id:Ym,diagram:t}},Zk={id:Ym,detector:Xk,loader:Kk},Qk=Zk,jm="xychart",Jk=t=>/^\s*xychart-beta/.test(t),tS=async()=>{let{diagram:t}=await import("./xychartDiagram-f11f50a6-N45Z7OOP.min.js");return{id:jm,diagram:t}},eS={id:jm,detector:Jk,loader:tS},rS=eS,Gm="requirement",iS=t=>/^\s*requirement(Diagram)?/.test(t),oS=async()=>{let{diagram:t}=await import("./requirementDiagram-87253d64-XJI5VOSH.min.js");return{id:Gm,diagram:t}},nS={id:Gm,detector:iS,loader:oS},aS=nS,Vm="sequence",sS=t=>/^\s*sequenceDiagram/.test(t),lS=async()=>{let{diagram:t}=await import("./sequenceDiagram-6894f283-AJU5ZNMQ.min.js");return{id:Vm,diagram:t}},cS={id:Vm,detector:sS,loader:lS},uS=cS,Xm="class",hS=(t,e)=>{var r;return((r=e?.class)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t)},fS=async()=>{let{diagram:t}=await import("./classDiagram-fb54d2a0-HROX7LLG.min.js");return{id:Xm,diagram:t}},pS={id:Xm,detector:hS,loader:fS},dS=pS,Km="classDiagram",mS=(t,e)=>{var r;return/^\s*classDiagram/.test(t)&&((r=e?.class)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t)},gS=async()=>{let{diagram:t}=await import("./classDiagram-v2-a2b738ad-P3OHMUUZ.min.js");return{id:Km,diagram:t}},xS={id:Km,detector:mS,loader:gS},yS=xS,Zm="state",_S=(t,e)=>{var r;return((r=e?.state)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t)},CS=async()=>{let{diagram:t}=await import("./stateDiagram-5dee940d-56243UMQ.min.js");return{id:Zm,diagram:t}},bS={id:Zm,detector:_S,loader:CS},TS=bS,Qm="stateDiagram",vS=(t,e)=>{var r;return!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&((r=e?.state)==null?void 0:r.defaultRenderer)==="dagre-wrapper")},kS=async()=>{let{diagram:t}=await import("./stateDiagram-v2-1992cada-ZUI7IUPQ.min.js");return{id:Qm,diagram:t}},SS={id:Qm,detector:vS,loader:kS},wS=SS,Jm="journey",AS=t=>/^\s*journey/.test(t),BS=async()=>{let{diagram:t}=await import("./journeyDiagram-6625b456-5PROY5YP.min.js");return{id:Jm,diagram:t}},FS={id:Jm,detector:AS,loader:BS},MS=FS,LS=function(t,e){for(let r of e)t.attr(r[0],r[1])},ES=function(t,e,r){let i=new Map;return r?(i.set("width","100%"),i.set("style",`max-width: ${e}px;`)):(i.set("height",t),i.set("width",e)),i},tg=function(t,e,r,i){let o=ES(e,r,i);LS(t,o)},OS=function(t,e,r,i){let o=e.node().getBBox(),n=o.width,a=o.height;Y.info(`SVG bounds: ${n}x${a}`,o);let s=0,l=0;Y.info(`Graph bounds: ${s}x${l}`,t),s=n+r*2,l=a+r*2,Y.info(`Calculated bounds: ${s}x${l}`),tg(e,l,s,i);let c=`${o.x-r} ${o.y-r} ${o.width+2*r} ${o.height+2*r}`;e.attr("viewBox",c)},oa={},IS=(t,e,r)=>{let i="";return t in oa&&oa[t]?i=oa[t](r):Y.warn(`No theme found for ${t}`),` & { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + fill: ${r.textColor} + } + + /* Classes common for multiple diagrams */ + + & .error-icon { + fill: ${r.errorBkgColor}; + } + & .error-text { + fill: ${r.errorTextColor}; + stroke: ${r.errorTextColor}; + } + + & .edge-thickness-normal { + stroke-width: 2px; + } + & .edge-thickness-thick { + stroke-width: 3.5px + } + & .edge-pattern-solid { + stroke-dasharray: 0; + } + + & .edge-pattern-dashed{ + stroke-dasharray: 3; + } + .edge-pattern-dotted { + stroke-dasharray: 2; + } + + & .marker { + fill: ${r.lineColor}; + stroke: ${r.lineColor}; + } + & .marker.cross { + stroke: ${r.lineColor}; + } + + & svg { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + } + + ${i} + + ${e} +`},DS=(t,e)=>{e!==void 0&&(oa[t]=e)},NS=IS,zl="",ql="",Wl="",Ul=t=>xo(t,xe()),PS=()=>{zl="",Wl="",ql=""},RS=t=>{zl=Ul(t).replace(/^\s+/g,"")},$S=()=>zl,zS=t=>{Wl=Ul(t).replace(/\n\s+/g,` +`)},qS=()=>Wl,WS=t=>{ql=Ul(t)},US=()=>ql,HS=Object.freeze(Object.defineProperty({__proto__:null,clear:PS,getAccDescription:qS,getAccTitle:$S,getDiagramTitle:US,setAccDescription:zS,setAccTitle:RS,setDiagramTitle:WS},Symbol.toStringTag,{value:"Module"})),YS=Y,jS=Dl,Hl=xe,pq=Im,dq=vi,GS=t=>xo(t,Hl()),VS=OS,XS=()=>HS,ca={},ua=(t,e,r)=>{var i;if(ca[t])throw new Error(`Diagram ${t} already registered.`);ca[t]=e,r&&Am(t,r),DS(t,e.styles),(i=e.injectUtils)==null||i.call(e,YS,jS,Hl,GS,VS,XS(),()=>{})},Yl=t=>{if(t in ca)return ca[t];throw new Ol(t)},Ol=class extends Error{constructor(e){super(`Diagram ${e} not found.`)}},KS=t=>{var e;let{securityLevel:r}=Hl(),i=Wt("body");if(r==="sandbox"){let a=((e=Wt(`#i${t}`).node())==null?void 0:e.contentDocument)??document;i=Wt(a.body)}return i.select(`#${t}`)},ZS=(t,e,r)=>{Y.debug(`rendering svg for syntax error +`);let i=KS(e),o=i.append("g");i.attr("viewBox","0 0 2412 512"),tg(i,100,512,!0),o.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),o.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),o.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),o.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),o.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),o.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),o.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),o.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},eg={draw:ZS},QS=eg,JS={db:{},renderer:eg,parser:{parser:{yy:{}},parse:()=>{}}},tw=JS,rg="flowchart-elk",ew=(t,e)=>{var r;return!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&((r=e?.flowchart)==null?void 0:r.defaultRenderer)==="elk")},rw=async()=>{let{diagram:t}=await import("./flowchart-elk-definition-ae0efee6-MAQF265M.min.js");return{id:rg,diagram:t}},iw={id:rg,detector:ew,loader:rw},ow=iw,ig="timeline",nw=t=>/^\s*timeline/.test(t),aw=async()=>{let{diagram:t}=await import("./timeline-definition-bf702344-YJZ3MVX7.min.js");return{id:ig,diagram:t}},sw={id:ig,detector:nw,loader:aw},lw=sw,og="mindmap",cw=t=>/^\s*mindmap/.test(t),uw=async()=>{let{diagram:t}=await import("./mindmap-definition-307c710a-X5KDYKIG.min.js");return{id:og,diagram:t}},hw={id:og,detector:cw,loader:uw},fw=hw,ng="sankey",pw=t=>/^\s*sankey-beta/.test(t),dw=async()=>{let{diagram:t}=await import("./sankeyDiagram-707fac0f-3GVBJS6H.min.js");return{id:ng,diagram:t}},mw={id:ng,detector:pw,loader:dw},gw=mw,ag="block",xw=t=>/^\s*block-beta/.test(t),yw=async()=>{let{diagram:t}=await import("./blockDiagram-9f4a6865-KQGFBXS7.min.js");return{id:ag,diagram:t}},_w={id:ag,detector:xw,loader:yw},Cw=_w,am=!1,jl=()=>{am||(am=!0,ua("error",tw,t=>t.toLowerCase().trim()==="error"),ua("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},t=>t.toLowerCase().trimStart().startsWith("---")),wm(Tk,yS,dS,Ik,Wk,Yk,Vk,aS,uS,ow,Mk,wk,fw,lw,Rk,wS,TS,MS,Qk,gw,rS,Cw))},ha=class{constructor(e,r={}){this.text=e,this.metadata=r,this.type="graph",this.text=hk(e),this.text+=` +`;let i=xe();try{this.type=ya(e,i)}catch(n){this.type="error",this.detectError=n}let o=Yl(this.type);Y.debug("Type "+this.type),this.db=o.db,this.renderer=o.renderer,this.parser=o.parser,this.parser.parser.yy=this.db,this.init=o.init,this.parse()}parse(){var e,r,i,o,n;if(this.detectError)throw this.detectError;(r=(e=this.db).clear)==null||r.call(e);let a=xe();(i=this.init)==null||i.call(this,a),this.metadata.title&&((n=(o=this.db).setDiagramTitle)==null||n.call(o,this.metadata.title)),this.parser.parse(this.text)}async render(e,r){await this.renderer.draw(this.text,e,r,this)}getParser(){return this.parser}getType(){return this.type}},bw=async(t,e={})=>{let r=ya(t,xe());try{Yl(r)}catch{let o=zv(r);if(!o)throw new aa(`Diagram ${r} not found.`);let{id:n,diagram:a}=await o();ua(n,a)}return new ha(t,e)},sm=[],Tw=()=>{sm.forEach(t=>{t()}),sm=[]},vw="graphics-document document";function kw(t,e){t.attr("role",vw),e!==""&&t.attr("aria-roledescription",e)}function Sw(t,e,r,i){if(t.insert!==void 0){if(r){let o=`chart-desc-${i}`;t.attr("aria-describedby",o),t.insert("desc",":first-child").attr("id",o).text(r)}if(e){let o=`chart-title-${i}`;t.attr("aria-labelledby",o),t.insert("title",":first-child").attr("id",o).text(e)}}}var ww=t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();function sg(t){return typeof t>"u"||t===null}function Aw(t){return typeof t=="object"&&t!==null}function Bw(t){return Array.isArray(t)?t:sg(t)?[]:[t]}function Fw(t,e){var r,i,o,n;if(e)for(n=Object.keys(e),r=0,i=n.length;rs&&(n=" ... ",e=i-s+n.length),r-i>s&&(a=" ...",r=i+s-a.length),{str:n+t.slice(e,r).replace(/\t/g,"\u2192")+a,pos:i-e+n.length}}function Sl(t,e){return zt.repeat(" ",e-t.length)+t}function Rw(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,i=[0],o=[],n,a=-1;n=r.exec(t.buffer);)o.push(n.index),i.push(n.index+n[0].length),t.position<=n.index&&a<0&&(a=i.length-2);a<0&&(a=i.length-1);var s="",l,c,h=Math.min(t.line+e.linesAfter,o.length).toString().length,f=e.maxLength-(e.indent+h+3);for(l=1;l<=e.linesBefore&&!(a-l<0);l++)c=kl(t.buffer,i[a-l],o[a-l],t.position-(i[a]-i[a-l]),f),s=zt.repeat(" ",e.indent)+Sl((t.line-l+1).toString(),h)+" | "+c.str+` +`+s;for(c=kl(t.buffer,i[a],o[a],t.position,f),s+=zt.repeat(" ",e.indent)+Sl((t.line+1).toString(),h)+" | "+c.str+` +`,s+=zt.repeat("-",e.indent+h+3+c.pos)+`^ +`,l=1;l<=e.linesAfter&&!(a+l>=o.length);l++)c=kl(t.buffer,i[a+l],o[a+l],t.position-(i[a]-i[a+l]),f),s+=zt.repeat(" ",e.indent)+Sl((t.line+l+1).toString(),h)+" | "+c.str+` +`;return s.replace(/\n$/,"")}var $w=Rw,zw=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],qw=["scalar","sequence","mapping"];function Ww(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(i){e[String(i)]=r})}),e}function Uw(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(zw.indexOf(r)===-1)throw new Oe('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=Ww(e.styleAliases||null),qw.indexOf(this.kind)===-1)throw new Oe('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}var Nt=Uw;function lm(t,e){var r=[];return t[e].forEach(function(i){var o=r.length;r.forEach(function(n,a){n.tag===i.tag&&n.kind===i.kind&&n.multi===i.multi&&(o=a)}),r[o]=i}),r}function Hw(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function i(o){o.multi?(t.multi[o.kind].push(o),t.multi.fallback.push(o)):t[o.kind][o.tag]=t.fallback[o.tag]=o}for(e=0,r=arguments.length;e=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),hA=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function fA(t){return!(t===null||!hA.test(t)||t[t.length-1]==="_")}function pA(t){var e,r;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}var dA=/^[-+]?[0-9]+e/;function mA(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(zt.isNegativeZero(t))return"-0.0";return r=t.toString(10),dA.test(r)?r.replace("e",".e"):r}function gA(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||zt.isNegativeZero(t))}var xA=new Nt("tag:yaml.org,2002:float",{kind:"scalar",resolve:fA,construct:pA,predicate:gA,represent:mA,defaultStyle:"lowercase"}),cg=Xw.extend({implicit:[Jw,iA,uA,xA]}),yA=cg,ug=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),hg=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function _A(t){return t===null?!1:ug.exec(t)!==null||hg.exec(t)!==null}function CA(t){var e,r,i,o,n,a,s,l=0,c=null,h,f,u;if(e=ug.exec(t),e===null&&(e=hg.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],i=+e[2]-1,o=+e[3],!e[4])return new Date(Date.UTC(r,i,o));if(n=+e[4],a=+e[5],s=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(h=+e[10],f=+(e[11]||0),c=(h*60+f)*6e4,e[9]==="-"&&(c=-c)),u=new Date(Date.UTC(r,i,o,n,a,s,l)),c&&u.setTime(u.getTime()-c),u}function bA(t){return t.toISOString()}var TA=new Nt("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:_A,construct:CA,instanceOf:Date,represent:bA});function vA(t){return t==="<<"||t===null}var kA=new Nt("tag:yaml.org,2002:merge",{kind:"scalar",resolve:vA}),Gl=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function SA(t){if(t===null)return!1;var e,r,i=0,o=t.length,n=Gl;for(r=0;r64)){if(e<0)return!1;i+=6}return i%8===0}function wA(t){var e,r,i=t.replace(/[\r\n=]/g,""),o=i.length,n=Gl,a=0,s=[];for(e=0;e>16&255),s.push(a>>8&255),s.push(a&255)),a=a<<6|n.indexOf(i.charAt(e));return r=o%4*6,r===0?(s.push(a>>16&255),s.push(a>>8&255),s.push(a&255)):r===18?(s.push(a>>10&255),s.push(a>>2&255)):r===12&&s.push(a>>4&255),new Uint8Array(s)}function AA(t){var e="",r=0,i,o,n=t.length,a=Gl;for(i=0;i>18&63],e+=a[r>>12&63],e+=a[r>>6&63],e+=a[r&63]),r=(r<<8)+t[i];return o=n%3,o===0?(e+=a[r>>18&63],e+=a[r>>12&63],e+=a[r>>6&63],e+=a[r&63]):o===2?(e+=a[r>>10&63],e+=a[r>>4&63],e+=a[r<<2&63],e+=a[64]):o===1&&(e+=a[r>>2&63],e+=a[r<<4&63],e+=a[64],e+=a[64]),e}function BA(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}var FA=new Nt("tag:yaml.org,2002:binary",{kind:"scalar",resolve:SA,construct:wA,predicate:BA,represent:AA}),MA=Object.prototype.hasOwnProperty,LA=Object.prototype.toString;function EA(t){if(t===null)return!0;var e=[],r,i,o,n,a,s=t;for(r=0,i=s.length;r>10)+55296,(t-65536&1023)+56320)}var gg=new Array(256),xg=new Array(256);for(Lr=0;Lr<256;Lr++)gg[Lr]=hm(Lr)?1:0,xg[Lr]=hm(Lr);var Lr;function QA(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||UA,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function yg(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=$w(r),new Oe(e,r)}function U(t,e){throw yg(t,e)}function da(t,e){t.onWarning&&t.onWarning.call(null,yg(t,e))}var fm={YAML:function(e,r,i){var o,n,a;e.version!==null&&U(e,"duplication of %YAML directive"),i.length!==1&&U(e,"YAML directive accepts exactly one argument"),o=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),o===null&&U(e,"ill-formed argument of the YAML directive"),n=parseInt(o[1],10),a=parseInt(o[2],10),n!==1&&U(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=a<2,a!==1&&a!==2&&da(e,"unsupported YAML version of the document")},TAG:function(e,r,i){var o,n;i.length!==2&&U(e,"TAG directive accepts exactly two arguments"),o=i[0],n=i[1],dg.test(o)||U(e,"ill-formed tag handle (first argument) of the TAG directive"),er.call(e.tagMap,o)&&U(e,'there is a previously declared suffix for "'+o+'" tag handle'),mg.test(n)||U(e,"ill-formed tag prefix (second argument) of the TAG directive");try{n=decodeURIComponent(n)}catch{U(e,"tag prefix is malformed: "+n)}e.tagMap[o]=n}};function tr(t,e,r,i){var o,n,a,s;if(e1&&(t.result+=zt.repeat(` +`,e-1))}function JA(t,e,r){var i,o,n,a,s,l,c,h,f=t.kind,u=t.result,p;if(p=t.input.charCodeAt(t.position),jt(p)||Ci(p)||p===35||p===38||p===42||p===33||p===124||p===62||p===39||p===34||p===37||p===64||p===96||(p===63||p===45)&&(o=t.input.charCodeAt(t.position+1),jt(o)||r&&Ci(o)))return!1;for(t.kind="scalar",t.result="",n=a=t.position,s=!1;p!==0;){if(p===58){if(o=t.input.charCodeAt(t.position+1),jt(o)||r&&Ci(o))break}else if(p===35){if(i=t.input.charCodeAt(t.position-1),jt(i))break}else{if(t.position===t.lineStart&&Ca(t)||r&&Ci(p))break;if(ge(p))if(l=t.line,c=t.lineStart,h=t.lineIndent,mt(t,!1,-1),t.lineIndent>=e){s=!0,p=t.input.charCodeAt(t.position);continue}else{t.position=a,t.line=l,t.lineStart=c,t.lineIndent=h;break}}s&&(tr(t,n,a,!1),Xl(t,t.line-l),n=a=t.position,s=!1),Er(p)||(a=t.position+1),p=t.input.charCodeAt(++t.position)}return tr(t,n,a,!1),t.result?!0:(t.kind=f,t.result=u,!1)}function tB(t,e){var r,i,o;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,i=o=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(tr(t,i,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)i=t.position,t.position++,o=t.position;else return!0;else ge(r)?(tr(t,i,o,!0),Xl(t,mt(t,!1,e)),i=o=t.position):t.position===t.lineStart&&Ca(t)?U(t,"unexpected end of the document within a single quoted scalar"):(t.position++,o=t.position);U(t,"unexpected end of the stream within a single quoted scalar")}function eB(t,e){var r,i,o,n,a,s;if(s=t.input.charCodeAt(t.position),s!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=i=t.position;(s=t.input.charCodeAt(t.position))!==0;){if(s===34)return tr(t,r,t.position,!0),t.position++,!0;if(s===92){if(tr(t,r,t.position,!0),s=t.input.charCodeAt(++t.position),ge(s))mt(t,!1,e);else if(s<256&&gg[s])t.result+=xg[s],t.position++;else if((a=XA(s))>0){for(o=a,n=0;o>0;o--)s=t.input.charCodeAt(++t.position),(a=VA(s))>=0?n=(n<<4)+a:U(t,"expected hexadecimal character");t.result+=ZA(n),t.position++}else U(t,"unknown escape sequence");r=i=t.position}else ge(s)?(tr(t,r,i,!0),Xl(t,mt(t,!1,e)),r=i=t.position):t.position===t.lineStart&&Ca(t)?U(t,"unexpected end of the document within a double quoted scalar"):(t.position++,i=t.position)}U(t,"unexpected end of the stream within a double quoted scalar")}function rB(t,e){var r=!0,i,o,n,a=t.tag,s,l=t.anchor,c,h,f,u,p,x=Object.create(null),_,b,w,v;if(v=t.input.charCodeAt(t.position),v===91)h=93,p=!1,s=[];else if(v===123)h=125,p=!0,s={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=s),v=t.input.charCodeAt(++t.position);v!==0;){if(mt(t,!0,e),v=t.input.charCodeAt(t.position),v===h)return t.position++,t.tag=a,t.anchor=l,t.kind=p?"mapping":"sequence",t.result=s,!0;r?v===44&&U(t,"expected the node content, but found ','"):U(t,"missed comma between flow collection entries"),b=_=w=null,f=u=!1,v===63&&(c=t.input.charCodeAt(t.position+1),jt(c)&&(f=u=!0,t.position++,mt(t,!0,e))),i=t.line,o=t.lineStart,n=t.position,Si(t,e,fa,!1,!0),b=t.tag,_=t.result,mt(t,!0,e),v=t.input.charCodeAt(t.position),(u||t.line===i)&&v===58&&(f=!0,v=t.input.charCodeAt(++t.position),mt(t,!0,e),Si(t,e,fa,!1,!0),w=t.result),p?bi(t,s,x,b,_,w,i,o,n):f?s.push(bi(t,null,x,b,_,w,i,o,n)):s.push(_),mt(t,!0,e),v=t.input.charCodeAt(t.position),v===44?(r=!0,v=t.input.charCodeAt(++t.position)):r=!1}U(t,"unexpected end of the stream within a flow collection")}function iB(t,e){var r,i,o=wl,n=!1,a=!1,s=e,l=0,c=!1,h,f;if(f=t.input.charCodeAt(t.position),f===124)i=!1;else if(f===62)i=!0;else return!1;for(t.kind="scalar",t.result="";f!==0;)if(f=t.input.charCodeAt(++t.position),f===43||f===45)wl===o?o=f===43?cm:HA:U(t,"repeat of a chomping mode identifier");else if((h=KA(f))>=0)h===0?U(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):a?U(t,"repeat of an indentation width identifier"):(s=e+h-1,a=!0);else break;if(Er(f)){do f=t.input.charCodeAt(++t.position);while(Er(f));if(f===35)do f=t.input.charCodeAt(++t.position);while(!ge(f)&&f!==0)}for(;f!==0;){for(Vl(t),t.lineIndent=0,f=t.input.charCodeAt(t.position);(!a||t.lineIndents&&(s=t.lineIndent),ge(f)){l++;continue}if(t.lineIndente)&&l!==0)U(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(b&&(a=t.line,s=t.lineStart,l=t.position),Si(t,e,pa,!0,o)&&(b?x=t.result:_=t.result),b||(bi(t,f,u,p,x,_,a,s,l),p=x=_=null),mt(t,!0,-1),v=t.input.charCodeAt(t.position)),(t.line===n||t.lineIndent>e)&&v!==0)U(t,"bad indentation of a mapping entry");else if(t.lineIndente?l=1:t.lineIndent===e?l=0:t.lineIndente?l=1:t.lineIndent===e?l=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),f=0,u=t.implicitTypes.length;f"),t.result!==null&&x.kind!==t.kind&&U(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+x.kind+'", not "'+t.kind+'"'),x.resolve(t.result,t.tag)?(t.result=x.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):U(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||h}function lB(t){var e=t.position,r,i,o,n=!1,a;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(a=t.input.charCodeAt(t.position))!==0&&(mt(t,!0,-1),a=t.input.charCodeAt(t.position),!(t.lineIndent>0||a!==37));){for(n=!0,a=t.input.charCodeAt(++t.position),r=t.position;a!==0&&!jt(a);)a=t.input.charCodeAt(++t.position);for(i=t.input.slice(r,t.position),o=[],i.length<1&&U(t,"directive name must not be less than one character in length");a!==0;){for(;Er(a);)a=t.input.charCodeAt(++t.position);if(a===35){do a=t.input.charCodeAt(++t.position);while(a!==0&&!ge(a));break}if(ge(a))break;for(r=t.position;a!==0&&!jt(a);)a=t.input.charCodeAt(++t.position);o.push(t.input.slice(r,t.position))}a!==0&&Vl(t),er.call(fm,i)?fm[i](t,i,o):da(t,'unknown document directive "'+i+'"')}if(mt(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,mt(t,!0,-1)):n&&U(t,"directives end mark is expected"),Si(t,t.lineIndent-1,pa,!1,!0),mt(t,!0,-1),t.checkLineBreaks&&jA.test(t.input.slice(e,t.position))&&da(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Ca(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,mt(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var i=_g(t,r);if(typeof e!="function")return i;for(var o=0,n=i.length;ot.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(e,r,i)=>"<"+r+i.replace(/="([^"]*)"/g,"='$1'")+">"),yB=t=>{let{text:e,metadata:r}=gB(t),{displayMode:i,title:o,config:n={}}=r;return i&&(n.gantt||(n.gantt={}),n.gantt.displayMode=i),{title:o,config:n,text:e}},_B=t=>{let e=mo.detectInit(t)??{},r=mo.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:i})=>{}):r?.type==="wrap"&&(e.wrap=!0),{text:Yv(t),directive:e}};function Cg(t){let e=xB(t),r=yB(e),i=_B(r.text),o=Lm(r.config,i.directive);return t=ww(i.text),{code:t,title:r.title,config:o}}var CB=5e4,bB="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",TB="sandbox",vB="loose",kB="http://www.w3.org/2000/svg",SB="http://www.w3.org/1999/xlink",wB="http://www.w3.org/1999/xhtml",AB="100%",BB="100%",FB="border:0;margin:0;",MB="margin:0",LB="allow-top-navigation-by-user-activation allow-popups",EB='The "iframe" tag is not supported by your browser.',OB=["foreignobject"],IB=["dominant-baseline"];function bg(t){let e=Cg(t);return la(),gk(e.config??{}),e}async function DB(t,e){jl(),t=bg(t).code;try{await Kl(t)}catch(r){if(e?.suppressErrors)return!1;throw r}return!0}var mm=(t,e,r=[])=>` +.${t} ${e} { ${r.join(" !important; ")} !important; }`,NB=(t,e={})=>{var r;let i="";if(t.themeCSS!==void 0&&(i+=` +${t.themeCSS}`),t.fontFamily!==void 0&&(i+=` +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(i+=` +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!Hn(e)){let s=t.htmlLabels||((r=t.flowchart)==null?void 0:r.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(let l in e){let c=e[l];Hn(c.styles)||s.forEach(h=>{i+=mm(c.id,h,c.styles)}),Hn(c.textStyles)||(i+=mm(c.id,"tspan",c.textStyles))}}return i},PB=(t,e,r,i)=>{let o=NB(t,r),n=NS(e,o,t.themeVariables);return ra(Zd(`${i}{${n}}`),Qd)},RB=(t="",e,r)=>{let i=t;return!r&&!e&&(i=i.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),i=fk(i),i=i.replace(/
/g,"
"),i},$B=(t="",e)=>{var r,i;let o=(i=(r=e?.viewBox)==null?void 0:r.baseVal)!=null&&i.height?e.viewBox.baseVal.height+"px":BB,n=btoa(''+t+"");return``},gm=(t,e,r,i,o)=>{let n=t.append("div");n.attr("id",r),i&&n.attr("style",i);let a=n.append("svg").attr("id",e).attr("width","100%").attr("xmlns",kB);return o&&a.attr("xmlns:xlink",o),a.append("g"),t};function xm(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}var zB=(t,e,r,i)=>{var o,n,a;(o=t.getElementById(e))==null||o.remove(),(n=t.getElementById(r))==null||n.remove(),(a=t.getElementById(i))==null||a.remove()},qB=async function(t,e,r){var i,o,n,a,s,l;jl();let c=bg(e);e=c.code;let h=xe();Y.debug(h),e.length>(h?.maxTextSize??CB)&&(e=bB);let f="#"+t,u="i"+t,p="#"+u,x="d"+t,_="#"+x,b=Wt("body"),w=h.securityLevel===TB,v=h.securityLevel===vB,M=h.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),w){let G=xm(Wt(r),u);b=Wt(G.nodes()[0].contentDocument.body),b.node().style.margin=0}else b=Wt(r);gm(b,t,x,`font-family: ${M}`,SB)}else{if(zB(document,t,x,u),w){let G=xm(Wt("body"),u);b=Wt(G.nodes()[0].contentDocument.body),b.node().style.margin=0}else b=Wt("body");gm(b,t,x)}let E,I;try{E=await Kl(e,{title:c.title})}catch(G){E=new ha("error"),I=G}let B=b.select(_).node(),y=E.type,$=B.firstChild,et=$.firstChild,rt=(o=(i=E.renderer).getClasses)==null?void 0:o.call(i,e,E),T=PB(h,y,rt,f),C=document.createElement("style");C.innerHTML=T,$.insertBefore(C,et);try{await E.renderer.draw(e,t,om,E)}catch(G){throw QS.draw(e,t,om),G}let g=b.select(`${_} svg`),A=(a=(n=E.db).getAccTitle)==null?void 0:a.call(n),F=(l=(s=E.db).getAccDescription)==null?void 0:l.call(s);UB(y,g,A,F),b.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",wB);let N=b.select(_).node().innerHTML;if(Y.debug("config.arrowMarkerAbsolute",h.arrowMarkerAbsolute),N=RB(N,w,Tm(h.arrowMarkerAbsolute)),w){let G=b.select(_+" svg").node();N=$B(N,G)}else v||(N=Or.default.sanitize(N,{ADD_TAGS:OB,ADD_ATTR:IB}));if(Tw(),I)throw I;let j=Wt(w?p:_).node();return j&&"remove"in j&&j.remove(),{svg:N,bindFunctions:E.db.bindFunctions}};function WB(t={}){var e;t?.fontFamily&&!((e=t.themeVariables)!=null&&e.fontFamily)&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),dk(t),t?.theme&&t.theme in Ie?t.themeVariables=Ie[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Ie.default.getThemeVariables(t.themeVariables));let r=typeof t=="object"?pk(t):Om();Dl(r.logLevel),jl()}var Kl=(t,e={})=>{let{code:r}=Cg(t);return bw(r,e)};function UB(t,e,r,i){kw(e,t),Sw(e,r,i,e.attr("id"))}var Ir=Object.freeze({render:qB,parse:DB,getDiagramFromText:Kl,initialize:WB,getConfig:xe,setConfig:Im,getSiteConfig:Om,updateSiteConfig:mk,reset:()=>{la()},globalReset:()=>{la(vi)},defaultConfig:vi});Dl(xe().logLevel);la(xe());var HB=async()=>{Y.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(Ti).map(async([r,{detector:i,loader:o}])=>{if(o)try{Yl(r)}catch{try{let{diagram:a,id:s}=await o();ua(s,a,i)}catch(a){throw Y.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete Ti[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){Y.error(`Failed to load ${e.length} external diagrams`);for(let r of e)Y.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},YB=(t,e,r)=>{Y.warn(t),Mm(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},Tg=async function(t={querySelector:".mermaid"}){try{await jB(t)}catch(e){if(Mm(e)&&Y.error(e.str),ye.parseError&&ye.parseError(e),!t.suppressErrors)throw Y.error("Use the suppressErrors option to suppress these errors"),e}},jB=async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let i=Ir.getConfig();Y.debug(`${t?"":"No "}Callback function found`);let o;if(r)o=r;else if(e)o=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");Y.debug(`Found ${o.length} diagrams`),i?.startOnLoad!==void 0&&(Y.debug("Start On Load: "+i?.startOnLoad),Ir.updateSiteConfig({startOnLoad:i?.startOnLoad}));let n=new mo.InitIDGenerator(i.deterministicIds,i.deterministicIDSeed),a,s=[];for(let l of Array.from(o)){Y.info("Rendering diagram: "+l.id);if(l.getAttribute("data-processed"))continue;l.setAttribute("data-processed","true");let c=`mermaid-${n.next()}`;a=l.innerHTML,a=bc(mo.entityDecode(a)).trim().replace(//gi,"
");let h=mo.detectInit(a);h&&Y.debug("Detected early reinit: ",h);try{let{svg:f,bindFunctions:u}=await wg(c,a,l);l.innerHTML=f,t&&await t(c),u&&u(l)}catch(f){YB(f,s,ye.parseError)}}if(s.length>0)throw s[0]},vg=function(t){Ir.initialize(t)},GB=async function(t,e,r){Y.warn("mermaid.init is deprecated. Please use run instead."),t&&vg(t);let i={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?i.querySelector=e:e&&(e instanceof HTMLElement?i.nodes=[e]:i.nodes=e),await Tg(i)},VB=async(t,{lazyLoad:e=!0}={})=>{wm(...t),e===!1&&await HB()},kg=function(){if(ye.startOnLoad){let{startOnLoad:t}=Ir.getConfig();t&&ye.run().catch(e=>Y.error("Mermaid failed to initialize",e))}};if(typeof document<"u"){window.addEventListener("load",kg,!1)}var XB=function(t){ye.parseError=t},ma=[],Al=!1,Sg=async()=>{if(!Al){for(Al=!0;ma.length>0;){let t=ma.shift();if(t)try{await t()}catch(e){Y.error("Error executing queue",e)}}Al=!1}},KB=async(t,e)=>new Promise((r,i)=>{let o=()=>new Promise((n,a)=>{Ir.parse(t,e).then(s=>{n(s),r(s)},s=>{var l;Y.error("Error parsing",s),(l=ye.parseError)==null||l.call(ye,s),a(s),i(s)})});ma.push(o),Sg().catch(i)}),wg=(t,e,r)=>new Promise((i,o)=>{let n=()=>new Promise((a,s)=>{Ir.render(t,e,r).then(l=>{a(l),i(l)},l=>{var c;Y.error("Error parsing",l),(c=ye.parseError)==null||c.call(ye,l),s(l),o(l)})});ma.push(n),Sg().catch(o)}),ye={startOnLoad:!0,mermaidAPI:Ir,parse:KB,render:wg,init:GB,run:Tg,registerExternalDiagrams:VB,initialize:vg,parseError:void 0,contentLoaded:kg,setParseErrorHandler:XB,detectType:ya};export{bc as a,Tc as b,vc as c,kc as d,Sc as e,y0 as f,_0 as g,Wt as h,gx as i,Mx as j,bC as k,$i as l,fs as m,Ss as n,dr as o,pe as p,Xr as q,Kr as r,Se as s,we as t,Zr as u,fh as v,ph as w,$e as x,dh as y,mh as z,Jr as A,en as B,Wh as C,m_ as D,k_ as E,Gi as F,S_ as G,w_ as H,$s as I,Xf as J,Ye as K,MC as L,Sr as M,z as N,H as O,pt as P,si as Q,ne as R,Ut as S,li as T,je as U,so as V,On as W,Dp as X,di as Y,Pp as Z,Wp as _,yl as $,Up as aa,Hp as ba,Yp as ca,Dn as da,Vp as ea,me as fa,wr as ga,Ar as ha,Nn as ia,Qe as ja,Kp as ka,mi as la,rd as ma,od as na,bl as oa,gi as pa,sd as qa,ld as ra,Pn as sa,ud as ta,Rn as ua,$n as va,_d as wa,Cd as xa,vd as ya,kd as za,Sd as Aa,Ad as Ba,Fd as Ca,Wn as Da,Dd as Ea,Hn as Fa,Y as Ga,_o as Ha,xo as Ia,Tm as Ja,sq as Ka,em as La,lq as Ma,wv as Na,Nl as Oa,Ev as Pa,Pv as Qa,Dt as Ra,qv as Sa,Gv as Ta,tk as Ua,ek as Va,ik as Wa,ak as Xa,lk as Ya,sa as Za,$l as _a,Lm as $a,mo as ab,fk as bb,xe as cb,tg as db,OS as eb,PS as fb,RS as gb,$S as hb,zS as ib,qS as jb,WS as kb,US as lb,HS as mb,Hl as nb,pq as ob,dq as pb,VS as qb,KS as rb,ye as sb}; +/*! Bundled license information: + +dompurify/dist/purify.js: + (*! @license DOMPurify 3.0.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.5/LICENSE *) + +mermaid/dist/mermaid-6dc72991.js: + (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) + (*! Check if previously processed *) + (*! + * Wait for document loaded before starting the execution + *) +*/ +//# sourceMappingURL=chunk-YEACHCAA.min.js.map diff --git a/public/chunk-YEACHCAA.min.js.map b/public/chunk-YEACHCAA.min.js.map new file mode 100644 index 000000000..2e7ae76fd --- /dev/null +++ b/public/chunk-YEACHCAA.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/dayjs/dayjs.min.js", "../../node_modules/@braintree/sanitize-url/dist/index.js", "../../node_modules/dompurify/src/utils.js", "../../node_modules/dompurify/src/tags.js", "../../node_modules/dompurify/src/attrs.js", "../../node_modules/dompurify/src/regexp.js", "../../node_modules/dompurify/src/purify.js", "../../node_modules/ts-dedent/src/index.ts", "../../node_modules/d3-array/src/max.js", "../../node_modules/d3-array/src/min.js", "../../node_modules/d3-array/src/ascending.js", "../../node_modules/d3-array/src/descending.js", "../../node_modules/d3-array/src/bisector.js", "../../node_modules/d3-array/src/number.js", "../../node_modules/d3-array/src/bisect.js", "../../node_modules/internmap/src/index.js", "../../node_modules/d3-array/src/ticks.js", "../../node_modules/d3-array/src/range.js", "../../node_modules/d3-axis/src/identity.js", "../../node_modules/d3-axis/src/axis.js", "../../node_modules/d3-selection/src/selector.js", "../../node_modules/d3-selection/src/selection/select.js", "../../node_modules/d3-selection/src/array.js", "../../node_modules/d3-selection/src/selectorAll.js", "../../node_modules/d3-selection/src/selection/selectAll.js", "../../node_modules/d3-selection/src/matcher.js", "../../node_modules/d3-selection/src/selection/selectChild.js", "../../node_modules/d3-selection/src/selection/selectChildren.js", "../../node_modules/d3-selection/src/selection/filter.js", "../../node_modules/d3-selection/src/selection/sparse.js", "../../node_modules/d3-selection/src/selection/enter.js", "../../node_modules/d3-selection/src/constant.js", "../../node_modules/d3-selection/src/selection/data.js", "../../node_modules/d3-selection/src/selection/exit.js", "../../node_modules/d3-selection/src/selection/join.js", "../../node_modules/d3-selection/src/selection/merge.js", "../../node_modules/d3-selection/src/selection/order.js", "../../node_modules/d3-selection/src/selection/sort.js", "../../node_modules/d3-selection/src/selection/call.js", "../../node_modules/d3-selection/src/selection/nodes.js", "../../node_modules/d3-selection/src/selection/node.js", "../../node_modules/d3-selection/src/selection/size.js", "../../node_modules/d3-selection/src/selection/empty.js", "../../node_modules/d3-selection/src/selection/each.js", "../../node_modules/d3-selection/src/namespaces.js", "../../node_modules/d3-selection/src/namespace.js", "../../node_modules/d3-selection/src/selection/attr.js", "../../node_modules/d3-selection/src/window.js", "../../node_modules/d3-selection/src/selection/style.js", "../../node_modules/d3-selection/src/selection/property.js", "../../node_modules/d3-selection/src/selection/classed.js", "../../node_modules/d3-selection/src/selection/text.js", "../../node_modules/d3-selection/src/selection/html.js", "../../node_modules/d3-selection/src/selection/raise.js", "../../node_modules/d3-selection/src/selection/lower.js", "../../node_modules/d3-selection/src/creator.js", "../../node_modules/d3-selection/src/selection/append.js", "../../node_modules/d3-selection/src/selection/insert.js", "../../node_modules/d3-selection/src/selection/remove.js", "../../node_modules/d3-selection/src/selection/clone.js", "../../node_modules/d3-selection/src/selection/datum.js", "../../node_modules/d3-selection/src/selection/on.js", "../../node_modules/d3-selection/src/selection/dispatch.js", "../../node_modules/d3-selection/src/selection/iterator.js", "../../node_modules/d3-selection/src/selection/index.js", "../../node_modules/d3-selection/src/select.js", "../../node_modules/d3-selection/src/selectAll.js", "../../node_modules/d3-color/src/define.js", "../../node_modules/d3-color/src/color.js", "../../node_modules/d3-color/src/math.js", "../../node_modules/d3-color/src/lab.js", "../../node_modules/d3-interpolate/src/constant.js", "../../node_modules/d3-interpolate/src/color.js", "../../node_modules/d3-interpolate/src/hcl.js", "../../node_modules/d3-interpolate/src/basis.js", "../../node_modules/d3-interpolate/src/basisClosed.js", "../../node_modules/d3-interpolate/src/rgb.js", "../../node_modules/d3-interpolate/src/numberArray.js", "../../node_modules/d3-interpolate/src/array.js", "../../node_modules/d3-interpolate/src/date.js", "../../node_modules/d3-interpolate/src/number.js", "../../node_modules/d3-interpolate/src/object.js", "../../node_modules/d3-interpolate/src/string.js", "../../node_modules/d3-interpolate/src/value.js", "../../node_modules/d3-interpolate/src/round.js", "../../node_modules/d3-interpolate/src/transform/decompose.js", "../../node_modules/d3-interpolate/src/transform/parse.js", "../../node_modules/d3-interpolate/src/transform/index.js", "../../node_modules/d3-scale/src/init.js", "../../node_modules/d3-scale/src/ordinal.js", "../../node_modules/d3-scale/src/band.js", "../../node_modules/d3-scale/src/constant.js", "../../node_modules/d3-scale/src/number.js", "../../node_modules/d3-scale/src/continuous.js", "../../node_modules/d3-format/src/formatDecimal.js", "../../node_modules/d3-format/src/exponent.js", "../../node_modules/d3-format/src/formatGroup.js", "../../node_modules/d3-format/src/formatNumerals.js", "../../node_modules/d3-format/src/formatSpecifier.js", "../../node_modules/d3-format/src/formatTrim.js", "../../node_modules/d3-format/src/formatPrefixAuto.js", "../../node_modules/d3-format/src/formatRounded.js", "../../node_modules/d3-format/src/formatTypes.js", "../../node_modules/d3-format/src/identity.js", "../../node_modules/d3-format/src/locale.js", "../../node_modules/d3-format/src/defaultLocale.js", "../../node_modules/d3-format/src/precisionFixed.js", "../../node_modules/d3-format/src/precisionPrefix.js", "../../node_modules/d3-format/src/precisionRound.js", "../../node_modules/d3-scale/src/tickFormat.js", "../../node_modules/d3-scale/src/linear.js", "../../node_modules/d3-time/src/interval.js", "../../node_modules/d3-time/src/millisecond.js", "../../node_modules/d3-time/src/second.js", "../../node_modules/d3-time/src/minute.js", "../../node_modules/d3-time/src/hour.js", "../../node_modules/d3-time/src/day.js", "../../node_modules/d3-time/src/week.js", "../../node_modules/d3-time/src/month.js", "../../node_modules/d3-time/src/year.js", "../../node_modules/d3-time/src/ticks.js", "../../node_modules/d3-time-format/src/locale.js", "../../node_modules/d3-time-format/src/defaultLocale.js", "../../node_modules/d3-scale/src/nice.js", "../../node_modules/d3-scale/src/time.js", "../../node_modules/d3-scale-chromatic/src/colors.js", "../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js", "../../node_modules/d3-shape/src/constant.js", "../../node_modules/d3-shape/src/math.js", "../../node_modules/d3-path/src/path.js", "../../node_modules/d3-shape/src/path.js", "../../node_modules/d3-shape/src/arc.js", "../../node_modules/d3-shape/src/curve/linear.js", "../../node_modules/d3-shape/src/array.js", "../../node_modules/d3-shape/src/point.js", "../../node_modules/d3-shape/src/line.js", "../../node_modules/d3-shape/src/descending.js", "../../node_modules/d3-shape/src/identity.js", "../../node_modules/d3-shape/src/pie.js", "../../node_modules/d3-shape/src/curve/basis.js", "../../node_modules/d3-shape/src/curve/bump.js", "../../node_modules/d3-shape/src/noop.js", "../../node_modules/d3-shape/src/curve/basisClosed.js", "../../node_modules/d3-shape/src/curve/basisOpen.js", "../../node_modules/d3-shape/src/curve/bundle.js", "../../node_modules/d3-shape/src/curve/cardinal.js", "../../node_modules/d3-shape/src/curve/cardinalClosed.js", "../../node_modules/d3-shape/src/curve/cardinalOpen.js", "../../node_modules/d3-shape/src/curve/catmullRom.js", "../../node_modules/d3-shape/src/curve/catmullRomClosed.js", "../../node_modules/d3-shape/src/curve/catmullRomOpen.js", "../../node_modules/d3-shape/src/curve/linearClosed.js", "../../node_modules/d3-shape/src/curve/monotone.js", "../../node_modules/d3-shape/src/curve/natural.js", "../../node_modules/d3-shape/src/curve/step.js", "../../node_modules/d3-dispatch/src/dispatch.js", "../../node_modules/d3-timer/src/timer.js", "../../node_modules/d3-timer/src/timeout.js", "../../node_modules/d3-transition/src/transition/schedule.js", "../../node_modules/d3-transition/src/interrupt.js", "../../node_modules/d3-transition/src/selection/interrupt.js", "../../node_modules/d3-transition/src/transition/tween.js", "../../node_modules/d3-transition/src/transition/interpolate.js", "../../node_modules/d3-transition/src/transition/attr.js", "../../node_modules/d3-transition/src/transition/attrTween.js", "../../node_modules/d3-transition/src/transition/delay.js", "../../node_modules/d3-transition/src/transition/duration.js", "../../node_modules/d3-transition/src/transition/ease.js", "../../node_modules/d3-transition/src/transition/easeVarying.js", "../../node_modules/d3-transition/src/transition/filter.js", "../../node_modules/d3-transition/src/transition/merge.js", "../../node_modules/d3-transition/src/transition/on.js", "../../node_modules/d3-transition/src/transition/remove.js", "../../node_modules/d3-transition/src/transition/select.js", "../../node_modules/d3-transition/src/transition/selectAll.js", "../../node_modules/d3-transition/src/transition/selection.js", "../../node_modules/d3-transition/src/transition/style.js", "../../node_modules/d3-transition/src/transition/styleTween.js", "../../node_modules/d3-transition/src/transition/text.js", "../../node_modules/d3-transition/src/transition/textTween.js", "../../node_modules/d3-transition/src/transition/transition.js", "../../node_modules/d3-transition/src/transition/end.js", "../../node_modules/d3-transition/src/transition/index.js", "../../node_modules/d3-ease/src/cubic.js", "../../node_modules/d3-transition/src/selection/transition.js", "../../node_modules/d3-transition/src/selection/index.js", "../../node_modules/d3-brush/src/brush.js", "../../node_modules/d3-fetch/src/text.js", "../../node_modules/d3-fetch/src/xml.js", "../../node_modules/d3-zoom/src/transform.js", "../../node_modules/khroma/dist/utils/channel.js", "../../node_modules/khroma/dist/utils/lang.js", "../../node_modules/khroma/dist/utils/unit.js", "../../node_modules/khroma/dist/utils/index.js", "../../node_modules/khroma/dist/constants.js", "../../node_modules/khroma/dist/channels/type.js", "../../node_modules/khroma/dist/channels/index.js", "../../node_modules/khroma/dist/channels/reusable.js", "../../node_modules/khroma/dist/color/hex.js", "../../node_modules/khroma/dist/color/hsl.js", "../../node_modules/khroma/dist/color/keyword.js", "../../node_modules/khroma/dist/color/rgb.js", "../../node_modules/khroma/dist/color/index.js", "../../node_modules/khroma/dist/methods/change.js", "../../node_modules/khroma/dist/methods/rgba.js", "../../node_modules/khroma/dist/methods/channel.js", "../../node_modules/khroma/dist/methods/luminance.js", "../../node_modules/khroma/dist/methods/is_light.js", "../../node_modules/khroma/dist/methods/is_dark.js", "../../node_modules/khroma/dist/methods/adjust_channel.js", "../../node_modules/khroma/dist/methods/lighten.js", "../../node_modules/khroma/dist/methods/darken.js", "../../node_modules/khroma/dist/methods/adjust.js", "../../node_modules/khroma/dist/methods/mix.js", "../../node_modules/khroma/dist/methods/invert.js", "../../node_modules/lodash-es/_freeGlobal.js", "../../node_modules/lodash-es/_root.js", "../../node_modules/lodash-es/_Symbol.js", "../../node_modules/lodash-es/_getRawTag.js", "../../node_modules/lodash-es/_objectToString.js", "../../node_modules/lodash-es/_baseGetTag.js", "../../node_modules/lodash-es/isObject.js", "../../node_modules/lodash-es/isFunction.js", "../../node_modules/lodash-es/_coreJsData.js", "../../node_modules/lodash-es/_isMasked.js", "../../node_modules/lodash-es/_toSource.js", "../../node_modules/lodash-es/_baseIsNative.js", "../../node_modules/lodash-es/_getValue.js", "../../node_modules/lodash-es/_getNative.js", "../../node_modules/lodash-es/_nativeCreate.js", "../../node_modules/lodash-es/_hashClear.js", "../../node_modules/lodash-es/_hashDelete.js", "../../node_modules/lodash-es/_hashGet.js", "../../node_modules/lodash-es/_hashHas.js", "../../node_modules/lodash-es/_hashSet.js", "../../node_modules/lodash-es/_Hash.js", "../../node_modules/lodash-es/_listCacheClear.js", "../../node_modules/lodash-es/eq.js", "../../node_modules/lodash-es/_assocIndexOf.js", "../../node_modules/lodash-es/_listCacheDelete.js", "../../node_modules/lodash-es/_listCacheGet.js", "../../node_modules/lodash-es/_listCacheHas.js", "../../node_modules/lodash-es/_listCacheSet.js", "../../node_modules/lodash-es/_ListCache.js", "../../node_modules/lodash-es/_Map.js", "../../node_modules/lodash-es/_mapCacheClear.js", "../../node_modules/lodash-es/_isKeyable.js", "../../node_modules/lodash-es/_getMapData.js", "../../node_modules/lodash-es/_mapCacheDelete.js", "../../node_modules/lodash-es/_mapCacheGet.js", "../../node_modules/lodash-es/_mapCacheHas.js", "../../node_modules/lodash-es/_mapCacheSet.js", "../../node_modules/lodash-es/_MapCache.js", "../../node_modules/lodash-es/memoize.js", "../../node_modules/lodash-es/_stackClear.js", "../../node_modules/lodash-es/_stackDelete.js", "../../node_modules/lodash-es/_stackGet.js", "../../node_modules/lodash-es/_stackHas.js", "../../node_modules/lodash-es/_stackSet.js", "../../node_modules/lodash-es/_Stack.js", "../../node_modules/lodash-es/_defineProperty.js", "../../node_modules/lodash-es/_baseAssignValue.js", "../../node_modules/lodash-es/_assignMergeValue.js", "../../node_modules/lodash-es/_createBaseFor.js", "../../node_modules/lodash-es/_baseFor.js", "../../node_modules/lodash-es/_cloneBuffer.js", "../../node_modules/lodash-es/_Uint8Array.js", "../../node_modules/lodash-es/_cloneArrayBuffer.js", "../../node_modules/lodash-es/_cloneTypedArray.js", "../../node_modules/lodash-es/_copyArray.js", "../../node_modules/lodash-es/_baseCreate.js", "../../node_modules/lodash-es/_overArg.js", "../../node_modules/lodash-es/_getPrototype.js", "../../node_modules/lodash-es/_isPrototype.js", "../../node_modules/lodash-es/_initCloneObject.js", "../../node_modules/lodash-es/isObjectLike.js", "../../node_modules/lodash-es/_baseIsArguments.js", "../../node_modules/lodash-es/isArguments.js", "../../node_modules/lodash-es/isArray.js", "../../node_modules/lodash-es/isLength.js", "../../node_modules/lodash-es/isArrayLike.js", "../../node_modules/lodash-es/isArrayLikeObject.js", "../../node_modules/lodash-es/stubFalse.js", "../../node_modules/lodash-es/isBuffer.js", "../../node_modules/lodash-es/isPlainObject.js", "../../node_modules/lodash-es/_baseIsTypedArray.js", "../../node_modules/lodash-es/_baseUnary.js", "../../node_modules/lodash-es/_nodeUtil.js", "../../node_modules/lodash-es/isTypedArray.js", "../../node_modules/lodash-es/_safeGet.js", "../../node_modules/lodash-es/_assignValue.js", "../../node_modules/lodash-es/_copyObject.js", "../../node_modules/lodash-es/_baseTimes.js", "../../node_modules/lodash-es/_isIndex.js", "../../node_modules/lodash-es/_arrayLikeKeys.js", "../../node_modules/lodash-es/_nativeKeysIn.js", "../../node_modules/lodash-es/_baseKeysIn.js", "../../node_modules/lodash-es/keysIn.js", "../../node_modules/lodash-es/toPlainObject.js", "../../node_modules/lodash-es/_baseMergeDeep.js", "../../node_modules/lodash-es/_baseMerge.js", "../../node_modules/lodash-es/identity.js", "../../node_modules/lodash-es/_apply.js", "../../node_modules/lodash-es/_overRest.js", "../../node_modules/lodash-es/constant.js", "../../node_modules/lodash-es/_baseSetToString.js", "../../node_modules/lodash-es/_shortOut.js", "../../node_modules/lodash-es/_setToString.js", "../../node_modules/lodash-es/_baseRest.js", "../../node_modules/lodash-es/_isIterateeCall.js", "../../node_modules/lodash-es/_createAssigner.js", "../../node_modules/lodash-es/merge.js", "../../node_modules/lodash-es/_nativeKeys.js", "../../node_modules/lodash-es/_baseKeys.js", "../../node_modules/lodash-es/_DataView.js", "../../node_modules/lodash-es/_Promise.js", "../../node_modules/lodash-es/_Set.js", "../../node_modules/lodash-es/_WeakMap.js", "../../node_modules/lodash-es/_getTag.js", "../../node_modules/lodash-es/isEmpty.js", "../../node_modules/mermaid/dist/mermaid-6dc72991.js", "../../node_modules/stylis/src/Enum.js", "../../node_modules/stylis/src/Utility.js", "../../node_modules/stylis/src/Tokenizer.js", "../../node_modules/stylis/src/Parser.js", "../../node_modules/stylis/src/Serializer.js"], + "sourcesContent": ["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",f=\"month\",h=\"quarter\",c=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t) -1;\n}\n// adapted from https://stackoverflow.com/a/29824550/2601552\nfunction decodeHtmlCharacters(str) {\n return str.replace(htmlEntitiesRegex, function (match, dec) {\n return String.fromCharCode(dec);\n });\n}\nfunction sanitizeUrl(url) {\n var sanitizedUrl = decodeHtmlCharacters(url || \"\")\n .replace(htmlCtrlEntityRegex, \"\")\n .replace(ctrlCharactersRegex, \"\")\n .trim();\n if (!sanitizedUrl) {\n return \"about:blank\";\n }\n if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {\n return sanitizedUrl;\n }\n var urlSchemeParseResults = sanitizedUrl.match(urlSchemeRegex);\n if (!urlSchemeParseResults) {\n return sanitizedUrl;\n }\n var urlScheme = urlSchemeParseResults[0];\n if (invalidProtocolRegex.test(urlScheme)) {\n return \"about:blank\";\n }\n return sanitizedUrl;\n}\nexports.sanitizeUrl = sanitizeUrl;\n", "const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n apply = function (fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\nif (!freeze) {\n freeze = function (x) {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x) {\n return x;\n };\n}\n\nif (!construct) {\n construct = function (Func, args) {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function unapply(func) {\n return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array, transformCaseFunc) {\n transformCaseFunc = transformCaseFunc ?? stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n const newObject = create(null);\n\n for (const [property, value] of entries(object)) {\n newObject[property] = value;\n }\n\n return newObject;\n}\n\n/* This method automatically checks if the prop is function\n * or getter and behaves accordingly. */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n\n return fallbackValue;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n // Object\n entries,\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n isFrozen,\n setPrototypeOf,\n seal,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n};\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n]);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n]);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n]);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n 'mprescripts',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n]);\n\nexport const text = freeze(['#text']);\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'xmlns',\n 'slot',\n]);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n]);\n", "import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\n", "import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n entries,\n freeze,\n arrayForEach,\n arrayPop,\n arrayPush,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringIndexOf,\n stringTrim,\n regExpTest,\n typeErrorCreate,\n lookupGetter,\n} from './utils.js';\n\nconst getGlobal = () => (typeof window === 'undefined' ? null : window);\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, purifyHostElement) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n const DOMPurify = (root) => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = VERSION;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n\n if (!window || !window.document || window.document.nodeType !== 9) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n const originalDocument = window.document;\n const currentScript = originalDocument.currentScript;\n\n let { document } = window;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n let trustedTypesPolicy;\n let emptyHTML = '';\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof entries === 'function' &&\n typeof getParentNode === 'function' &&\n implementation &&\n implementation.createHTMLDocument !== undefined;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(\n Object.create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n {},\n [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n stringToString\n );\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n const isRegexOrFunction = function (testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n ? (PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE)\n : (PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE);\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc =\n PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n ? stringToString\n : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS =\n 'ALLOWED_TAGS' in cfg\n ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR =\n 'ALLOWED_ATTR' in cfg\n ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES =\n 'ALLOWED_NAMESPACES' in cfg\n ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES =\n 'ADD_URI_SAFE_ATTR' in cfg\n ? addToSet(\n clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS =\n 'ADD_DATA_URI_TAGS' in cfg\n ? addToSet(\n clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS =\n 'FORBID_CONTENTS' in cfg\n ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS =\n 'FORBID_TAGS' in cfg\n ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n : {};\n FORBID_ATTR =\n 'FORBID_ATTR' in cfg\n ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || EXPRESSIONS.IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n 'boolean'\n ) {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, [...TAGS.text]);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.'\n );\n }\n\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.'\n );\n }\n\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n currentScript\n );\n }\n\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n const HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'desc',\n 'title',\n 'annotation-xml',\n ]);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, TAGS.svg);\n addToSet(ALL_SVG_TAGS, TAGS.svgFilters);\n addToSet(ALL_SVG_TAGS, TAGS.svgDisallowed);\n\n const ALL_MATHML_TAGS = addToSet({}, TAGS.mathMl);\n addToSet(ALL_MATHML_TAGS, TAGS.mathMlDisallowed);\n\n /**\n *\n *\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return (\n tagName === 'svg' &&\n (parentTagName === 'annotation-xml' ||\n MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n );\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (\n parent.namespaceURI === SVG_NAMESPACE &&\n !HTML_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n if (\n parent.namespaceURI === MATHML_NAMESPACE &&\n !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return (\n !ALL_MATHML_TAGS[tagName] &&\n (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName])\n );\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n ALLOWED_NAMESPACES[element.namespaceURI]\n ) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n const _forceRemove = function (node) {\n arrayPush(DOMPurify.removed, { element: node });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n node.remove();\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function (name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node,\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node,\n });\n }\n\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n const _initDocument = function (dirty) {\n /* Create a HTML document */\n let doc;\n let leadingWhitespace;\n\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n NAMESPACE === HTML_NAMESPACE\n ) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty =\n '' +\n dirty +\n '';\n }\n\n const dirtyPayload = trustedTypesPolicy\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT\n ? emptyHTML\n : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n const body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(\n document.createTextNode(leadingWhitespace),\n body.childNodes[0] || null\n );\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(\n doc,\n WHOLE_DOCUMENT ? 'html' : 'body'\n )[0];\n }\n\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * _createIterator\n *\n * @param {Document} root document/fragment to create iterator for\n * @return {Iterator} iterator instance\n */\n const _createIterator = function (root) {\n return createNodeIterator.call(\n root.ownerDocument || root,\n root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT,\n null,\n false\n );\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function (elm) {\n return (\n elm instanceof HTMLFormElement &&\n (typeof elm.nodeName !== 'string' ||\n typeof elm.textContent !== 'string' ||\n typeof elm.removeChild !== 'function' ||\n !(elm.attributes instanceof NamedNodeMap) ||\n typeof elm.removeAttribute !== 'function' ||\n typeof elm.setAttribute !== 'function' ||\n typeof elm.namespaceURI !== 'string' ||\n typeof elm.insertBefore !== 'function' ||\n typeof elm.hasChildNodes !== 'function')\n );\n };\n\n /**\n * _isNode\n *\n * @param {Node} obj object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function (object) {\n return typeof Node === 'object'\n ? object instanceof Node\n : object &&\n typeof object === 'object' &&\n typeof object.nodeType === 'number' &&\n typeof object.nodeName === 'string';\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function (entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n\n arrayForEach(hooks[entryPoint], (hook) => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function (currentNode) {\n let content;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS,\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (\n currentNode.hasChildNodes() &&\n !_isNode(currentNode.firstElementChild) &&\n (!_isNode(currentNode.content) ||\n !_isNode(currentNode.content.firstElementChild)) &&\n regExpTest(/<[/\\w]/g, currentNode.innerHTML) &&\n regExpTest(/<[/\\w]/g, currentNode.textContent)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)\n )\n return false;\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)\n )\n return false;\n }\n\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n\n for (let i = childCount - 1; i >= 0; --i) {\n parentNode.insertBefore(\n cloneNode(childNodes[i], true),\n getNextSibling(currentNode)\n );\n }\n }\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if (\n (tagName === 'noscript' ||\n tagName === 'noembed' ||\n tagName === 'noframes') &&\n regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n /* Get the element's text content */\n content = currentNode.textContent;\n content = stringReplace(content, MUSTACHE_EXPR, ' ');\n content = stringReplace(content, ERB_EXPR, ' ');\n content = stringReplace(content, TMPLIT_EXPR, ' ');\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function (lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (\n SANITIZE_DOM &&\n (lcName === 'id' || lcName === 'name') &&\n (value in document || value in formElement)\n ) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (\n ALLOW_DATA_ATTR &&\n !FORBID_ATTR[lcName] &&\n regExpTest(DATA_ATTR, lcName)\n ) {\n // This attribute is safe\n } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n // This attribute is safe\n /* Otherwise, check the name is permitted */\n } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n (_basicCustomElementTest(lcTag) &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) &&\n ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) ||\n (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)))) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n (lcName === 'is' &&\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))))\n ) {\n // If user has supplied a regexp or function in CUSTOM_ELEMENT_HANDLING.tagNameCheck, we need to also allow derived custom elements using the same tagName test.\n // Additionally, we need to allow attributes passing the CUSTOM_ELEMENT_HANDLING.attributeNameCheck user has configured, as custom elements can define these at their own discretion.\n } else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n } else if (\n regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n } else if (\n (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n lcTag !== 'script' &&\n stringIndexOf(value, 'data:') === 0 &&\n DATA_URI_TAGS[lcTag]\n ) {\n // This attribute is safe\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n } else if (\n ALLOW_UNKNOWN_PROTOCOLS &&\n !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Check for binary attributes */\n } else if (value) {\n return false;\n } else {\n // Binary attributes are safe at this point\n /* Anything else, presume unsafe, do not add it back */\n }\n\n return true;\n };\n\n /**\n * _basicCustomElementCheck\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n * @param {string} tagName name of the tag of the node to sanitize\n */\n const _basicCustomElementTest = function (tagName) {\n return tagName.indexOf('-') > 0;\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n const _sanitizeAttributes = function (currentNode) {\n let attr;\n let value;\n let lcName;\n let l;\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n const { attributes } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n };\n l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n attr = attributes[l];\n const { name, namespaceURI } = attr;\n value = name === 'value' ? attr.value : stringTrim(attr.value);\n lcName = transformCaseFunc(name);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = stringReplace(value, MUSTACHE_EXPR, ' ');\n value = stringReplace(value, ERB_EXPR, ' ');\n value = stringReplace(value, TMPLIT_EXPR, ' ');\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n\n /* Handle attributes that require Trusted Types */\n if (\n trustedTypesPolicy &&\n typeof trustedTypes === 'object' &&\n typeof trustedTypes.getAttributeType === 'function'\n ) {\n if (namespaceURI) {\n /* Namespaces are not yet supported, see https://bugs.chromium.org/p/chromium/issues/detail?id=1305293 */\n } else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML': {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n\n case 'TrustedScriptURL': {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n\n default: {\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n arrayPop(DOMPurify.removed);\n } catch (_) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function (fragment) {\n let shadowNode;\n const shadowIterator = _createIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n while ((shadowNode = shadowIterator.nextNode())) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} configuration object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg = {}) {\n let body;\n let importedNode;\n let currentNode;\n let returnNode;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate(\n 'root node is forbidden and cannot be sanitized in-place'\n );\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (\n !RETURN_DOM &&\n !SAFE_FOR_TEMPLATES &&\n !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1\n ) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while ((currentNode = nodeIterator.nextNode())) {\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (\n WHOLE_DOCUMENT &&\n ALLOWED_TAGS['!doctype'] &&\n body.ownerDocument &&\n body.ownerDocument.doctype &&\n body.ownerDocument.doctype.name &&\n regExpTest(EXPRESSIONS.DOCTYPE_NAME, body.ownerDocument.doctype.name)\n ) {\n serializedHTML =\n '\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR, ' ');\n serializedHTML = stringReplace(serializedHTML, ERB_EXPR, ' ');\n serializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR, ' ');\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(serializedHTML)\n : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function (cfg) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {string} tag Tag name of containing element.\n * @param {string} attr Attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n * @return {Function} removed(popped) hook\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n *\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n\n return DOMPurify;\n}\n\nexport default createDOMPurify();\n", "export function dedent(\n templ: TemplateStringsArray | string,\n ...values: unknown[]\n): string {\n let strings = Array.from(typeof templ === 'string' ? [templ] : templ);\n\n // 1. Remove trailing whitespace.\n strings[strings.length - 1] = strings[strings.length - 1].replace(\n /\\r?\\n([\\t ]*)$/,\n '',\n );\n\n // 2. Find all line breaks to determine the highest common indentation level.\n const indentLengths = strings.reduce((arr, str) => {\n const matches = str.match(/\\n([\\t ]+|(?!\\s).)/g);\n if (matches) {\n return arr.concat(\n matches.map((match) => match.match(/[\\t ]/g)?.length ?? 0),\n );\n }\n return arr;\n }, []);\n\n // 3. Remove the common indentation from all strings.\n if (indentLengths.length) {\n const pattern = new RegExp(`\\n[\\t ]{${Math.min(...indentLengths)}}`, 'g');\n\n strings = strings.map((str) => str.replace(pattern, '\\n'));\n }\n\n // 4. Remove leading whitespace.\n strings[0] = strings[0].replace(/^\\r?\\n/, '');\n\n // 5. Perform interpolation.\n let string = strings[0];\n\n values.forEach((value, i) => {\n // 5.1 Read current indentation level\n const endentations = string.match(/(?:^|\\n)( *)$/)\n const endentation = endentations ? endentations[1] : ''\n let indentedValue = value\n // 5.2 Add indentation to values with multiline strings\n if (typeof value === 'string' && value.includes('\\n')) {\n indentedValue = String(value)\n .split('\\n')\n .map((str, i) => {\n return i === 0 ? str : `${endentation}${str}`\n })\n .join('\\n');\n }\n\n string += indentedValue + strings[i + 1];\n });\n\n return string;\n}\n\nexport default dedent;\n", "export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n", "export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n", "export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n", "import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can\u2019t do this\n // for a comparator (except for specific, known comparators) because we can\u2019t\n // tell if the comparator is symmetric, and an asymmetric comparator can\u2019t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n", "export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n", "import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n", "export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n", "const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n", "export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n", "export default function(x) {\n return x;\n}\n", "import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n", "function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n", "import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n", "// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don\u2019t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n", "function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n", "import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n", "export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n", "import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n", "export default function(update) {\n return new Array(update.length);\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n", "export default function(x) {\n return function() {\n return x;\n };\n}\n", "import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don\u2019t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn\u2019t worried about \u201Clive\u201D collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don\u2019t; we\u2019d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n", "export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n", "export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n", "export default function() {\n return Array.from(this);\n}\n", "export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n", "export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n", "export default function() {\n return !this.node();\n}\n", "export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n", "export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n", "import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n", "import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n", "export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n", "import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n", "function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n", "function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n", "function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n", "function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n", "function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n", "function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n", "import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n", "import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n", "import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n", "function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n", "function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n", "export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n", "function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n", "import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n", "export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n", "import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n", "import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n", "import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([array(selector)], root);\n}\n", "export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n", "import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n", "export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n", "import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n", "export default x => () => x;\n", "import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", "import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n", "export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", "import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", "export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n", "import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n", "export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n", "export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n", "import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n", "import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n", "import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n", "export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n", "var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n", "import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n", "import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n", "export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n", "import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n", "import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n", "export default function constants(x) {\n return function() {\n return x;\n };\n}\n", "export default function number(x) {\n return +x;\n}\n", "import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n", "export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, \u00B1Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n", "export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n", "export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n", "// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n", "// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n", "import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n", "export default function(x) {\n return x;\n}\n", "import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\u00B5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"\u2212\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer \u201Cvalue\u201D part that can be\n // grouped, and fractional or exponential \u201Csuffix\u201D part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n", "import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n", "import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n", "const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n", "import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n", "import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n", "import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n", "export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n", "import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n", "export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n", "import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n", "export default function(x) {\n return function constant() {\n return x;\n };\n}\n", "export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n", "const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We\u2019re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n", "import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n", "import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 \u2265 r0, da1 \u2265 da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it\u2019s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector\u2019s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it\u2019s a circular sector?\n // Or perhaps it\u2019s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector\u2019s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n", "function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n", "export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n", "export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n", "import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n", "export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n", "export default function(d) {\n return d;\n}\n", "import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n", "export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n", "import pointRadial from \"../pointRadial.js\";\n\nclass Bump {\n constructor(context, x) {\n this._context = context;\n this._x = x;\n }\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n }\n point(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: {\n this._point = 1;\n if (this._line) this._context.lineTo(x, y);\n else this._context.moveTo(x, y);\n break;\n }\n case 1: this._point = 2; // falls through\n default: {\n if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n break;\n }\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nclass BumpRadial {\n constructor(context) {\n this._context = context;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {}\n point(x, y) {\n x = +x, y = +y;\n if (this._point === 0) {\n this._point = 1;\n } else {\n const p0 = pointRadial(this._x0, this._y0);\n const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n const p2 = pointRadial(x, this._y0);\n const p3 = pointRadial(x, y);\n this._context.moveTo(...p0);\n this._context.bezierCurveTo(...p1, ...p2, ...p3);\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nexport function bumpX(context) {\n return new Bump(context, true);\n}\n\nexport function bumpY(context) {\n return new Bump(context, false);\n}\n\nexport function bumpRadial(context) {\n return new BumpRadial(context);\n}\n", "export default function() {}\n", "import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n", "import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n", "import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n", "export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", "import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", "import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", "import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", "import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", "import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", "import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n", "function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic B\u00E9zier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n", "function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n", "function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n", "var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n", "var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we\u2019ve set an alarm, if we haven\u2019t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n", "import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n", "import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n", "import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n", "import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we\u2019re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we\u2019re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n", "import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n", "import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n", "import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n", "import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n", "import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n", "import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n", "import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n", "import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we\u2019re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n", "function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n", "import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n", "import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n", "import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we\u2019re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n", "function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n", "import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n", "function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n", "import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n", "import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we\u2019re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n", "import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n", "export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n", "import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n", "import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n MODE_SPACE = {name: \"space\"},\n MODE_HANDLE = {name: \"handle\"},\n MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n name: \"x\",\n handles: [\"w\", \"e\"].map(type),\n input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: \"y\",\n handles: [\"n\", \"s\"].map(type),\n input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: \"xy\",\n handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n input: function(xy) { return xy == null ? null : number2(xy); },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: \"crosshair\",\n selection: \"move\",\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\n\nvar flipX = {\n e: \"w\",\n w: \"e\",\n nw: \"ne\",\n ne: \"nw\",\n se: \"sw\",\n sw: \"se\"\n};\n\nvar flipY = {\n n: \"s\",\n s: \"n\",\n nw: \"sw\",\n ne: \"se\",\n se: \"ne\",\n sw: \"nw\"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n if (svg.hasAttribute(\"viewBox\")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name \u201C__brush\u201D rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n return brush(X);\n}\n\nexport function brushY() {\n return brush(Y);\n}\n\nexport default function() {\n return brush(XY);\n}\n\nfunction brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n touchable = defaultTouchable,\n keys = true,\n listeners = dispatch(\"start\", \"brush\", \"end\"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property(\"__brush\", initialize)\n .selectAll(\".overlay\")\n .data([type(\"overlay\")]);\n\n overlay.enter().append(\"rect\")\n .attr(\"class\", \"overlay\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"cursor\", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n select(this)\n .attr(\"x\", extent[0][0])\n .attr(\"y\", extent[0][1])\n .attr(\"width\", extent[1][0] - extent[0][0])\n .attr(\"height\", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(\".selection\")\n .data([type(\"selection\")])\n .enter().append(\"rect\")\n .attr(\"class\", \"selection\")\n .attr(\"cursor\", cursors.selection)\n .attr(\"fill\", \"#777\")\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", \"#fff\")\n .attr(\"shape-rendering\", \"crispEdges\");\n\n var handle = group.selectAll(\".handle\")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append(\"rect\")\n .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr(\"fill\", \"none\")\n .attr(\"pointer-events\", \"all\")\n .on(\"mousedown.brush\", started)\n .filter(touchable)\n .on(\"touchstart.brush\", started)\n .on(\"touchmove.brush\", touchmoved)\n .on(\"touchend.brush touchcancel.brush\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n brush.move = function(group, selection, event) {\n if (group.tween) {\n group\n .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n .tween(\"brush\", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && selection1 === null ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 !== null && selection1 !== null ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n interrupt(that);\n state.selection = selection1 === null ? null : selection1;\n redraw.call(that);\n emit.start(event).brush(event).end(event);\n });\n }\n };\n\n brush.clear = function(group, event) {\n brush.move(group, null, event);\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(\".selection\")\n .style(\"display\", null)\n .attr(\"x\", selection[0][0])\n .attr(\"y\", selection[0][1])\n .attr(\"width\", selection[1][0] - selection[0][0])\n .attr(\"height\", selection[1][1] - selection[0][1]);\n\n group.selectAll(\".handle\")\n .style(\"display\", null)\n .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(\".selection,.handle\")\n .style(\"display\", \"none\")\n .attr(\"x\", null)\n .attr(\"y\", null)\n .attr(\"width\", null)\n .attr(\"height\", null);\n }\n }\n\n function emitter(that, args, clean) {\n var emit = that.__brush.emitter;\n return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n }\n\n function Emitter(that, args, clean) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n this.clean = clean;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function(event, mode) {\n if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n else this.emit(\"brush\", event);\n return this;\n },\n brush: function(event, mode) {\n this.emit(\"brush\", event, mode);\n return this;\n },\n end: function(event, mode) {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n return this;\n },\n emit: function(type, event, mode) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new BrushEvent(type, {\n sourceEvent: event,\n target: brush,\n selection: dim.output(this.state.selection),\n mode,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function started(event) {\n if (touchending && !event.touches) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = event.target.__data__.type,\n mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx = 0,\n dy = 0,\n moving,\n shifting = signX && signY && keys && event.shiftKey,\n lockX,\n lockY,\n points = Array.from(event.touches || [event], t => {\n const i = t.identifier;\n t = pointer(t, that);\n t.point0 = t.slice();\n t.identifier = i;\n return t;\n });\n\n interrupt(that);\n var emit = emitter(that, arguments, true).beforestart();\n\n if (type === \"overlay\") {\n if (selection) moving = true;\n const pts = [points[0], points[1] || points[0]];\n state.selection = selection = [[\n w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n ], [\n e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n ]];\n if (points.length > 1) move(event);\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = select(that)\n .attr(\"pointer-events\", \"none\");\n\n var overlay = group.selectAll(\".overlay\")\n .attr(\"cursor\", cursors[type]);\n\n if (event.touches) {\n emit.moved = moved;\n emit.ended = ended;\n } else {\n var view = select(event.view)\n .on(\"mousemove.brush\", moved, true)\n .on(\"mouseup.brush\", ended, true);\n if (keys) view\n .on(\"keydown.brush\", keydowned, true)\n .on(\"keyup.brush\", keyupped, true)\n\n dragDisable(event.view);\n }\n\n redraw.call(that);\n emit.start(event, mode.name);\n\n function moved(event) {\n for (const p of event.changedTouches || [event]) {\n for (const d of points)\n if (d.identifier === p.identifier) d.cur = pointer(p, that);\n }\n if (shifting && !lockX && !lockY && points.length === 1) {\n const point = points[0];\n if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n lockY = true;\n else\n lockX = true;\n }\n for (const point of points)\n if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n moving = true;\n noevent(event);\n move(event);\n }\n\n function move(event) {\n const point = points[0], point0 = point.point0;\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (points[1]) {\n if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n } else {\n if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n }\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush(event, mode.name);\n }\n }\n\n function ended(event) {\n nopropagation(event);\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n } else {\n dragEnable(event.view, moving);\n view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n }\n group.attr(\"pointer-events\", \"all\");\n overlay.attr(\"cursor\", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end(event, mode.name);\n }\n\n function keydowned(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move(event);\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr(\"cursor\", cursors.selection);\n move(event);\n }\n break;\n }\n default: return;\n }\n noevent(event);\n }\n\n function keyupped(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move(event);\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move(event);\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr(\"cursor\", cursors[type]);\n move(event);\n }\n break;\n }\n default: return;\n }\n noevent(event);\n }\n }\n\n function touchmoved(event) {\n emitter(this, arguments).moved(event);\n }\n\n function touchended(event) {\n emitter(this, arguments).ended(event);\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = number2(extent.apply(this, arguments));\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.keyModifiers = function(_) {\n return arguments.length ? (keys = !!_, brush) : keys;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n", "function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n", "import text from \"./text.js\";\n\nfunction parser(type) {\n return (input, init) => text(input, init)\n .then(text => (new DOMParser).parseFromString(text, type));\n}\n\nexport default parser(\"application/xml\");\n\nexport var html = parser(\"text/html\");\n\nexport var svg = parser(\"image/svg+xml\");\n", "export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n", "/* IMPORT */\n/* MAIN */\nconst Channel = {\n /* CLAMP */\n min: {\n r: 0,\n g: 0,\n b: 0,\n s: 0,\n l: 0,\n a: 0\n },\n max: {\n r: 255,\n g: 255,\n b: 255,\n h: 360,\n s: 100,\n l: 100,\n a: 1\n },\n clamp: {\n r: (r) => r >= 255 ? 255 : (r < 0 ? 0 : r),\n g: (g) => g >= 255 ? 255 : (g < 0 ? 0 : g),\n b: (b) => b >= 255 ? 255 : (b < 0 ? 0 : b),\n h: (h) => h % 360,\n s: (s) => s >= 100 ? 100 : (s < 0 ? 0 : s),\n l: (l) => l >= 100 ? 100 : (l < 0 ? 0 : l),\n a: (a) => a >= 1 ? 1 : (a < 0 ? 0 : a)\n },\n /* CONVERSION */\n //SOURCE: https://planetcalc.com/7779\n toLinear: (c) => {\n const n = c / 255;\n return c > .03928 ? Math.pow(((n + .055) / 1.055), 2.4) : n / 12.92;\n },\n //SOURCE: https://gist.github.com/mjackson/5311256\n hue2rgb: (p, q, t) => {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n },\n hsl2rgb: ({ h, s, l }, channel) => {\n if (!s)\n return l * 2.55; // Achromatic\n h /= 360;\n s /= 100;\n l /= 100;\n const q = (l < .5) ? l * (1 + s) : (l + s) - (l * s);\n const p = 2 * l - q;\n switch (channel) {\n case 'r': return Channel.hue2rgb(p, q, h + 1 / 3) * 255;\n case 'g': return Channel.hue2rgb(p, q, h) * 255;\n case 'b': return Channel.hue2rgb(p, q, h - 1 / 3) * 255;\n }\n },\n rgb2hsl: ({ r, g, b }, channel) => {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n if (channel === 'l')\n return l * 100;\n if (max === min)\n return 0; // Achromatic\n const d = max - min;\n const s = (l > .5) ? d / (2 - max - min) : d / (max + min);\n if (channel === 's')\n return s * 100;\n switch (max) {\n case r: return ((g - b) / d + (g < b ? 6 : 0)) * 60;\n case g: return ((b - r) / d + 2) * 60;\n case b: return ((r - g) / d + 4) * 60;\n default: return -1; //TSC: TypeScript is stupid and complains if there isn't this useless default statement\n }\n }\n};\n/* EXPORT */\nexport default Channel;\n", "/* MAIN */\nconst Lang = {\n /* API */\n clamp: (number, lower, upper) => {\n if (lower > upper)\n return Math.min(lower, Math.max(upper, number));\n return Math.min(upper, Math.max(lower, number));\n },\n round: (number) => {\n return Math.round(number * 10000000000) / 10000000000;\n }\n};\n/* EXPORT */\nexport default Lang;\n", "/* MAIN */\nconst Unit = {\n /* API */\n dec2hex: (dec) => {\n const hex = Math.round(dec).toString(16);\n return hex.length > 1 ? hex : `0${hex}`;\n }\n};\n/* EXPORT */\nexport default Unit;\n", "/* IMPORT */\nimport channel from './channel.js';\nimport lang from './lang.js';\nimport unit from './unit.js';\n/* MAIN */\nconst Utils = {\n channel,\n lang,\n unit\n};\n/* EXPORT */\nexport default Utils;\n", "/* IMPORT */\nimport _ from './utils/index.js';\n/* MAIN */\nconst DEC2HEX = {};\nfor (let i = 0; i <= 255; i++)\n DEC2HEX[i] = _.unit.dec2hex(i); // Populating dynamically, striking a balance between code size and performance\nconst TYPE = {\n ALL: 0,\n RGB: 1,\n HSL: 2\n};\n/* EXPORT */\nexport { DEC2HEX, TYPE };\n", "/* IMPORT */\nimport { TYPE } from '../constants.js';\n/* MAIN */\nclass Type {\n constructor() {\n /* VARIABLES */\n this.type = TYPE.ALL;\n }\n /* API */\n get() {\n return this.type;\n }\n set(type) {\n if (this.type && this.type !== type)\n throw new Error('Cannot change both RGB and HSL channels at the same time');\n this.type = type;\n }\n reset() {\n this.type = TYPE.ALL;\n }\n is(type) {\n return this.type === type;\n }\n}\n/* EXPORT */\nexport default Type;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Type from './type.js';\nimport { TYPE } from '../constants.js';\n/* MAIN */\nclass Channels {\n /* CONSTRUCTOR */\n constructor(data, color) {\n this.color = color;\n this.changed = false;\n this.data = data; //TSC\n this.type = new Type();\n }\n /* API */\n set(data, color) {\n this.color = color;\n this.changed = false;\n this.data = data; //TSC\n this.type.type = TYPE.ALL;\n return this;\n }\n /* HELPERS */\n _ensureHSL() {\n const data = this.data;\n const { h, s, l } = data;\n if (h === undefined)\n data.h = _.channel.rgb2hsl(data, 'h');\n if (s === undefined)\n data.s = _.channel.rgb2hsl(data, 's');\n if (l === undefined)\n data.l = _.channel.rgb2hsl(data, 'l');\n }\n _ensureRGB() {\n const data = this.data;\n const { r, g, b } = data;\n if (r === undefined)\n data.r = _.channel.hsl2rgb(data, 'r');\n if (g === undefined)\n data.g = _.channel.hsl2rgb(data, 'g');\n if (b === undefined)\n data.b = _.channel.hsl2rgb(data, 'b');\n }\n /* GETTERS */\n get r() {\n const data = this.data;\n const r = data.r;\n if (!this.type.is(TYPE.HSL) && r !== undefined)\n return r;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'r');\n }\n get g() {\n const data = this.data;\n const g = data.g;\n if (!this.type.is(TYPE.HSL) && g !== undefined)\n return g;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'g');\n }\n get b() {\n const data = this.data;\n const b = data.b;\n if (!this.type.is(TYPE.HSL) && b !== undefined)\n return b;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'b');\n }\n get h() {\n const data = this.data;\n const h = data.h;\n if (!this.type.is(TYPE.RGB) && h !== undefined)\n return h;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 'h');\n }\n get s() {\n const data = this.data;\n const s = data.s;\n if (!this.type.is(TYPE.RGB) && s !== undefined)\n return s;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 's');\n }\n get l() {\n const data = this.data;\n const l = data.l;\n if (!this.type.is(TYPE.RGB) && l !== undefined)\n return l;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 'l');\n }\n get a() {\n return this.data.a;\n }\n /* SETTERS */\n set r(r) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.r = r;\n }\n set g(g) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.g = g;\n }\n set b(b) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.b = b;\n }\n set h(h) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.h = h;\n }\n set s(s) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.s = s;\n }\n set l(l) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.l = l;\n }\n set a(a) {\n this.changed = true;\n this.data.a = a;\n }\n}\n/* EXPORT */\nexport default Channels;\n", "/* IMPORT */\nimport Channels from './/index.js';\n/* MAIN */\nconst channels = new Channels({ r: 0, g: 0, b: 0, a: 0 }, 'transparent');\n/* EXPORT */\nexport default channels;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\nimport { DEC2HEX } from '../constants.js';\n/* MAIN */\nconst Hex = {\n /* VARIABLES */\n re: /^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,\n /* API */\n parse: (color) => {\n if (color.charCodeAt(0) !== 35)\n return; // '#'\n const match = color.match(Hex.re);\n if (!match)\n return;\n const hex = match[1];\n const dec = parseInt(hex, 16);\n const length = hex.length;\n const hasAlpha = length % 4 === 0;\n const isFullLength = length > 4;\n const multiplier = isFullLength ? 1 : 17;\n const bits = isFullLength ? 8 : 4;\n const bitsOffset = hasAlpha ? 0 : -1;\n const mask = isFullLength ? 255 : 15;\n return ChannelsReusable.set({\n r: ((dec >> (bits * (bitsOffset + 3))) & mask) * multiplier,\n g: ((dec >> (bits * (bitsOffset + 2))) & mask) * multiplier,\n b: ((dec >> (bits * (bitsOffset + 1))) & mask) * multiplier,\n a: hasAlpha ? (dec & mask) * multiplier / 255 : 1\n }, color);\n },\n stringify: (channels) => {\n const { r, g, b, a } = channels;\n if (a < 1) { // #RRGGBBAA\n return `#${DEC2HEX[Math.round(r)]}${DEC2HEX[Math.round(g)]}${DEC2HEX[Math.round(b)]}${DEC2HEX[Math.round(a * 255)]}`;\n }\n else { // #RRGGBB\n return `#${DEC2HEX[Math.round(r)]}${DEC2HEX[Math.round(g)]}${DEC2HEX[Math.round(b)]}`;\n }\n }\n};\n/* EXPORT */\nexport default Hex;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\n/* MAIN */\nconst HSL = {\n /* VARIABLES */\n re: /^hsla?\\(\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?(?:deg|grad|rad|turn)?)\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?%)\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?%)(?:\\s*?(?:,|\\/)\\s*?\\+?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?(%)?))?\\s*?\\)$/i,\n hueRe: /^(.+?)(deg|grad|rad|turn)$/i,\n /* HELPERS */\n _hue2deg: (hue) => {\n const match = hue.match(HSL.hueRe);\n if (match) {\n const [, number, unit] = match;\n switch (unit) {\n case 'grad': return _.channel.clamp.h(parseFloat(number) * .9);\n case 'rad': return _.channel.clamp.h(parseFloat(number) * 180 / Math.PI);\n case 'turn': return _.channel.clamp.h(parseFloat(number) * 360);\n }\n }\n return _.channel.clamp.h(parseFloat(hue));\n },\n /* API */\n parse: (color) => {\n const charCode = color.charCodeAt(0);\n if (charCode !== 104 && charCode !== 72)\n return; // 'h'/'H'\n const match = color.match(HSL.re);\n if (!match)\n return;\n const [, h, s, l, a, isAlphaPercentage] = match;\n return ChannelsReusable.set({\n h: HSL._hue2deg(h),\n s: _.channel.clamp.s(parseFloat(s)),\n l: _.channel.clamp.l(parseFloat(l)),\n a: a ? _.channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1\n }, color);\n },\n stringify: (channels) => {\n const { h, s, l, a } = channels;\n if (a < 1) { // HSLA\n return `hsla(${_.lang.round(h)}, ${_.lang.round(s)}%, ${_.lang.round(l)}%, ${a})`;\n }\n else { // HSL\n return `hsl(${_.lang.round(h)}, ${_.lang.round(s)}%, ${_.lang.round(l)}%)`;\n }\n }\n};\n/* EXPORT */\nexport default HSL;\n", "/* IMPORT */\nimport Hex from './hex.js';\n/* MAIN */\nconst Keyword = {\n /* VARIABLES */\n colors: {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyanaqua: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n transparent: '#00000000',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32'\n },\n /* API */\n parse: (color) => {\n color = color.toLowerCase();\n const hex = Keyword.colors[color];\n if (!hex)\n return;\n return Hex.parse(hex);\n },\n stringify: (channels) => {\n const hex = Hex.stringify(channels);\n for (const name in Keyword.colors) {\n if (Keyword.colors[name] === hex)\n return name;\n }\n return;\n }\n};\n/* EXPORT */\nexport default Keyword;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\n/* MAIN */\nconst RGB = {\n /* VARIABLES */\n re: /^rgba?\\(\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))(?:\\s*?(?:,|\\/)\\s*?\\+?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?)))?\\s*?\\)$/i,\n /* API */\n parse: (color) => {\n const charCode = color.charCodeAt(0);\n if (charCode !== 114 && charCode !== 82)\n return; // 'r'/'R'\n const match = color.match(RGB.re);\n if (!match)\n return;\n const [, r, isRedPercentage, g, isGreenPercentage, b, isBluePercentage, a, isAlphaPercentage] = match;\n return ChannelsReusable.set({\n r: _.channel.clamp.r(isRedPercentage ? parseFloat(r) * 2.55 : parseFloat(r)),\n g: _.channel.clamp.g(isGreenPercentage ? parseFloat(g) * 2.55 : parseFloat(g)),\n b: _.channel.clamp.b(isBluePercentage ? parseFloat(b) * 2.55 : parseFloat(b)),\n a: a ? _.channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1\n }, color);\n },\n stringify: (channels) => {\n const { r, g, b, a } = channels;\n if (a < 1) { // RGBA\n return `rgba(${_.lang.round(r)}, ${_.lang.round(g)}, ${_.lang.round(b)}, ${_.lang.round(a)})`;\n }\n else { // RGB\n return `rgb(${_.lang.round(r)}, ${_.lang.round(g)}, ${_.lang.round(b)})`;\n }\n }\n};\n/* EXPORT */\nexport default RGB;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Hex from './hex.js';\nimport HSL from './hsl.js';\nimport Keyword from './keyword.js';\nimport RGB from './rgb.js';\nimport { TYPE } from '../constants.js';\n/* MAIN */\nconst Color = {\n /* VARIABLES */\n format: {\n keyword: Keyword,\n hex: Hex,\n rgb: RGB,\n rgba: RGB,\n hsl: HSL,\n hsla: HSL\n },\n /* API */\n parse: (color) => {\n if (typeof color !== 'string')\n return color;\n const channels = Hex.parse(color) || RGB.parse(color) || HSL.parse(color) || Keyword.parse(color); // Color providers ordered with performance in mind\n if (channels)\n return channels;\n throw new Error(`Unsupported color format: \"${color}\"`);\n },\n stringify: (channels) => {\n // SASS returns a keyword if possible, but we avoid doing that as it's slower and doesn't really add any value\n if (!channels.changed && channels.color)\n return channels.color;\n if (channels.type.is(TYPE.HSL) || channels.data.r === undefined) {\n return HSL.stringify(channels);\n }\n else if (channels.a < 1 || !Number.isInteger(channels.r) || !Number.isInteger(channels.g) || !Number.isInteger(channels.b)) {\n return RGB.stringify(channels);\n }\n else {\n return Hex.stringify(channels);\n }\n }\n};\n/* EXPORT */\nexport default Color;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst change = (color, channels) => {\n const ch = Color.parse(color);\n for (const c in channels) {\n ch[c] = _.channel.clamp[c](channels[c]);\n }\n return Color.stringify(ch);\n};\n/* EXPORT */\nexport default change;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\nimport Color from '../color/index.js';\nimport change from './change.js';\n/* MAIN */\nconst rgba = (r, g, b = 0, a = 1) => {\n if (typeof r !== 'number')\n return change(r, { a: g });\n const channels = ChannelsReusable.set({\n r: _.channel.clamp.r(r),\n g: _.channel.clamp.g(g),\n b: _.channel.clamp.b(b),\n a: _.channel.clamp.a(a)\n });\n return Color.stringify(channels);\n};\n/* EXPORT */\nexport default rgba;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst channel = (color, channel) => {\n return _.lang.round(Color.parse(color)[channel]);\n};\n/* EXPORT */\nexport default channel;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\n//SOURCE: https://planetcalc.com/7779\nconst luminance = (color) => {\n const { r, g, b } = Color.parse(color);\n const luminance = .2126 * _.channel.toLinear(r) + .7152 * _.channel.toLinear(g) + .0722 * _.channel.toLinear(b);\n return _.lang.round(luminance);\n};\n/* EXPORT */\nexport default luminance;\n", "/* IMPORT */\nimport luminance from './luminance.js';\n/* MAIN */\nconst isLight = (color) => {\n return luminance(color) >= .5;\n};\n/* EXPORT */\nexport default isLight;\n", "/* IMPORT */\nimport isLight from './is_light.js';\n/* MAIN */\nconst isDark = (color) => {\n return !isLight(color);\n};\n/* EXPORT */\nexport default isDark;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst adjustChannel = (color, channel, amount) => {\n const channels = Color.parse(color);\n const amountCurrent = channels[channel];\n const amountNext = _.channel.clamp[channel](amountCurrent + amount);\n if (amountCurrent !== amountNext)\n channels[channel] = amountNext;\n return Color.stringify(channels);\n};\n/* EXPORT */\nexport default adjustChannel;\n", "/* IMPORT */\nimport adjustChannel from './adjust_channel.js';\n/* MAIN */\nconst lighten = (color, amount) => {\n return adjustChannel(color, 'l', amount);\n};\n/* EXPORT */\nexport default lighten;\n", "/* IMPORT */\nimport adjustChannel from './adjust_channel.js';\n/* MAIN */\nconst darken = (color, amount) => {\n return adjustChannel(color, 'l', -amount);\n};\n/* EXPORT */\nexport default darken;\n", "/* IMPORT */\nimport Color from '../color/index.js';\nimport change from './change.js';\n/* MAIN */\nconst adjust = (color, channels) => {\n const ch = Color.parse(color);\n const changes = {};\n for (const c in channels) {\n if (!channels[c])\n continue;\n changes[c] = ch[c] + channels[c];\n }\n return change(color, changes);\n};\n/* EXPORT */\nexport default adjust;\n", "/* IMPORT */\nimport Color from '../color/index.js';\nimport rgba from './rgba.js';\n/* MAIN */\n//SOURCE: https://github.com/sass/dart-sass/blob/7457d2e9e7e623d9844ffd037a070cf32d39c348/lib/src/functions/color.dart#L718-L756\nconst mix = (color1, color2, weight = 50) => {\n const { r: r1, g: g1, b: b1, a: a1 } = Color.parse(color1);\n const { r: r2, g: g2, b: b2, a: a2 } = Color.parse(color2);\n const weightScale = weight / 100;\n const weightNormalized = (weightScale * 2) - 1;\n const alphaDelta = a1 - a2;\n const weight1combined = ((weightNormalized * alphaDelta) === -1) ? weightNormalized : (weightNormalized + alphaDelta) / (1 + weightNormalized * alphaDelta);\n const weight1 = (weight1combined + 1) / 2;\n const weight2 = 1 - weight1;\n const r = (r1 * weight1) + (r2 * weight2);\n const g = (g1 * weight1) + (g2 * weight2);\n const b = (b1 * weight1) + (b2 * weight2);\n const a = (a1 * weightScale) + (a2 * (1 - weightScale));\n return rgba(r, g, b, a);\n};\n/* EXPORT */\nexport default mix;\n", "/* IMPORT */\nimport Color from '../color/index.js';\nimport mix from './mix.js';\n/* MAIN */\nconst invert = (color, weight = 100) => {\n const inverse = Color.parse(color);\n inverse.r = 255 - inverse.r;\n inverse.g = 255 - inverse.g;\n inverse.b = 255 - inverse.b;\n return mix(inverse, color, weight);\n};\n/* EXPORT */\nexport default invert;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n", "import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n", "import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n", "import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n", "import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n", "import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n", "import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n", "import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n", "import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n", "import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n", "import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n", "import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n", "import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n", "import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n", "import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n", "import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n", "import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n", "import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n", "import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n", "import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n", "import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n", "import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n", "/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n", "import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n", "import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n", "import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n", "import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n", "import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n", "import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n", "import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n", "import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n", "import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n", "import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n", "import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n", "import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n", "import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n", "import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n", "/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n", "import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n", "import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n", "import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n", "import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n", "import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n", "import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n", "import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n", "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n", "/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n", "import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n", "/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n", "import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n", "/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n", "import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n", "import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n", "import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n", "import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n", "import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n", "import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n", "import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n", "import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n", "import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n", "import { dedent } from \"ts-dedent\";\nimport dayjs from \"dayjs\";\nimport { sanitizeUrl } from \"@braintree/sanitize-url\";\nimport { select, curveBasis, curveBasisClosed, curveBasisOpen, curveBumpX, curveBumpY, curveBundle, curveCardinalClosed, curveCardinalOpen, curveCardinal, curveCatmullRomClosed, curveCatmullRomOpen, curveCatmullRom, curveLinear, curveLinearClosed, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore } from \"d3\";\nimport DOMPurify from \"dompurify\";\nimport { adjust, invert, darken, lighten, isDark, rgba } from \"khroma\";\nimport memoize from \"lodash-es/memoize.js\";\nimport merge$1 from \"lodash-es/merge.js\";\nimport { serialize, compile, stringify } from \"stylis\";\nimport isEmpty from \"lodash-es/isEmpty.js\";\nconst LEVELS = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5\n};\nconst log$1 = {\n trace: (..._args) => {\n },\n debug: (..._args) => {\n },\n info: (..._args) => {\n },\n warn: (..._args) => {\n },\n error: (..._args) => {\n },\n fatal: (..._args) => {\n }\n};\nconst setLogLevel$1 = function(level = \"fatal\") {\n let numericLevel = LEVELS.fatal;\n if (typeof level === \"string\") {\n level = level.toLowerCase();\n if (level in LEVELS) {\n numericLevel = LEVELS[level];\n }\n } else if (typeof level === \"number\") {\n numericLevel = level;\n }\n log$1.trace = () => {\n };\n log$1.debug = () => {\n };\n log$1.info = () => {\n };\n log$1.warn = () => {\n };\n log$1.error = () => {\n };\n log$1.fatal = () => {\n };\n if (numericLevel <= LEVELS.fatal) {\n log$1.fatal = console.error ? console.error.bind(console, format(\"FATAL\"), \"color: orange\") : console.log.bind(console, \"\\x1B[35m\", format(\"FATAL\"));\n }\n if (numericLevel <= LEVELS.error) {\n log$1.error = console.error ? console.error.bind(console, format(\"ERROR\"), \"color: orange\") : console.log.bind(console, \"\\x1B[31m\", format(\"ERROR\"));\n }\n if (numericLevel <= LEVELS.warn) {\n log$1.warn = console.warn ? console.warn.bind(console, format(\"WARN\"), \"color: orange\") : console.log.bind(console, `\\x1B[33m`, format(\"WARN\"));\n }\n if (numericLevel <= LEVELS.info) {\n log$1.info = console.info ? console.info.bind(console, format(\"INFO\"), \"color: lightblue\") : console.log.bind(console, \"\\x1B[34m\", format(\"INFO\"));\n }\n if (numericLevel <= LEVELS.debug) {\n log$1.debug = console.debug ? console.debug.bind(console, format(\"DEBUG\"), \"color: lightgreen\") : console.log.bind(console, \"\\x1B[32m\", format(\"DEBUG\"));\n }\n if (numericLevel <= LEVELS.trace) {\n log$1.trace = console.debug ? console.debug.bind(console, format(\"TRACE\"), \"color: lightgreen\") : console.log.bind(console, \"\\x1B[32m\", format(\"TRACE\"));\n }\n};\nconst format = (level) => {\n const time = dayjs().format(\"ss.SSS\");\n return `%c${time} : ${level} : `;\n};\nconst lineBreakRegex = //gi;\nconst getRows = (s) => {\n if (!s) {\n return [\"\"];\n }\n const str2 = breakToPlaceholder(s).replace(/\\\\n/g, \"#br#\");\n return str2.split(\"#br#\");\n};\nconst setupDompurifyHooksIfNotSetup = (() => {\n let setup = false;\n return () => {\n if (!setup) {\n setupDompurifyHooks();\n setup = true;\n }\n };\n})();\nfunction setupDompurifyHooks() {\n const TEMPORARY_ATTRIBUTE = \"data-temp-href-target\";\n DOMPurify.addHook(\"beforeSanitizeAttributes\", (node) => {\n if (node.tagName === \"A\" && node.hasAttribute(\"target\")) {\n node.setAttribute(TEMPORARY_ATTRIBUTE, node.getAttribute(\"target\") || \"\");\n }\n });\n DOMPurify.addHook(\"afterSanitizeAttributes\", (node) => {\n if (node.tagName === \"A\" && node.hasAttribute(TEMPORARY_ATTRIBUTE)) {\n node.setAttribute(\"target\", node.getAttribute(TEMPORARY_ATTRIBUTE) || \"\");\n node.removeAttribute(TEMPORARY_ATTRIBUTE);\n if (node.getAttribute(\"target\") === \"_blank\") {\n node.setAttribute(\"rel\", \"noopener\");\n }\n }\n });\n}\nconst removeScript = (txt) => {\n setupDompurifyHooksIfNotSetup();\n const sanitizedText = DOMPurify.sanitize(txt);\n return sanitizedText;\n};\nconst sanitizeMore = (text, config2) => {\n var _a;\n if (((_a = config2.flowchart) == null ? void 0 : _a.htmlLabels) !== false) {\n const level = config2.securityLevel;\n if (level === \"antiscript\" || level === \"strict\") {\n text = removeScript(text);\n } else if (level !== \"loose\") {\n text = breakToPlaceholder(text);\n text = text.replace(//g, \">\");\n text = text.replace(/=/g, \"=\");\n text = placeholderToBreak(text);\n }\n }\n return text;\n};\nconst sanitizeText$2 = (text, config2) => {\n if (!text) {\n return text;\n }\n if (config2.dompurifyConfig) {\n text = DOMPurify.sanitize(sanitizeMore(text, config2), config2.dompurifyConfig).toString();\n } else {\n text = DOMPurify.sanitize(sanitizeMore(text, config2), {\n FORBID_TAGS: [\"style\"]\n }).toString();\n }\n return text;\n};\nconst sanitizeTextOrArray = (a, config2) => {\n if (typeof a === \"string\") {\n return sanitizeText$2(a, config2);\n }\n return a.flat().map((x) => sanitizeText$2(x, config2));\n};\nconst hasBreaks = (text) => {\n return lineBreakRegex.test(text);\n};\nconst splitBreaks = (text) => {\n return text.split(lineBreakRegex);\n};\nconst placeholderToBreak = (s) => {\n return s.replace(/#br#/g, \"
\");\n};\nconst breakToPlaceholder = (s) => {\n return s.replace(lineBreakRegex, \"#br#\");\n};\nconst getUrl = (useAbsolute) => {\n let url = \"\";\n if (useAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replaceAll(/\\(/g, \"\\\\(\");\n url = url.replaceAll(/\\)/g, \"\\\\)\");\n }\n return url;\n};\nconst evaluate = (val) => val === false || [\"false\", \"null\", \"0\"].includes(String(val).trim().toLowerCase()) ? false : true;\nconst getMax = function(...values) {\n const newValues = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.max(...newValues);\n};\nconst getMin = function(...values) {\n const newValues = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.min(...newValues);\n};\nconst parseGenericTypes = function(input) {\n const inputSets = input.split(/(,)/);\n const output = [];\n for (let i = 0; i < inputSets.length; i++) {\n let thisSet = inputSets[i];\n if (thisSet === \",\" && i > 0 && i + 1 < inputSets.length) {\n const previousSet = inputSets[i - 1];\n const nextSet = inputSets[i + 1];\n if (shouldCombineSets(previousSet, nextSet)) {\n thisSet = previousSet + \",\" + nextSet;\n i++;\n output.pop();\n }\n }\n output.push(processSet(thisSet));\n }\n return output.join(\"\");\n};\nconst countOccurrence = (string, substring) => {\n return Math.max(0, string.split(substring).length - 1);\n};\nconst shouldCombineSets = (previousSet, nextSet) => {\n const prevCount = countOccurrence(previousSet, \"~\");\n const nextCount = countOccurrence(nextSet, \"~\");\n return prevCount === 1 && nextCount === 1;\n};\nconst processSet = (input) => {\n const tildeCount = countOccurrence(input, \"~\");\n let hasStartingTilde = false;\n if (tildeCount <= 1) {\n return input;\n }\n if (tildeCount % 2 !== 0 && input.startsWith(\"~\")) {\n input = input.substring(1);\n hasStartingTilde = true;\n }\n const chars = [...input];\n let first = chars.indexOf(\"~\");\n let last = chars.lastIndexOf(\"~\");\n while (first !== -1 && last !== -1 && first !== last) {\n chars[first] = \"<\";\n chars[last] = \">\";\n first = chars.indexOf(\"~\");\n last = chars.lastIndexOf(\"~\");\n }\n if (hasStartingTilde) {\n chars.unshift(\"~\");\n }\n return chars.join(\"\");\n};\nconst isMathMLSupported = () => window.MathMLElement !== void 0;\nconst katexRegex = /\\$\\$(.*)\\$\\$/g;\nconst hasKatex = (text) => {\n var _a;\n return (((_a = text.match(katexRegex)) == null ? void 0 : _a.length) ?? 0) > 0;\n};\nconst calculateMathMLDimensions = async (text, config2) => {\n text = await renderKatex(text, config2);\n const divElem = document.createElement(\"div\");\n divElem.innerHTML = text;\n divElem.id = \"katex-temp\";\n divElem.style.visibility = \"hidden\";\n divElem.style.position = \"absolute\";\n divElem.style.top = \"0\";\n const body = document.querySelector(\"body\");\n body == null ? void 0 : body.insertAdjacentElement(\"beforeend\", divElem);\n const dim = { width: divElem.clientWidth, height: divElem.clientHeight };\n divElem.remove();\n return dim;\n};\nconst renderKatex = async (text, config2) => {\n if (!hasKatex(text)) {\n return text;\n }\n if (!isMathMLSupported() && !config2.legacyMathML) {\n return text.replace(katexRegex, \"MathML is unsupported in this environment.\");\n }\n const { default: katex } = await import(\"katex\");\n return text.split(lineBreakRegex).map(\n (line) => hasKatex(line) ? `\n
\n ${line}\n
\n ` : `
${line}
`\n ).join(\"\").replace(\n katexRegex,\n (_, c) => katex.renderToString(c, {\n throwOnError: true,\n displayMode: true,\n output: isMathMLSupported() ? \"mathml\" : \"htmlAndMathml\"\n }).replace(/\\n/g, \" \").replace(//g, \"\")\n );\n};\nconst common$1 = {\n getRows,\n sanitizeText: sanitizeText$2,\n sanitizeTextOrArray,\n hasBreaks,\n splitBreaks,\n lineBreakRegex,\n removeScript,\n getUrl,\n evaluate,\n getMax,\n getMin\n};\nconst mkBorder = (col, darkMode) => darkMode ? adjust(col, { s: -40, l: 10 }) : adjust(col, { s: -40, l: -10 });\nconst oldAttributeBackgroundColorOdd = \"#ffffff\";\nconst oldAttributeBackgroundColorEven = \"#f2f2f2\";\nlet Theme$4 = class Theme {\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#fff4dd\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"#333\";\n this.THEME_COLOR_LIMIT = 12;\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n }\n updateColors() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;\n this.primaryTextColor = this.primaryTextColor || (this.darkMode ? \"#eee\" : \"#333\");\n this.secondaryColor = this.secondaryColor || adjust(this.primaryColor, { h: -120 });\n this.tertiaryColor = this.tertiaryColor || adjust(this.primaryColor, { h: 180, l: 5 });\n this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);\n this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);\n this.noteBkgColor = this.noteBkgColor || \"#fff5ad\";\n this.noteTextColor = this.noteTextColor || \"#333\";\n this.secondaryTextColor = this.secondaryTextColor || invert(this.secondaryColor);\n this.tertiaryTextColor = this.tertiaryTextColor || invert(this.tertiaryColor);\n this.lineColor = this.lineColor || invert(this.background);\n this.arrowheadColor = this.arrowheadColor || invert(this.background);\n this.textColor = this.textColor || this.primaryTextColor;\n this.border2 = this.border2 || this.tertiaryBorderColor;\n this.nodeBkg = this.nodeBkg || this.primaryColor;\n this.mainBkg = this.mainBkg || this.primaryColor;\n this.nodeBorder = this.nodeBorder || this.primaryBorderColor;\n this.clusterBkg = this.clusterBkg || this.tertiaryColor;\n this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;\n this.defaultLinkColor = this.defaultLinkColor || this.lineColor;\n this.titleColor = this.titleColor || this.tertiaryTextColor;\n this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;\n this.actorBorder = this.actorBorder || this.primaryBorderColor;\n this.actorBkg = this.actorBkg || this.mainBkg;\n this.actorTextColor = this.actorTextColor || this.primaryTextColor;\n this.actorLineColor = this.actorLineColor || \"grey\";\n this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;\n this.signalColor = this.signalColor || this.textColor;\n this.signalTextColor = this.signalTextColor || this.textColor;\n this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;\n this.labelTextColor = this.labelTextColor || this.actorTextColor;\n this.loopTextColor = this.loopTextColor || this.actorTextColor;\n this.activationBorderColor = this.activationBorderColor || darken(this.secondaryColor, 10);\n this.activationBkgColor = this.activationBkgColor || this.secondaryColor;\n this.sequenceNumberColor = this.sequenceNumberColor || invert(this.lineColor);\n this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;\n this.altSectionBkgColor = this.altSectionBkgColor || \"white\";\n this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;\n this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;\n this.excludeBkgColor = this.excludeBkgColor || \"#eeeeee\";\n this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;\n this.taskBkgColor = this.taskBkgColor || this.primaryColor;\n this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;\n this.activeTaskBkgColor = this.activeTaskBkgColor || lighten(this.primaryColor, 23);\n this.gridColor = this.gridColor || \"lightgrey\";\n this.doneTaskBkgColor = this.doneTaskBkgColor || \"lightgrey\";\n this.doneTaskBorderColor = this.doneTaskBorderColor || \"grey\";\n this.critBorderColor = this.critBorderColor || \"#ff8888\";\n this.critBkgColor = this.critBkgColor || \"red\";\n this.todayLineColor = this.todayLineColor || \"red\";\n this.taskTextColor = this.taskTextColor || this.textColor;\n this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;\n this.taskTextLightColor = this.taskTextLightColor || this.textColor;\n this.taskTextColor = this.taskTextColor || this.primaryTextColor;\n this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;\n this.taskTextClickableColor = this.taskTextClickableColor || \"#003163\";\n this.personBorder = this.personBorder || this.primaryBorderColor;\n this.personBkg = this.personBkg || this.mainBkg;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || this.tertiaryColor;\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.nodeBorder;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.specialStateColor = this.lineColor;\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210, l: 150 });\n this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 });\n if (this.darkMode) {\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken(this[\"cScale\" + i], 75);\n }\n } else {\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken(this[\"cScale\" + i], 25);\n }\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || invert(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n if (this.darkMode) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || lighten(this[\"cScale\" + i], 10);\n } else {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken(this[\"cScale\" + i], 10);\n }\n }\n this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n const multiplier = this.darkMode ? -4 : -1;\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i * 3) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i * 3) });\n }\n this.classText = this.classText || this.textColor;\n this.fillType0 = this.fillType0 || this.primaryColor;\n this.fillType1 = this.fillType1 || this.secondaryColor;\n this.fillType2 = this.fillType2 || adjust(this.primaryColor, { h: 64 });\n this.fillType3 = this.fillType3 || adjust(this.secondaryColor, { h: 64 });\n this.fillType4 = this.fillType4 || adjust(this.primaryColor, { h: -64 });\n this.fillType5 = this.fillType5 || adjust(this.secondaryColor, { h: -64 });\n this.fillType6 = this.fillType6 || adjust(this.primaryColor, { h: 128 });\n this.fillType7 = this.fillType7 || adjust(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || this.tertiaryColor;\n this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -10 });\n this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -10 });\n this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -10 });\n this.pie7 = this.pie7 || adjust(this.primaryColor, { h: 60, l: -10 });\n this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 });\n this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 });\n this.pie10 = this.pie10 || adjust(this.primaryColor, { h: 60, l: -20 });\n this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -20 });\n this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -10 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.xyChart = {\n backgroundColor: ((_a = this.xyChart) == null ? void 0 : _a.backgroundColor) || this.background,\n titleColor: ((_b = this.xyChart) == null ? void 0 : _b.titleColor) || this.primaryTextColor,\n xAxisTitleColor: ((_c = this.xyChart) == null ? void 0 : _c.xAxisTitleColor) || this.primaryTextColor,\n xAxisLabelColor: ((_d = this.xyChart) == null ? void 0 : _d.xAxisLabelColor) || this.primaryTextColor,\n xAxisTickColor: ((_e = this.xyChart) == null ? void 0 : _e.xAxisTickColor) || this.primaryTextColor,\n xAxisLineColor: ((_f = this.xyChart) == null ? void 0 : _f.xAxisLineColor) || this.primaryTextColor,\n yAxisTitleColor: ((_g = this.xyChart) == null ? void 0 : _g.yAxisTitleColor) || this.primaryTextColor,\n yAxisLabelColor: ((_h = this.xyChart) == null ? void 0 : _h.yAxisLabelColor) || this.primaryTextColor,\n yAxisTickColor: ((_i = this.xyChart) == null ? void 0 : _i.yAxisTickColor) || this.primaryTextColor,\n yAxisLineColor: ((_j = this.xyChart) == null ? void 0 : _j.yAxisLineColor) || this.primaryTextColor,\n plotColorPalette: ((_k = this.xyChart) == null ? void 0 : _k.plotColorPalette) || \"#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0\"\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || adjust(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = lighten(this.git0, 25);\n this.git1 = lighten(this.git1, 25);\n this.git2 = lighten(this.git2, 25);\n this.git3 = lighten(this.git3, 25);\n this.git4 = lighten(this.git4, 25);\n this.git5 = lighten(this.git5, 25);\n this.git6 = lighten(this.git6, 25);\n this.git7 = lighten(this.git7, 25);\n } else {\n this.git0 = darken(this.git0, 25);\n this.git1 = darken(this.git1, 25);\n this.git2 = darken(this.git2, 25);\n this.git3 = darken(this.git3, 25);\n this.git4 = darken(this.git4, 25);\n this.git5 = darken(this.git5, 25);\n this.git6 = darken(this.git6, 25);\n this.git7 = darken(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || invert(this.git0);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n this.branchLabelColor = this.branchLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nconst getThemeVariables$4 = (userOverrides) => {\n const theme2 = new Theme$4();\n theme2.calculate(userOverrides);\n return theme2;\n};\nlet Theme$3 = class Theme2 {\n constructor() {\n this.background = \"#333\";\n this.primaryColor = \"#1f2020\";\n this.secondaryColor = lighten(this.primaryColor, 16);\n this.tertiaryColor = adjust(this.primaryColor, { h: -160 });\n this.primaryBorderColor = invert(this.background);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert(this.primaryColor);\n this.secondaryTextColor = invert(this.secondaryColor);\n this.tertiaryTextColor = invert(this.tertiaryColor);\n this.lineColor = invert(this.background);\n this.textColor = invert(this.background);\n this.mainBkg = \"#1f2020\";\n this.secondBkg = \"calculated\";\n this.mainContrastColor = \"lightgrey\";\n this.darkTextColor = lighten(invert(\"#323D47\"), 10);\n this.lineColor = \"calculated\";\n this.border1 = \"#81B1DB\";\n this.border2 = rgba(255, 255, 255, 0.25);\n this.arrowheadColor = \"calculated\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.labelBackground = \"#181818\";\n this.textColor = \"#ccc\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"#F9FFFE\";\n this.edgeLabelBackground = \"calculated\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"calculated\";\n this.actorLineColor = \"calculated\";\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"calculated\";\n this.activationBkgColor = \"calculated\";\n this.sequenceNumberColor = \"black\";\n this.sectionBkgColor = darken(\"#EAE8D9\", 30);\n this.altSectionBkgColor = \"calculated\";\n this.sectionBkgColor2 = \"#EAE8D9\";\n this.excludeBkgColor = darken(this.sectionBkgColor, 10);\n this.taskBorderColor = rgba(255, 255, 255, 70);\n this.taskBkgColor = \"calculated\";\n this.taskTextColor = \"calculated\";\n this.taskTextLightColor = \"calculated\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = rgba(255, 255, 255, 50);\n this.activeTaskBkgColor = \"#81B1DB\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#E83737\";\n this.critBkgColor = \"#E83737\";\n this.taskTextDarkColor = \"calculated\";\n this.todayLineColor = \"#DB5757\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.labelColor = \"calculated\";\n this.errorBkgColor = \"#a44141\";\n this.errorTextColor = \"#ddd\";\n }\n updateColors() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;\n this.secondBkg = lighten(this.mainBkg, 16);\n this.lineColor = this.mainContrastColor;\n this.arrowheadColor = this.mainContrastColor;\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.edgeLabelBackground = lighten(this.labelBackground, 25);\n this.actorBorder = this.border1;\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.mainContrastColor;\n this.actorLineColor = this.mainContrastColor;\n this.signalColor = this.mainContrastColor;\n this.signalTextColor = this.mainContrastColor;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.mainContrastColor;\n this.loopTextColor = this.mainContrastColor;\n this.noteBorderColor = this.secondaryBorderColor;\n this.noteBkgColor = this.secondBkg;\n this.noteTextColor = this.secondaryTextColor;\n this.activationBorderColor = this.border1;\n this.activationBkgColor = this.secondBkg;\n this.altSectionBkgColor = this.background;\n this.taskBkgColor = lighten(this.mainBkg, 23);\n this.taskTextColor = this.darkTextColor;\n this.taskTextLightColor = this.mainContrastColor;\n this.taskTextOutsideColor = this.taskTextLightColor;\n this.gridColor = this.mainContrastColor;\n this.doneTaskBkgColor = this.mainContrastColor;\n this.taskTextDarkColor = this.darkTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#555\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = \"#f4f4f4\";\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust(this.primaryColor, { h: 64 });\n this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust(this.primaryColor, { h: -64 });\n this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust(this.primaryColor, { h: 128 });\n this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n this.cScale1 = this.cScale1 || \"#0b0000\";\n this.cScale2 = this.cScale2 || \"#4d1037\";\n this.cScale3 = this.cScale3 || \"#3f5258\";\n this.cScale4 = this.cScale4 || \"#4f2f1b\";\n this.cScale5 = this.cScale5 || \"#6e0a0a\";\n this.cScale6 = this.cScale6 || \"#3b0048\";\n this.cScale7 = this.cScale7 || \"#995a01\";\n this.cScale8 = this.cScale8 || \"#154706\";\n this.cScale9 = this.cScale9 || \"#161722\";\n this.cScale10 = this.cScale10 || \"#00296f\";\n this.cScale11 = this.cScale11 || \"#01629c\";\n this.cScale12 = this.cScale12 || \"#010029\";\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 });\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || invert(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || lighten(this[\"cScale\" + i], 10);\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust(this.mainBkg, { h: 30, s: -30, l: -(-10 + i * 4) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust(this.mainBkg, { h: 30, s: -30, l: -(-7 + i * 4) });\n }\n this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"pie\" + i] = this[\"cScale\" + i];\n }\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.xyChart = {\n backgroundColor: ((_a = this.xyChart) == null ? void 0 : _a.backgroundColor) || this.background,\n titleColor: ((_b = this.xyChart) == null ? void 0 : _b.titleColor) || this.primaryTextColor,\n xAxisTitleColor: ((_c = this.xyChart) == null ? void 0 : _c.xAxisTitleColor) || this.primaryTextColor,\n xAxisLabelColor: ((_d = this.xyChart) == null ? void 0 : _d.xAxisLabelColor) || this.primaryTextColor,\n xAxisTickColor: ((_e = this.xyChart) == null ? void 0 : _e.xAxisTickColor) || this.primaryTextColor,\n xAxisLineColor: ((_f = this.xyChart) == null ? void 0 : _f.xAxisLineColor) || this.primaryTextColor,\n yAxisTitleColor: ((_g = this.xyChart) == null ? void 0 : _g.yAxisTitleColor) || this.primaryTextColor,\n yAxisLabelColor: ((_h = this.xyChart) == null ? void 0 : _h.yAxisLabelColor) || this.primaryTextColor,\n yAxisTickColor: ((_i = this.xyChart) == null ? void 0 : _i.yAxisTickColor) || this.primaryTextColor,\n yAxisLineColor: ((_j = this.xyChart) == null ? void 0 : _j.yAxisLineColor) || this.primaryTextColor,\n plotColorPalette: ((_k = this.xyChart) == null ? void 0 : _k.plotColorPalette) || \"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22\"\n };\n this.classText = this.primaryTextColor;\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = lighten(this.secondaryColor, 20);\n this.git1 = lighten(this.pie2 || this.secondaryColor, 20);\n this.git2 = lighten(this.pie3 || this.tertiaryColor, 20);\n this.git3 = lighten(this.pie4 || adjust(this.primaryColor, { h: -30 }), 20);\n this.git4 = lighten(this.pie5 || adjust(this.primaryColor, { h: -60 }), 20);\n this.git5 = lighten(this.pie6 || adjust(this.primaryColor, { h: -90 }), 10);\n this.git6 = lighten(this.pie7 || adjust(this.primaryColor, { h: 60 }), 10);\n this.git7 = lighten(this.pie8 || adjust(this.primaryColor, { h: 120 }), 20);\n this.gitInv0 = this.gitInv0 || invert(this.git0);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || lighten(this.background, 12);\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || lighten(this.background, 2);\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nconst getThemeVariables$3 = (userOverrides) => {\n const theme2 = new Theme$3();\n theme2.calculate(userOverrides);\n return theme2;\n};\nlet Theme$2 = class Theme3 {\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#ECECFF\";\n this.secondaryColor = adjust(this.primaryColor, { h: 120 });\n this.secondaryColor = \"#ffffde\";\n this.tertiaryColor = adjust(this.primaryColor, { h: -160 });\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert(this.primaryColor);\n this.secondaryTextColor = invert(this.secondaryColor);\n this.tertiaryTextColor = invert(this.tertiaryColor);\n this.lineColor = invert(this.background);\n this.textColor = invert(this.background);\n this.background = \"white\";\n this.mainBkg = \"#ECECFF\";\n this.secondBkg = \"#ffffde\";\n this.lineColor = \"#333333\";\n this.border1 = \"#9370DB\";\n this.border2 = \"#aaaa33\";\n this.arrowheadColor = \"#333333\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.labelBackground = \"#e8e8e8\";\n this.textColor = \"#333\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"calculated\";\n this.edgeLabelBackground = \"calculated\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"black\";\n this.actorLineColor = \"grey\";\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"calculated\";\n this.altSectionBkgColor = \"calculated\";\n this.sectionBkgColor2 = \"calculated\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"calculated\";\n this.taskTextLightColor = \"calculated\";\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = \"calculated\";\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.taskTextClickableColor = \"calculated\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"calculated\";\n this.critBorderColor = \"calculated\";\n this.critBkgColor = \"calculated\";\n this.todayLineColor = \"calculated\";\n this.sectionBkgColor = rgba(102, 102, 255, 0.49);\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"#fff400\";\n this.taskBorderColor = \"#534fbc\";\n this.taskBkgColor = \"#8a90dd\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"black\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"#534fbc\";\n this.activeTaskBkgColor = \"#bfc7ff\";\n this.gridColor = \"lightgrey\";\n this.doneTaskBkgColor = \"lightgrey\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#ff8888\";\n this.critBkgColor = \"red\";\n this.todayLineColor = \"red\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n this.updateColors();\n }\n updateColors() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 });\n this[\"cScalePeer1\"] = this[\"cScalePeer1\"] || darken(this.secondaryColor, 45);\n this[\"cScalePeer2\"] = this[\"cScalePeer2\"] || darken(this.tertiaryColor, 40);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken(this[\"cScale\" + i], 10);\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken(this[\"cScale\" + i], 25);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || adjust(this[\"cScale\" + i], { h: 180 });\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust(this.mainBkg, { h: 30, l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust(this.mainBkg, { h: 30, l: -(7 + i * 5) });\n }\n this.scaleLabelColor = this.scaleLabelColor !== \"calculated\" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;\n if (this.labelTextColor !== \"calculated\") {\n this.cScaleLabel0 = this.cScaleLabel0 || invert(this.labelTextColor);\n this.cScaleLabel3 = this.cScaleLabel3 || invert(this.labelTextColor);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.labelTextColor;\n }\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.textColor;\n this.edgeLabelBackground = this.labelBackground;\n this.actorBorder = lighten(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.signalColor = this.textColor;\n this.signalTextColor = this.textColor;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f0f0f0\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.nodeBorder;\n this.specialStateColor = this.lineColor;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust(this.primaryColor, { h: 64 });\n this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust(this.primaryColor, { h: -64 });\n this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust(this.primaryColor, { h: 128 });\n this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || adjust(this.tertiaryColor, { l: -40 });\n this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -10 });\n this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -30 });\n this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -20 });\n this.pie7 = this.pie7 || adjust(this.primaryColor, { h: 60, l: -20 });\n this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -40 });\n this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: -40 });\n this.pie10 = this.pie10 || adjust(this.primaryColor, { h: 60, l: -40 });\n this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -90, l: -40 });\n this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -30 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.xyChart = {\n backgroundColor: ((_a = this.xyChart) == null ? void 0 : _a.backgroundColor) || this.background,\n titleColor: ((_b = this.xyChart) == null ? void 0 : _b.titleColor) || this.primaryTextColor,\n xAxisTitleColor: ((_c = this.xyChart) == null ? void 0 : _c.xAxisTitleColor) || this.primaryTextColor,\n xAxisLabelColor: ((_d = this.xyChart) == null ? void 0 : _d.xAxisLabelColor) || this.primaryTextColor,\n xAxisTickColor: ((_e = this.xyChart) == null ? void 0 : _e.xAxisTickColor) || this.primaryTextColor,\n xAxisLineColor: ((_f = this.xyChart) == null ? void 0 : _f.xAxisLineColor) || this.primaryTextColor,\n yAxisTitleColor: ((_g = this.xyChart) == null ? void 0 : _g.yAxisTitleColor) || this.primaryTextColor,\n yAxisLabelColor: ((_h = this.xyChart) == null ? void 0 : _h.yAxisLabelColor) || this.primaryTextColor,\n yAxisTickColor: ((_i = this.xyChart) == null ? void 0 : _i.yAxisTickColor) || this.primaryTextColor,\n yAxisLineColor: ((_j = this.xyChart) == null ? void 0 : _j.yAxisLineColor) || this.primaryTextColor,\n plotColorPalette: ((_k = this.xyChart) == null ? void 0 : _k.plotColorPalette) || \"#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3\"\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.labelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || adjust(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = lighten(this.git0, 25);\n this.git1 = lighten(this.git1, 25);\n this.git2 = lighten(this.git2, 25);\n this.git3 = lighten(this.git3, 25);\n this.git4 = lighten(this.git4, 25);\n this.git5 = lighten(this.git5, 25);\n this.git6 = lighten(this.git6, 25);\n this.git7 = lighten(this.git7, 25);\n } else {\n this.git0 = darken(this.git0, 25);\n this.git1 = darken(this.git1, 25);\n this.git2 = darken(this.git2, 25);\n this.git3 = darken(this.git3, 25);\n this.git4 = darken(this.git4, 25);\n this.git5 = darken(this.git5, 25);\n this.git6 = darken(this.git6, 25);\n this.git7 = darken(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || darken(invert(this.git0), 25);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nconst getThemeVariables$2 = (userOverrides) => {\n const theme2 = new Theme$2();\n theme2.calculate(userOverrides);\n return theme2;\n};\nlet Theme$1 = class Theme4 {\n constructor() {\n this.background = \"#f4f4f4\";\n this.primaryColor = \"#cde498\";\n this.secondaryColor = \"#cdffb2\";\n this.background = \"white\";\n this.mainBkg = \"#cde498\";\n this.secondBkg = \"#cdffb2\";\n this.lineColor = \"green\";\n this.border1 = \"#13540c\";\n this.border2 = \"#6eaa49\";\n this.arrowheadColor = \"green\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.tertiaryColor = lighten(\"#cde498\", 10);\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert(this.primaryColor);\n this.secondaryTextColor = invert(this.secondaryColor);\n this.tertiaryTextColor = invert(this.primaryColor);\n this.lineColor = invert(this.background);\n this.textColor = invert(this.background);\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"#333\";\n this.edgeLabelBackground = \"#e8e8e8\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"black\";\n this.actorLineColor = \"grey\";\n this.signalColor = \"#333\";\n this.signalTextColor = \"#333\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"#326932\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"#fff5ad\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"#6eaa49\";\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"#6eaa49\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"#487e3a\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"black\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"lightgrey\";\n this.doneTaskBkgColor = \"lightgrey\";\n this.doneTaskBorderColor = \"grey\";\n this.critBorderColor = \"#ff8888\";\n this.critBkgColor = \"red\";\n this.todayLineColor = \"red\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n }\n updateColors() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;\n this.actorBorder = darken(this.mainBkg, 20);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 });\n this[\"cScalePeer1\"] = this[\"cScalePeer1\"] || darken(this.secondaryColor, 45);\n this[\"cScalePeer2\"] = this[\"cScalePeer2\"] || darken(this.tertiaryColor, 40);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScale\" + i] = darken(this[\"cScale\" + i], 10);\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken(this[\"cScale\" + i], 25);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || adjust(this[\"cScale\" + i], { h: 180 });\n }\n this.scaleLabelColor = this.scaleLabelColor !== \"calculated\" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust(this.mainBkg, { h: 30, s: -30, l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust(this.mainBkg, { h: 30, s: -30, l: -(8 + i * 5) });\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.taskBorderColor = this.border1;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f0f0f0\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = this.lineColor;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust(this.primaryColor, { h: 64 });\n this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust(this.primaryColor, { h: -64 });\n this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust(this.primaryColor, { h: 128 });\n this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || this.tertiaryColor;\n this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -30 });\n this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -30 });\n this.pie6 = this.pie6 || adjust(this.tertiaryColor, { h: 40, l: -40 });\n this.pie7 = this.pie7 || adjust(this.primaryColor, { h: 60, l: -10 });\n this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 });\n this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 });\n this.pie10 = this.pie10 || adjust(this.primaryColor, { h: 60, l: -50 });\n this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -50 });\n this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -50 });\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.xyChart = {\n backgroundColor: ((_a = this.xyChart) == null ? void 0 : _a.backgroundColor) || this.background,\n titleColor: ((_b = this.xyChart) == null ? void 0 : _b.titleColor) || this.primaryTextColor,\n xAxisTitleColor: ((_c = this.xyChart) == null ? void 0 : _c.xAxisTitleColor) || this.primaryTextColor,\n xAxisLabelColor: ((_d = this.xyChart) == null ? void 0 : _d.xAxisLabelColor) || this.primaryTextColor,\n xAxisTickColor: ((_e = this.xyChart) == null ? void 0 : _e.xAxisTickColor) || this.primaryTextColor,\n xAxisLineColor: ((_f = this.xyChart) == null ? void 0 : _f.xAxisLineColor) || this.primaryTextColor,\n yAxisTitleColor: ((_g = this.xyChart) == null ? void 0 : _g.yAxisTitleColor) || this.primaryTextColor,\n yAxisLabelColor: ((_h = this.xyChart) == null ? void 0 : _h.yAxisLabelColor) || this.primaryTextColor,\n yAxisTickColor: ((_i = this.xyChart) == null ? void 0 : _i.yAxisTickColor) || this.primaryTextColor,\n yAxisLineColor: ((_j = this.xyChart) == null ? void 0 : _j.yAxisLineColor) || this.primaryTextColor,\n plotColorPalette: ((_k = this.xyChart) == null ? void 0 : _k.plotColorPalette) || \"#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176\"\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust(this.primaryColor, { h: 60 });\n this.git7 = this.git7 || adjust(this.primaryColor, { h: 120 });\n if (this.darkMode) {\n this.git0 = lighten(this.git0, 25);\n this.git1 = lighten(this.git1, 25);\n this.git2 = lighten(this.git2, 25);\n this.git3 = lighten(this.git3, 25);\n this.git4 = lighten(this.git4, 25);\n this.git5 = lighten(this.git5, 25);\n this.git6 = lighten(this.git6, 25);\n this.git7 = lighten(this.git7, 25);\n } else {\n this.git0 = darken(this.git0, 25);\n this.git1 = darken(this.git1, 25);\n this.git2 = darken(this.git2, 25);\n this.git3 = darken(this.git3, 25);\n this.git4 = darken(this.git4, 25);\n this.git5 = darken(this.git5, 25);\n this.git6 = darken(this.git6, 25);\n this.git7 = darken(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || invert(this.git0);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n};\nconst getThemeVariables$1 = (userOverrides) => {\n const theme2 = new Theme$1();\n theme2.calculate(userOverrides);\n return theme2;\n};\nclass Theme5 {\n constructor() {\n this.primaryColor = \"#eee\";\n this.contrast = \"#707070\";\n this.secondaryColor = lighten(this.contrast, 55);\n this.background = \"#ffffff\";\n this.tertiaryColor = adjust(this.primaryColor, { h: -160 });\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert(this.primaryColor);\n this.secondaryTextColor = invert(this.secondaryColor);\n this.tertiaryTextColor = invert(this.tertiaryColor);\n this.lineColor = invert(this.background);\n this.textColor = invert(this.background);\n this.mainBkg = \"#eee\";\n this.secondBkg = \"calculated\";\n this.lineColor = \"#666\";\n this.border1 = \"#999\";\n this.border2 = \"calculated\";\n this.note = \"#ffa\";\n this.text = \"#333\";\n this.critical = \"#d42\";\n this.done = \"#bbb\";\n this.arrowheadColor = \"#333333\";\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = \"16px\";\n this.THEME_COLOR_LIMIT = 12;\n this.nodeBkg = \"calculated\";\n this.nodeBorder = \"calculated\";\n this.clusterBkg = \"calculated\";\n this.clusterBorder = \"calculated\";\n this.defaultLinkColor = \"calculated\";\n this.titleColor = \"calculated\";\n this.edgeLabelBackground = \"white\";\n this.actorBorder = \"calculated\";\n this.actorBkg = \"calculated\";\n this.actorTextColor = \"calculated\";\n this.actorLineColor = \"calculated\";\n this.signalColor = \"calculated\";\n this.signalTextColor = \"calculated\";\n this.labelBoxBkgColor = \"calculated\";\n this.labelBoxBorderColor = \"calculated\";\n this.labelTextColor = \"calculated\";\n this.loopTextColor = \"calculated\";\n this.noteBorderColor = \"calculated\";\n this.noteBkgColor = \"calculated\";\n this.noteTextColor = \"calculated\";\n this.activationBorderColor = \"#666\";\n this.activationBkgColor = \"#f4f4f4\";\n this.sequenceNumberColor = \"white\";\n this.sectionBkgColor = \"calculated\";\n this.altSectionBkgColor = \"white\";\n this.sectionBkgColor2 = \"calculated\";\n this.excludeBkgColor = \"#eeeeee\";\n this.taskBorderColor = \"calculated\";\n this.taskBkgColor = \"calculated\";\n this.taskTextLightColor = \"white\";\n this.taskTextColor = \"calculated\";\n this.taskTextDarkColor = \"calculated\";\n this.taskTextOutsideColor = \"calculated\";\n this.taskTextClickableColor = \"#003163\";\n this.activeTaskBorderColor = \"calculated\";\n this.activeTaskBkgColor = \"calculated\";\n this.gridColor = \"calculated\";\n this.doneTaskBkgColor = \"calculated\";\n this.doneTaskBorderColor = \"calculated\";\n this.critBkgColor = \"calculated\";\n this.critBorderColor = \"calculated\";\n this.todayLineColor = \"calculated\";\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n this.labelColor = \"black\";\n this.errorBkgColor = \"#552222\";\n this.errorTextColor = \"#552222\";\n }\n updateColors() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;\n this.secondBkg = lighten(this.contrast, 55);\n this.border2 = this.contrast;\n this.actorBorder = lighten(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.text;\n this.actorLineColor = this.lineColor;\n this.signalColor = this.text;\n this.signalTextColor = this.text;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.text;\n this.loopTextColor = this.text;\n this.noteBorderColor = \"#999\";\n this.noteBkgColor = \"#666\";\n this.noteTextColor = \"#fff\";\n this.cScale0 = this.cScale0 || \"#555\";\n this.cScale1 = this.cScale1 || \"#F4F4F4\";\n this.cScale2 = this.cScale2 || \"#555\";\n this.cScale3 = this.cScale3 || \"#BBB\";\n this.cScale4 = this.cScale4 || \"#777\";\n this.cScale5 = this.cScale5 || \"#999\";\n this.cScale6 = this.cScale6 || \"#DDD\";\n this.cScale7 = this.cScale7 || \"#FFF\";\n this.cScale8 = this.cScale8 || \"#DDD\";\n this.cScale9 = this.cScale9 || \"#BBB\";\n this.cScale10 = this.cScale10 || \"#999\";\n this.cScale11 = this.cScale11 || \"#777\";\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleInv\" + i] = this[\"cScaleInv\" + i] || invert(this[\"cScale\" + i]);\n }\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n if (this.darkMode) {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || lighten(this[\"cScale\" + i], 10);\n } else {\n this[\"cScalePeer\" + i] = this[\"cScalePeer\" + i] || darken(this[\"cScale\" + i], 10);\n }\n }\n this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? \"black\" : this.labelTextColor);\n this[\"cScaleLabel0\"] = this[\"cScaleLabel0\"] || this.cScale1;\n this[\"cScaleLabel2\"] = this[\"cScaleLabel2\"] || this.cScale1;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"cScaleLabel\" + i] = this[\"cScaleLabel\" + i] || this.scaleLabelColor;\n }\n for (let i = 0; i < 5; i++) {\n this[\"surface\" + i] = this[\"surface\" + i] || adjust(this.mainBkg, { l: -(5 + i * 5) });\n this[\"surfacePeer\" + i] = this[\"surfacePeer\" + i] || adjust(this.mainBkg, { l: -(8 + i * 5) });\n }\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.text;\n this.sectionBkgColor = lighten(this.contrast, 30);\n this.sectionBkgColor2 = lighten(this.contrast, 30);\n this.taskBorderColor = darken(this.contrast, 10);\n this.taskBkgColor = this.contrast;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = this.text;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n this.gridColor = lighten(this.border1, 30);\n this.doneTaskBkgColor = this.done;\n this.doneTaskBorderColor = this.lineColor;\n this.critBkgColor = this.critical;\n this.critBorderColor = darken(this.critBkgColor, 10);\n this.todayLineColor = this.critBkgColor;\n this.transitionColor = this.transitionColor || \"#000\";\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || \"#f4f4f4\";\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.stateBorder = this.stateBorder || \"#000\";\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = \"#222\";\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.classText = this.primaryTextColor;\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust(this.primaryColor, { h: 64 });\n this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust(this.primaryColor, { h: -64 });\n this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust(this.primaryColor, { h: 128 });\n this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this[\"pie\" + i] = this[\"cScale\" + i];\n }\n this.pie12 = this.pie0;\n this.pieTitleTextSize = this.pieTitleTextSize || \"25px\";\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || \"17px\";\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || \"17px\";\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || \"black\";\n this.pieStrokeWidth = this.pieStrokeWidth || \"2px\";\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || \"2px\";\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || \"black\";\n this.pieOpacity = this.pieOpacity || \"0.7\";\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill = this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill = this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill = this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill = this.quadrantPointFill || isDark(this.quadrant1Fill) ? lighten(this.quadrant1Fill) : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill = this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill = this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n this.xyChart = {\n backgroundColor: ((_a = this.xyChart) == null ? void 0 : _a.backgroundColor) || this.background,\n titleColor: ((_b = this.xyChart) == null ? void 0 : _b.titleColor) || this.primaryTextColor,\n xAxisTitleColor: ((_c = this.xyChart) == null ? void 0 : _c.xAxisTitleColor) || this.primaryTextColor,\n xAxisLabelColor: ((_d = this.xyChart) == null ? void 0 : _d.xAxisLabelColor) || this.primaryTextColor,\n xAxisTickColor: ((_e = this.xyChart) == null ? void 0 : _e.xAxisTickColor) || this.primaryTextColor,\n xAxisLineColor: ((_f = this.xyChart) == null ? void 0 : _f.xAxisLineColor) || this.primaryTextColor,\n yAxisTitleColor: ((_g = this.xyChart) == null ? void 0 : _g.yAxisTitleColor) || this.primaryTextColor,\n yAxisLabelColor: ((_h = this.xyChart) == null ? void 0 : _h.yAxisLabelColor) || this.primaryTextColor,\n yAxisTickColor: ((_i = this.xyChart) == null ? void 0 : _i.yAxisTickColor) || this.primaryTextColor,\n yAxisLineColor: ((_j = this.xyChart) == null ? void 0 : _j.yAxisLineColor) || this.primaryTextColor,\n plotColorPalette: ((_k = this.xyChart) == null ? void 0 : _k.plotColorPalette) || \"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0\"\n };\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || \"1\";\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n this.git0 = darken(this.pie1, 25) || this.primaryColor;\n this.git1 = this.pie2 || this.secondaryColor;\n this.git2 = this.pie3 || this.tertiaryColor;\n this.git3 = this.pie4 || adjust(this.primaryColor, { h: -30 });\n this.git4 = this.pie5 || adjust(this.primaryColor, { h: -60 });\n this.git5 = this.pie6 || adjust(this.primaryColor, { h: -90 });\n this.git6 = this.pie7 || adjust(this.primaryColor, { h: 60 });\n this.git7 = this.pie8 || adjust(this.primaryColor, { h: 120 });\n this.gitInv0 = this.gitInv0 || invert(this.git0);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n this.branchLabelColor = this.branchLabelColor || this.labelTextColor;\n this.gitBranchLabel0 = this.branchLabelColor;\n this.gitBranchLabel1 = \"white\";\n this.gitBranchLabel2 = this.branchLabelColor;\n this.gitBranchLabel3 = \"white\";\n this.gitBranchLabel4 = this.branchLabelColor;\n this.gitBranchLabel5 = this.branchLabelColor;\n this.gitBranchLabel6 = this.branchLabelColor;\n this.gitBranchLabel7 = this.branchLabelColor;\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || \"10px\";\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || \"10px\";\n this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n }\n calculate(overrides) {\n if (typeof overrides !== \"object\") {\n this.updateColors();\n return;\n }\n const keys = Object.keys(overrides);\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n this.updateColors();\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n}\nconst getThemeVariables = (userOverrides) => {\n const theme2 = new Theme5();\n theme2.calculate(userOverrides);\n return theme2;\n};\nconst theme = {\n base: {\n getThemeVariables: getThemeVariables$4\n },\n dark: {\n getThemeVariables: getThemeVariables$3\n },\n default: {\n getThemeVariables: getThemeVariables$2\n },\n forest: {\n getThemeVariables: getThemeVariables$1\n },\n neutral: {\n getThemeVariables\n }\n};\nconst defaultConfigJson = {\n \"flowchart\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"subGraphTitleMargin\": {\n \"top\": 0,\n \"bottom\": 0\n },\n \"diagramPadding\": 8,\n \"htmlLabels\": true,\n \"nodeSpacing\": 50,\n \"rankSpacing\": 50,\n \"curve\": \"basis\",\n \"padding\": 15,\n \"defaultRenderer\": \"dagre-wrapper\",\n \"wrappingWidth\": 200\n },\n \"sequence\": {\n \"useMaxWidth\": true,\n \"hideUnusedParticipants\": false,\n \"activationWidth\": 10,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"actorMargin\": 50,\n \"width\": 150,\n \"height\": 65,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"mirrorActors\": true,\n \"forceMenus\": false,\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"showSequenceNumbers\": false,\n \"actorFontSize\": 14,\n \"actorFontFamily\": '\"Open Sans\", sans-serif',\n \"actorFontWeight\": 400,\n \"noteFontSize\": 14,\n \"noteFontFamily\": '\"trebuchet ms\", verdana, arial, sans-serif',\n \"noteFontWeight\": 400,\n \"noteAlign\": \"center\",\n \"messageFontSize\": 16,\n \"messageFontFamily\": '\"trebuchet ms\", verdana, arial, sans-serif',\n \"messageFontWeight\": 400,\n \"wrap\": false,\n \"wrapPadding\": 10,\n \"labelBoxWidth\": 50,\n \"labelBoxHeight\": 20\n },\n \"gantt\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"barHeight\": 20,\n \"barGap\": 4,\n \"topPadding\": 50,\n \"rightPadding\": 75,\n \"leftPadding\": 75,\n \"gridLineStartPadding\": 35,\n \"fontSize\": 11,\n \"sectionFontSize\": 11,\n \"numberSectionStyles\": 4,\n \"axisFormat\": \"%Y-%m-%d\",\n \"topAxis\": false,\n \"displayMode\": \"\",\n \"weekday\": \"sunday\"\n },\n \"journey\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"leftMargin\": 150,\n \"width\": 150,\n \"height\": 50,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"taskFontSize\": 14,\n \"taskFontFamily\": '\"Open Sans\", sans-serif',\n \"taskMargin\": 50,\n \"activationWidth\": 10,\n \"textPlacement\": \"fo\",\n \"actorColours\": [\n \"#8FBC8F\",\n \"#7CFC00\",\n \"#00FFFF\",\n \"#20B2AA\",\n \"#B0E0E6\",\n \"#FFFFE0\"\n ],\n \"sectionFills\": [\n \"#191970\",\n \"#8B008B\",\n \"#4B0082\",\n \"#2F4F4F\",\n \"#800000\",\n \"#8B4513\",\n \"#00008B\"\n ],\n \"sectionColours\": [\n \"#fff\"\n ]\n },\n \"class\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"arrowMarkerAbsolute\": false,\n \"dividerMargin\": 10,\n \"padding\": 5,\n \"textHeight\": 10,\n \"defaultRenderer\": \"dagre-wrapper\",\n \"htmlLabels\": false\n },\n \"state\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"dividerMargin\": 10,\n \"sizeUnit\": 5,\n \"padding\": 8,\n \"textHeight\": 10,\n \"titleShift\": -15,\n \"noteMargin\": 10,\n \"forkWidth\": 70,\n \"forkHeight\": 7,\n \"miniPadding\": 2,\n \"fontSizeFactor\": 5.02,\n \"fontSize\": 24,\n \"labelHeight\": 16,\n \"edgeLengthFactor\": \"20\",\n \"compositTitleSize\": 35,\n \"radius\": 5,\n \"defaultRenderer\": \"dagre-wrapper\"\n },\n \"er\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"diagramPadding\": 20,\n \"layoutDirection\": \"TB\",\n \"minEntityWidth\": 100,\n \"minEntityHeight\": 75,\n \"entityPadding\": 15,\n \"stroke\": \"gray\",\n \"fill\": \"honeydew\",\n \"fontSize\": 12\n },\n \"pie\": {\n \"useMaxWidth\": true,\n \"textPosition\": 0.75\n },\n \"quadrantChart\": {\n \"useMaxWidth\": true,\n \"chartWidth\": 500,\n \"chartHeight\": 500,\n \"titleFontSize\": 20,\n \"titlePadding\": 10,\n \"quadrantPadding\": 5,\n \"xAxisLabelPadding\": 5,\n \"yAxisLabelPadding\": 5,\n \"xAxisLabelFontSize\": 16,\n \"yAxisLabelFontSize\": 16,\n \"quadrantLabelFontSize\": 16,\n \"quadrantTextTopPadding\": 5,\n \"pointTextPadding\": 5,\n \"pointLabelFontSize\": 12,\n \"pointRadius\": 5,\n \"xAxisPosition\": \"top\",\n \"yAxisPosition\": \"left\",\n \"quadrantInternalBorderStrokeWidth\": 1,\n \"quadrantExternalBorderStrokeWidth\": 2\n },\n \"xyChart\": {\n \"useMaxWidth\": true,\n \"width\": 700,\n \"height\": 500,\n \"titleFontSize\": 20,\n \"titlePadding\": 10,\n \"showTitle\": true,\n \"xAxis\": {\n \"$ref\": \"#/$defs/XYChartAxisConfig\",\n \"showLabel\": true,\n \"labelFontSize\": 14,\n \"labelPadding\": 5,\n \"showTitle\": true,\n \"titleFontSize\": 16,\n \"titlePadding\": 5,\n \"showTick\": true,\n \"tickLength\": 5,\n \"tickWidth\": 2,\n \"showAxisLine\": true,\n \"axisLineWidth\": 2\n },\n \"yAxis\": {\n \"$ref\": \"#/$defs/XYChartAxisConfig\",\n \"showLabel\": true,\n \"labelFontSize\": 14,\n \"labelPadding\": 5,\n \"showTitle\": true,\n \"titleFontSize\": 16,\n \"titlePadding\": 5,\n \"showTick\": true,\n \"tickLength\": 5,\n \"tickWidth\": 2,\n \"showAxisLine\": true,\n \"axisLineWidth\": 2\n },\n \"chartOrientation\": \"vertical\",\n \"plotReservedSpacePercent\": 50\n },\n \"requirement\": {\n \"useMaxWidth\": true,\n \"rect_fill\": \"#f9f9f9\",\n \"text_color\": \"#333\",\n \"rect_border_size\": \"0.5px\",\n \"rect_border_color\": \"#bbb\",\n \"rect_min_width\": 200,\n \"rect_min_height\": 200,\n \"fontSize\": 14,\n \"rect_padding\": 10,\n \"line_height\": 20\n },\n \"mindmap\": {\n \"useMaxWidth\": true,\n \"padding\": 10,\n \"maxNodeWidth\": 200\n },\n \"timeline\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"leftMargin\": 150,\n \"width\": 150,\n \"height\": 50,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"taskFontSize\": 14,\n \"taskFontFamily\": '\"Open Sans\", sans-serif',\n \"taskMargin\": 50,\n \"activationWidth\": 10,\n \"textPlacement\": \"fo\",\n \"actorColours\": [\n \"#8FBC8F\",\n \"#7CFC00\",\n \"#00FFFF\",\n \"#20B2AA\",\n \"#B0E0E6\",\n \"#FFFFE0\"\n ],\n \"sectionFills\": [\n \"#191970\",\n \"#8B008B\",\n \"#4B0082\",\n \"#2F4F4F\",\n \"#800000\",\n \"#8B4513\",\n \"#00008B\"\n ],\n \"sectionColours\": [\n \"#fff\"\n ],\n \"disableMulticolor\": false\n },\n \"gitGraph\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"diagramPadding\": 8,\n \"nodeLabel\": {\n \"width\": 75,\n \"height\": 100,\n \"x\": -25,\n \"y\": 0\n },\n \"mainBranchName\": \"main\",\n \"mainBranchOrder\": 0,\n \"showCommitLabel\": true,\n \"showBranches\": true,\n \"rotateCommitLabel\": true,\n \"parallelCommits\": false,\n \"arrowMarkerAbsolute\": false\n },\n \"c4\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"c4ShapeMargin\": 50,\n \"c4ShapePadding\": 20,\n \"width\": 216,\n \"height\": 60,\n \"boxMargin\": 10,\n \"c4ShapeInRow\": 4,\n \"nextLinePaddingX\": 0,\n \"c4BoundaryInRow\": 2,\n \"personFontSize\": 14,\n \"personFontFamily\": '\"Open Sans\", sans-serif',\n \"personFontWeight\": \"normal\",\n \"external_personFontSize\": 14,\n \"external_personFontFamily\": '\"Open Sans\", sans-serif',\n \"external_personFontWeight\": \"normal\",\n \"systemFontSize\": 14,\n \"systemFontFamily\": '\"Open Sans\", sans-serif',\n \"systemFontWeight\": \"normal\",\n \"external_systemFontSize\": 14,\n \"external_systemFontFamily\": '\"Open Sans\", sans-serif',\n \"external_systemFontWeight\": \"normal\",\n \"system_dbFontSize\": 14,\n \"system_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"system_dbFontWeight\": \"normal\",\n \"external_system_dbFontSize\": 14,\n \"external_system_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"external_system_dbFontWeight\": \"normal\",\n \"system_queueFontSize\": 14,\n \"system_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"system_queueFontWeight\": \"normal\",\n \"external_system_queueFontSize\": 14,\n \"external_system_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"external_system_queueFontWeight\": \"normal\",\n \"boundaryFontSize\": 14,\n \"boundaryFontFamily\": '\"Open Sans\", sans-serif',\n \"boundaryFontWeight\": \"normal\",\n \"messageFontSize\": 12,\n \"messageFontFamily\": '\"Open Sans\", sans-serif',\n \"messageFontWeight\": \"normal\",\n \"containerFontSize\": 14,\n \"containerFontFamily\": '\"Open Sans\", sans-serif',\n \"containerFontWeight\": \"normal\",\n \"external_containerFontSize\": 14,\n \"external_containerFontFamily\": '\"Open Sans\", sans-serif',\n \"external_containerFontWeight\": \"normal\",\n \"container_dbFontSize\": 14,\n \"container_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"container_dbFontWeight\": \"normal\",\n \"external_container_dbFontSize\": 14,\n \"external_container_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"external_container_dbFontWeight\": \"normal\",\n \"container_queueFontSize\": 14,\n \"container_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"container_queueFontWeight\": \"normal\",\n \"external_container_queueFontSize\": 14,\n \"external_container_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"external_container_queueFontWeight\": \"normal\",\n \"componentFontSize\": 14,\n \"componentFontFamily\": '\"Open Sans\", sans-serif',\n \"componentFontWeight\": \"normal\",\n \"external_componentFontSize\": 14,\n \"external_componentFontFamily\": '\"Open Sans\", sans-serif',\n \"external_componentFontWeight\": \"normal\",\n \"component_dbFontSize\": 14,\n \"component_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"component_dbFontWeight\": \"normal\",\n \"external_component_dbFontSize\": 14,\n \"external_component_dbFontFamily\": '\"Open Sans\", sans-serif',\n \"external_component_dbFontWeight\": \"normal\",\n \"component_queueFontSize\": 14,\n \"component_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"component_queueFontWeight\": \"normal\",\n \"external_component_queueFontSize\": 14,\n \"external_component_queueFontFamily\": '\"Open Sans\", sans-serif',\n \"external_component_queueFontWeight\": \"normal\",\n \"wrap\": true,\n \"wrapPadding\": 10,\n \"person_bg_color\": \"#08427B\",\n \"person_border_color\": \"#073B6F\",\n \"external_person_bg_color\": \"#686868\",\n \"external_person_border_color\": \"#8A8A8A\",\n \"system_bg_color\": \"#1168BD\",\n \"system_border_color\": \"#3C7FC0\",\n \"system_db_bg_color\": \"#1168BD\",\n \"system_db_border_color\": \"#3C7FC0\",\n \"system_queue_bg_color\": \"#1168BD\",\n \"system_queue_border_color\": \"#3C7FC0\",\n \"external_system_bg_color\": \"#999999\",\n \"external_system_border_color\": \"#8A8A8A\",\n \"external_system_db_bg_color\": \"#999999\",\n \"external_system_db_border_color\": \"#8A8A8A\",\n \"external_system_queue_bg_color\": \"#999999\",\n \"external_system_queue_border_color\": \"#8A8A8A\",\n \"container_bg_color\": \"#438DD5\",\n \"container_border_color\": \"#3C7FC0\",\n \"container_db_bg_color\": \"#438DD5\",\n \"container_db_border_color\": \"#3C7FC0\",\n \"container_queue_bg_color\": \"#438DD5\",\n \"container_queue_border_color\": \"#3C7FC0\",\n \"external_container_bg_color\": \"#B3B3B3\",\n \"external_container_border_color\": \"#A6A6A6\",\n \"external_container_db_bg_color\": \"#B3B3B3\",\n \"external_container_db_border_color\": \"#A6A6A6\",\n \"external_container_queue_bg_color\": \"#B3B3B3\",\n \"external_container_queue_border_color\": \"#A6A6A6\",\n \"component_bg_color\": \"#85BBF0\",\n \"component_border_color\": \"#78A8D8\",\n \"component_db_bg_color\": \"#85BBF0\",\n \"component_db_border_color\": \"#78A8D8\",\n \"component_queue_bg_color\": \"#85BBF0\",\n \"component_queue_border_color\": \"#78A8D8\",\n \"external_component_bg_color\": \"#CCCCCC\",\n \"external_component_border_color\": \"#BFBFBF\",\n \"external_component_db_bg_color\": \"#CCCCCC\",\n \"external_component_db_border_color\": \"#BFBFBF\",\n \"external_component_queue_bg_color\": \"#CCCCCC\",\n \"external_component_queue_border_color\": \"#BFBFBF\"\n },\n \"sankey\": {\n \"useMaxWidth\": true,\n \"width\": 600,\n \"height\": 400,\n \"linkColor\": \"gradient\",\n \"nodeAlignment\": \"justify\",\n \"showValues\": true,\n \"prefix\": \"\",\n \"suffix\": \"\"\n },\n \"block\": {\n \"useMaxWidth\": true,\n \"padding\": 8\n },\n \"theme\": \"default\",\n \"maxTextSize\": 5e4,\n \"maxEdges\": 500,\n \"darkMode\": false,\n \"fontFamily\": '\"trebuchet ms\", verdana, arial, sans-serif;',\n \"logLevel\": 5,\n \"securityLevel\": \"strict\",\n \"startOnLoad\": true,\n \"arrowMarkerAbsolute\": false,\n \"secure\": [\n \"secure\",\n \"securityLevel\",\n \"startOnLoad\",\n \"maxTextSize\",\n \"maxEdges\"\n ],\n \"legacyMathML\": false,\n \"deterministicIds\": false,\n \"fontSize\": 16\n};\nconst config = {\n ...defaultConfigJson,\n // Set, even though they're `undefined` so that `configKeys` finds these keys\n // TODO: Should we replace these with `null` so that they can go in the JSON Schema?\n deterministicIDSeed: void 0,\n themeCSS: void 0,\n // add non-JSON default config values\n themeVariables: theme[\"default\"].getThemeVariables(),\n sequence: {\n ...defaultConfigJson.sequence,\n messageFont: function() {\n return {\n fontFamily: this.messageFontFamily,\n fontSize: this.messageFontSize,\n fontWeight: this.messageFontWeight\n };\n },\n noteFont: function() {\n return {\n fontFamily: this.noteFontFamily,\n fontSize: this.noteFontSize,\n fontWeight: this.noteFontWeight\n };\n },\n actorFont: function() {\n return {\n fontFamily: this.actorFontFamily,\n fontSize: this.actorFontSize,\n fontWeight: this.actorFontWeight\n };\n }\n },\n gantt: {\n ...defaultConfigJson.gantt,\n tickInterval: void 0,\n useWidth: void 0\n // can probably be removed since `configKeys` already includes this\n },\n c4: {\n ...defaultConfigJson.c4,\n useWidth: void 0,\n personFont: function() {\n return {\n fontFamily: this.personFontFamily,\n fontSize: this.personFontSize,\n fontWeight: this.personFontWeight\n };\n },\n external_personFont: function() {\n return {\n fontFamily: this.external_personFontFamily,\n fontSize: this.external_personFontSize,\n fontWeight: this.external_personFontWeight\n };\n },\n systemFont: function() {\n return {\n fontFamily: this.systemFontFamily,\n fontSize: this.systemFontSize,\n fontWeight: this.systemFontWeight\n };\n },\n external_systemFont: function() {\n return {\n fontFamily: this.external_systemFontFamily,\n fontSize: this.external_systemFontSize,\n fontWeight: this.external_systemFontWeight\n };\n },\n system_dbFont: function() {\n return {\n fontFamily: this.system_dbFontFamily,\n fontSize: this.system_dbFontSize,\n fontWeight: this.system_dbFontWeight\n };\n },\n external_system_dbFont: function() {\n return {\n fontFamily: this.external_system_dbFontFamily,\n fontSize: this.external_system_dbFontSize,\n fontWeight: this.external_system_dbFontWeight\n };\n },\n system_queueFont: function() {\n return {\n fontFamily: this.system_queueFontFamily,\n fontSize: this.system_queueFontSize,\n fontWeight: this.system_queueFontWeight\n };\n },\n external_system_queueFont: function() {\n return {\n fontFamily: this.external_system_queueFontFamily,\n fontSize: this.external_system_queueFontSize,\n fontWeight: this.external_system_queueFontWeight\n };\n },\n containerFont: function() {\n return {\n fontFamily: this.containerFontFamily,\n fontSize: this.containerFontSize,\n fontWeight: this.containerFontWeight\n };\n },\n external_containerFont: function() {\n return {\n fontFamily: this.external_containerFontFamily,\n fontSize: this.external_containerFontSize,\n fontWeight: this.external_containerFontWeight\n };\n },\n container_dbFont: function() {\n return {\n fontFamily: this.container_dbFontFamily,\n fontSize: this.container_dbFontSize,\n fontWeight: this.container_dbFontWeight\n };\n },\n external_container_dbFont: function() {\n return {\n fontFamily: this.external_container_dbFontFamily,\n fontSize: this.external_container_dbFontSize,\n fontWeight: this.external_container_dbFontWeight\n };\n },\n container_queueFont: function() {\n return {\n fontFamily: this.container_queueFontFamily,\n fontSize: this.container_queueFontSize,\n fontWeight: this.container_queueFontWeight\n };\n },\n external_container_queueFont: function() {\n return {\n fontFamily: this.external_container_queueFontFamily,\n fontSize: this.external_container_queueFontSize,\n fontWeight: this.external_container_queueFontWeight\n };\n },\n componentFont: function() {\n return {\n fontFamily: this.componentFontFamily,\n fontSize: this.componentFontSize,\n fontWeight: this.componentFontWeight\n };\n },\n external_componentFont: function() {\n return {\n fontFamily: this.external_componentFontFamily,\n fontSize: this.external_componentFontSize,\n fontWeight: this.external_componentFontWeight\n };\n },\n component_dbFont: function() {\n return {\n fontFamily: this.component_dbFontFamily,\n fontSize: this.component_dbFontSize,\n fontWeight: this.component_dbFontWeight\n };\n },\n external_component_dbFont: function() {\n return {\n fontFamily: this.external_component_dbFontFamily,\n fontSize: this.external_component_dbFontSize,\n fontWeight: this.external_component_dbFontWeight\n };\n },\n component_queueFont: function() {\n return {\n fontFamily: this.component_queueFontFamily,\n fontSize: this.component_queueFontSize,\n fontWeight: this.component_queueFontWeight\n };\n },\n external_component_queueFont: function() {\n return {\n fontFamily: this.external_component_queueFontFamily,\n fontSize: this.external_component_queueFontSize,\n fontWeight: this.external_component_queueFontWeight\n };\n },\n boundaryFont: function() {\n return {\n fontFamily: this.boundaryFontFamily,\n fontSize: this.boundaryFontSize,\n fontWeight: this.boundaryFontWeight\n };\n },\n messageFont: function() {\n return {\n fontFamily: this.messageFontFamily,\n fontSize: this.messageFontSize,\n fontWeight: this.messageFontWeight\n };\n }\n },\n pie: {\n ...defaultConfigJson.pie,\n useWidth: 984\n },\n xyChart: {\n ...defaultConfigJson.xyChart,\n useWidth: void 0\n },\n requirement: {\n ...defaultConfigJson.requirement,\n useWidth: void 0\n },\n gitGraph: {\n ...defaultConfigJson.gitGraph,\n // TODO: This is a temporary override for `gitGraph`, since every other\n // diagram does have `useMaxWidth`, but instead sets it to `true`.\n // Should we set this to `true` instead?\n useMaxWidth: false\n },\n sankey: {\n ...defaultConfigJson.sankey,\n // this is false, unlike every other diagram (other than gitGraph)\n // TODO: can we make this default to `true` instead?\n useMaxWidth: false\n }\n};\nconst keyify = (obj, prefix = \"\") => Object.keys(obj).reduce((res, el) => {\n if (Array.isArray(obj[el])) {\n return res;\n } else if (typeof obj[el] === \"object\" && obj[el] !== null) {\n return [...res, prefix + el, ...keyify(obj[el], \"\")];\n }\n return [...res, prefix + el];\n}, []);\nconst configKeys = new Set(keyify(config, \"\"));\nconst defaultConfig$2 = config;\nconst sanitizeDirective = (args) => {\n log$1.debug(\"sanitizeDirective called with\", args);\n if (typeof args !== \"object\" || args == null) {\n return;\n }\n if (Array.isArray(args)) {\n args.forEach((arg) => sanitizeDirective(arg));\n return;\n }\n for (const key of Object.keys(args)) {\n log$1.debug(\"Checking key\", key);\n if (key.startsWith(\"__\") || key.includes(\"proto\") || key.includes(\"constr\") || !configKeys.has(key) || args[key] == null) {\n log$1.debug(\"sanitize deleting key: \", key);\n delete args[key];\n continue;\n }\n if (typeof args[key] === \"object\") {\n log$1.debug(\"sanitizing object\", key);\n sanitizeDirective(args[key]);\n continue;\n }\n const cssMatchers = [\"themeCSS\", \"fontFamily\", \"altFontFamily\"];\n for (const cssKey of cssMatchers) {\n if (key.includes(cssKey)) {\n log$1.debug(\"sanitizing css option\", key);\n args[key] = sanitizeCss(args[key]);\n }\n }\n }\n if (args.themeVariables) {\n for (const k of Object.keys(args.themeVariables)) {\n const val = args.themeVariables[k];\n if ((val == null ? void 0 : val.match) && !val.match(/^[\\d \"#%(),.;A-Za-z]+$/)) {\n args.themeVariables[k] = \"\";\n }\n }\n }\n log$1.debug(\"After sanitization\", args);\n};\nconst sanitizeCss = (str2) => {\n let startCnt = 0;\n let endCnt = 0;\n for (const element of str2) {\n if (startCnt < endCnt) {\n return \"{ /* ERROR: Unbalanced CSS */ }\";\n }\n if (element === \"{\") {\n startCnt++;\n } else if (element === \"}\") {\n endCnt++;\n }\n }\n if (startCnt !== endCnt) {\n return \"{ /* ERROR: Unbalanced CSS */ }\";\n }\n return str2;\n};\nconst frontMatterRegex = /^-{3}\\s*[\\n\\r](.*?)[\\n\\r]-{3}\\s*[\\n\\r]+/s;\nconst directiveRegex = /%{2}{\\s*(?:(\\w+)\\s*:|(\\w+))\\s*(?:(\\w+)|((?:(?!}%{2}).|\\r?\\n)*))?\\s*(?:}%{2})?/gi;\nconst anyCommentRegex = /\\s*%%.*\\n/gm;\nclass UnknownDiagramError extends Error {\n constructor(message) {\n super(message);\n this.name = \"UnknownDiagramError\";\n }\n}\nconst detectors = {};\nconst detectType = function(text, config2) {\n text = text.replace(frontMatterRegex, \"\").replace(directiveRegex, \"\").replace(anyCommentRegex, \"\\n\");\n for (const [key, { detector: detector2 }] of Object.entries(detectors)) {\n const diagram2 = detector2(text, config2);\n if (diagram2) {\n return key;\n }\n }\n throw new UnknownDiagramError(\n `No diagram type detected matching given configuration for text: ${text}`\n );\n};\nconst registerLazyLoadedDiagrams = (...diagrams2) => {\n for (const { id: id2, detector: detector2, loader: loader2 } of diagrams2) {\n addDetector(id2, detector2, loader2);\n }\n};\nconst addDetector = (key, detector2, loader2) => {\n if (detectors[key]) {\n log$1.error(`Detector with key ${key} already exists`);\n } else {\n detectors[key] = { detector: detector2, loader: loader2 };\n }\n log$1.debug(`Detector with key ${key} added${loader2 ? \" with loader\" : \"\"}`);\n};\nconst getDiagramLoader = (key) => {\n return detectors[key].loader;\n};\nconst assignWithDepth = (dst, src, { depth = 2, clobber = false } = {}) => {\n const config2 = { depth, clobber };\n if (Array.isArray(src) && !Array.isArray(dst)) {\n src.forEach((s) => assignWithDepth(dst, s, config2));\n return dst;\n } else if (Array.isArray(src) && Array.isArray(dst)) {\n src.forEach((s) => {\n if (!dst.includes(s)) {\n dst.push(s);\n }\n });\n return dst;\n }\n if (dst === void 0 || depth <= 0) {\n if (dst !== void 0 && dst !== null && typeof dst === \"object\" && typeof src === \"object\") {\n return Object.assign(dst, src);\n } else {\n return src;\n }\n }\n if (src !== void 0 && typeof dst === \"object\" && typeof src === \"object\") {\n Object.keys(src).forEach((key) => {\n if (typeof src[key] === \"object\" && (dst[key] === void 0 || typeof dst[key] === \"object\")) {\n if (dst[key] === void 0) {\n dst[key] = Array.isArray(src[key]) ? [] : {};\n }\n dst[key] = assignWithDepth(dst[key], src[key], { depth: depth - 1, clobber });\n } else if (clobber || typeof dst[key] !== \"object\" && typeof src[key] !== \"object\") {\n dst[key] = src[key];\n }\n });\n }\n return dst;\n};\nconst assignWithDepth$1 = assignWithDepth;\nconst ZERO_WIDTH_SPACE = \"\u200B\";\nconst d3CurveTypes = {\n curveBasis,\n curveBasisClosed,\n curveBasisOpen,\n curveBumpX,\n curveBumpY,\n curveBundle,\n curveCardinalClosed,\n curveCardinalOpen,\n curveCardinal,\n curveCatmullRomClosed,\n curveCatmullRomOpen,\n curveCatmullRom,\n curveLinear,\n curveLinearClosed,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore\n};\nconst directiveWithoutOpen = /\\s*(?:(\\w+)(?=:):|(\\w+))\\s*(?:(\\w+)|((?:(?!}%{2}).|\\r?\\n)*))?\\s*(?:}%{2})?/gi;\nconst detectInit = function(text, config2) {\n const inits = detectDirective(text, /(?:init\\b)|(?:initialize\\b)/);\n let results = {};\n if (Array.isArray(inits)) {\n const args = inits.map((init2) => init2.args);\n sanitizeDirective(args);\n results = assignWithDepth$1(results, [...args]);\n } else {\n results = inits.args;\n }\n if (!results) {\n return;\n }\n let type2 = detectType(text, config2);\n const prop = \"config\";\n if (results[prop] !== void 0) {\n if (type2 === \"flowchart-v2\") {\n type2 = \"flowchart\";\n }\n results[type2] = results[prop];\n delete results[prop];\n }\n return results;\n};\nconst detectDirective = function(text, type2 = null) {\n try {\n const commentWithoutDirectives = new RegExp(\n `[%]{2}(?![{]${directiveWithoutOpen.source})(?=[}][%]{2}).*\n`,\n \"ig\"\n );\n text = text.trim().replace(commentWithoutDirectives, \"\").replace(/'/gm, '\"');\n log$1.debug(\n `Detecting diagram directive${type2 !== null ? \" type:\" + type2 : \"\"} based on the text:${text}`\n );\n let match;\n const result = [];\n while ((match = directiveRegex.exec(text)) !== null) {\n if (match.index === directiveRegex.lastIndex) {\n directiveRegex.lastIndex++;\n }\n if (match && !type2 || type2 && match[1] && match[1].match(type2) || type2 && match[2] && match[2].match(type2)) {\n const type22 = match[1] ? match[1] : match[2];\n const args = match[3] ? match[3].trim() : match[4] ? JSON.parse(match[4].trim()) : null;\n result.push({ type: type22, args });\n }\n }\n if (result.length === 0) {\n return { type: text, args: null };\n }\n return result.length === 1 ? result[0] : result;\n } catch (error) {\n log$1.error(\n `ERROR: ${error.message} - Unable to parse directive type: '${type2}' based on the text: '${text}'`\n );\n return { type: void 0, args: null };\n }\n};\nconst removeDirectives = function(text) {\n return text.replace(directiveRegex, \"\");\n};\nconst isSubstringInArray = function(str2, arr) {\n for (const [i, element] of arr.entries()) {\n if (element.match(str2)) {\n return i;\n }\n }\n return -1;\n};\nfunction interpolateToCurve(interpolate, defaultCurve) {\n if (!interpolate) {\n return defaultCurve;\n }\n const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`;\n return d3CurveTypes[curveName] ?? defaultCurve;\n}\nfunction formatUrl(linkStr, config2) {\n const url = linkStr.trim();\n if (!url) {\n return void 0;\n }\n if (config2.securityLevel !== \"loose\") {\n return sanitizeUrl(url);\n }\n return url;\n}\nconst runFunc = (functionName, ...params) => {\n const arrPaths = functionName.split(\".\");\n const len = arrPaths.length - 1;\n const fnName = arrPaths[len];\n let obj = window;\n for (let i = 0; i < len; i++) {\n obj = obj[arrPaths[i]];\n if (!obj) {\n log$1.error(`Function name: ${functionName} not found in window`);\n return;\n }\n }\n obj[fnName](...params);\n};\nfunction distance(p1, p2) {\n if (!p1 || !p2) {\n return 0;\n }\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\nfunction traverseEdge(points) {\n let prevPoint;\n let totalDistance = 0;\n points.forEach((point) => {\n totalDistance += distance(point, prevPoint);\n prevPoint = point;\n });\n const remainingDistance = totalDistance / 2;\n return calculatePoint(points, remainingDistance);\n}\nfunction calcLabelPosition(points) {\n if (points.length === 1) {\n return points[0];\n }\n return traverseEdge(points);\n}\nconst roundNumber = (num, precision = 2) => {\n const factor = Math.pow(10, precision);\n return Math.round(num * factor) / factor;\n};\nconst calculatePoint = (points, distanceToTraverse) => {\n let prevPoint = void 0;\n let remainingDistance = distanceToTraverse;\n for (const point of points) {\n if (prevPoint) {\n const vectorDistance = distance(point, prevPoint);\n if (vectorDistance < remainingDistance) {\n remainingDistance -= vectorDistance;\n } else {\n const distanceRatio = remainingDistance / vectorDistance;\n if (distanceRatio <= 0) {\n return prevPoint;\n }\n if (distanceRatio >= 1) {\n return { x: point.x, y: point.y };\n }\n if (distanceRatio > 0 && distanceRatio < 1) {\n return {\n x: roundNumber((1 - distanceRatio) * prevPoint.x + distanceRatio * point.x, 5),\n y: roundNumber((1 - distanceRatio) * prevPoint.y + distanceRatio * point.y, 5)\n };\n }\n }\n }\n prevPoint = point;\n }\n throw new Error(\"Could not find a suitable point for the given distance\");\n};\nconst calcCardinalityPosition = (isRelationTypePresent, points, initialPosition) => {\n log$1.info(`our points ${JSON.stringify(points)}`);\n if (points[0] !== initialPosition) {\n points = points.reverse();\n }\n const distanceToCardinalityPoint = 25;\n const center = calculatePoint(points, distanceToCardinalityPoint);\n const d = isRelationTypePresent ? 10 : 5;\n const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n const cardinalityPosition = { x: 0, y: 0 };\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n return cardinalityPosition;\n};\nfunction calcTerminalLabelPosition(terminalMarkerSize, position, _points) {\n const points = structuredClone(_points);\n log$1.info(\"our points\", points);\n if (position !== \"start_left\" && position !== \"start_right\") {\n points.reverse();\n }\n const distanceToCardinalityPoint = 25 + terminalMarkerSize;\n const center = calculatePoint(points, distanceToCardinalityPoint);\n const d = 10 + terminalMarkerSize * 0.5;\n const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n const cardinalityPosition = { x: 0, y: 0 };\n if (position === \"start_left\") {\n cardinalityPosition.x = Math.sin(angle + Math.PI) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle + Math.PI) * d + (points[0].y + center.y) / 2;\n } else if (position === \"end_right\") {\n cardinalityPosition.x = Math.sin(angle - Math.PI) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle - Math.PI) * d + (points[0].y + center.y) / 2 - 5;\n } else if (position === \"end_left\") {\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2 - 5;\n } else {\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n }\n return cardinalityPosition;\n}\nfunction getStylesFromArray(arr) {\n let style = \"\";\n let labelStyle = \"\";\n for (const element of arr) {\n if (element !== void 0) {\n if (element.startsWith(\"color:\") || element.startsWith(\"text-align:\")) {\n labelStyle = labelStyle + element + \";\";\n } else {\n style = style + element + \";\";\n }\n }\n }\n return { style, labelStyle };\n}\nlet cnt = 0;\nconst generateId = () => {\n cnt++;\n return \"id-\" + Math.random().toString(36).substr(2, 12) + \"-\" + cnt;\n};\nfunction makeRandomHex(length) {\n let result = \"\";\n const characters = \"0123456789abcdef\";\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\nconst random = (options) => {\n return makeRandomHex(options.length);\n};\nconst getTextObj = function() {\n return {\n x: 0,\n y: 0,\n fill: void 0,\n anchor: \"start\",\n style: \"#666\",\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0,\n valign: void 0,\n text: \"\"\n };\n};\nconst drawSimpleText = function(elem, textData) {\n const nText = textData.text.replace(common$1.lineBreakRegex, \" \");\n const [, _fontSizePx] = parseFontSize(textData.fontSize);\n const textElem = elem.append(\"text\");\n textElem.attr(\"x\", textData.x);\n textElem.attr(\"y\", textData.y);\n textElem.style(\"text-anchor\", textData.anchor);\n textElem.style(\"font-family\", textData.fontFamily);\n textElem.style(\"font-size\", _fontSizePx);\n textElem.style(\"font-weight\", textData.fontWeight);\n textElem.attr(\"fill\", textData.fill);\n if (textData.class !== void 0) {\n textElem.attr(\"class\", textData.class);\n }\n const span = textElem.append(\"tspan\");\n span.attr(\"x\", textData.x + textData.textMargin * 2);\n span.attr(\"fill\", textData.fill);\n span.text(nText);\n return textElem;\n};\nconst wrapLabel = memoize(\n (label, maxWidth, config2) => {\n if (!label) {\n return label;\n }\n config2 = Object.assign(\n { fontSize: 12, fontWeight: 400, fontFamily: \"Arial\", joinWith: \"
\" },\n config2\n );\n if (common$1.lineBreakRegex.test(label)) {\n return label;\n }\n const words = label.split(\" \");\n const completedLines = [];\n let nextLine = \"\";\n words.forEach((word, index) => {\n const wordLength = calculateTextWidth(`${word} `, config2);\n const nextLineLength = calculateTextWidth(nextLine, config2);\n if (wordLength > maxWidth) {\n const { hyphenatedStrings, remainingWord } = breakString(word, maxWidth, \"-\", config2);\n completedLines.push(nextLine, ...hyphenatedStrings);\n nextLine = remainingWord;\n } else if (nextLineLength + wordLength >= maxWidth) {\n completedLines.push(nextLine);\n nextLine = word;\n } else {\n nextLine = [nextLine, word].filter(Boolean).join(\" \");\n }\n const currentWord = index + 1;\n const isLastWord = currentWord === words.length;\n if (isLastWord) {\n completedLines.push(nextLine);\n }\n });\n return completedLines.filter((line) => line !== \"\").join(config2.joinWith);\n },\n (label, maxWidth, config2) => `${label}${maxWidth}${config2.fontSize}${config2.fontWeight}${config2.fontFamily}${config2.joinWith}`\n);\nconst breakString = memoize(\n (word, maxWidth, hyphenCharacter = \"-\", config2) => {\n config2 = Object.assign(\n { fontSize: 12, fontWeight: 400, fontFamily: \"Arial\", margin: 0 },\n config2\n );\n const characters = [...word];\n const lines = [];\n let currentLine = \"\";\n characters.forEach((character, index) => {\n const nextLine = `${currentLine}${character}`;\n const lineWidth = calculateTextWidth(nextLine, config2);\n if (lineWidth >= maxWidth) {\n const currentCharacter = index + 1;\n const isLastLine = characters.length === currentCharacter;\n const hyphenatedNextLine = `${nextLine}${hyphenCharacter}`;\n lines.push(isLastLine ? nextLine : hyphenatedNextLine);\n currentLine = \"\";\n } else {\n currentLine = nextLine;\n }\n });\n return { hyphenatedStrings: lines, remainingWord: currentLine };\n },\n (word, maxWidth, hyphenCharacter = \"-\", config2) => `${word}${maxWidth}${hyphenCharacter}${config2.fontSize}${config2.fontWeight}${config2.fontFamily}`\n);\nfunction calculateTextHeight(text, config2) {\n return calculateTextDimensions(text, config2).height;\n}\nfunction calculateTextWidth(text, config2) {\n return calculateTextDimensions(text, config2).width;\n}\nconst calculateTextDimensions = memoize(\n (text, config2) => {\n const { fontSize = 12, fontFamily = \"Arial\", fontWeight = 400 } = config2;\n if (!text) {\n return { width: 0, height: 0 };\n }\n const [, _fontSizePx] = parseFontSize(fontSize);\n const fontFamilies = [\"sans-serif\", fontFamily];\n const lines = text.split(common$1.lineBreakRegex);\n const dims = [];\n const body = select(\"body\");\n if (!body.remove) {\n return { width: 0, height: 0, lineHeight: 0 };\n }\n const g = body.append(\"svg\");\n for (const fontFamily2 of fontFamilies) {\n let cHeight = 0;\n const dim = { width: 0, height: 0, lineHeight: 0 };\n for (const line of lines) {\n const textObj = getTextObj();\n textObj.text = line || ZERO_WIDTH_SPACE;\n const textElem = drawSimpleText(g, textObj).style(\"font-size\", _fontSizePx).style(\"font-weight\", fontWeight).style(\"font-family\", fontFamily2);\n const bBox = (textElem._groups || textElem)[0][0].getBBox();\n if (bBox.width === 0 && bBox.height === 0) {\n throw new Error(\"svg element not in render tree\");\n }\n dim.width = Math.round(Math.max(dim.width, bBox.width));\n cHeight = Math.round(bBox.height);\n dim.height += cHeight;\n dim.lineHeight = Math.round(Math.max(dim.lineHeight, cHeight));\n }\n dims.push(dim);\n }\n g.remove();\n const index = isNaN(dims[1].height) || isNaN(dims[1].width) || isNaN(dims[1].lineHeight) || dims[0].height > dims[1].height && dims[0].width > dims[1].width && dims[0].lineHeight > dims[1].lineHeight ? 0 : 1;\n return dims[index];\n },\n (text, config2) => `${text}${config2.fontSize}${config2.fontWeight}${config2.fontFamily}`\n);\nclass InitIDGenerator {\n constructor(deterministic = false, seed) {\n this.count = 0;\n this.count = seed ? seed.length : 0;\n this.next = deterministic ? () => this.count++ : () => Date.now();\n }\n}\nlet decoder;\nconst entityDecode = function(html) {\n decoder = decoder || document.createElement(\"div\");\n html = escape(html).replace(/%26/g, \"&\").replace(/%23/g, \"#\").replace(/%3B/g, \";\");\n decoder.innerHTML = html;\n return unescape(decoder.textContent);\n};\nfunction isDetailedError(error) {\n return \"str\" in error;\n}\nconst insertTitle = (parent, cssClass, titleTopMargin, title) => {\n var _a;\n if (!title) {\n return;\n }\n const bounds = (_a = parent.node()) == null ? void 0 : _a.getBBox();\n if (!bounds) {\n return;\n }\n parent.append(\"text\").text(title).attr(\"x\", bounds.x + bounds.width / 2).attr(\"y\", -titleTopMargin).attr(\"class\", cssClass);\n};\nconst parseFontSize = (fontSize) => {\n if (typeof fontSize === \"number\") {\n return [fontSize, fontSize + \"px\"];\n }\n const fontSizeNumber = parseInt(fontSize ?? \"\", 10);\n if (Number.isNaN(fontSizeNumber)) {\n return [void 0, void 0];\n } else if (fontSize === String(fontSizeNumber)) {\n return [fontSizeNumber, fontSize + \"px\"];\n } else {\n return [fontSizeNumber, fontSize];\n }\n};\nfunction cleanAndMerge(defaultData, data) {\n return merge$1({}, defaultData, data);\n}\nconst utils = {\n assignWithDepth: assignWithDepth$1,\n wrapLabel,\n calculateTextHeight,\n calculateTextWidth,\n calculateTextDimensions,\n cleanAndMerge,\n detectInit,\n detectDirective,\n isSubstringInArray,\n interpolateToCurve,\n calcLabelPosition,\n calcCardinalityPosition,\n calcTerminalLabelPosition,\n formatUrl,\n getStylesFromArray,\n generateId,\n random,\n runFunc,\n entityDecode,\n insertTitle,\n parseFontSize,\n InitIDGenerator\n};\nconst encodeEntities = function(text) {\n let txt = text;\n txt = txt.replace(/style.*:\\S*#.*;/g, function(s) {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/classDef.*:\\S*#.*;/g, function(s) {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/#\\w+;/g, function(s) {\n const innerTxt = s.substring(1, s.length - 1);\n const isInt = /^\\+?\\d+$/.test(innerTxt);\n if (isInt) {\n return \"\uFB02\u00B0\u00B0\" + innerTxt + \"\u00B6\u00DF\";\n } else {\n return \"\uFB02\u00B0\" + innerTxt + \"\u00B6\u00DF\";\n }\n });\n return txt;\n};\nconst decodeEntities = function(text) {\n return text.replace(/\uFB02\u00B0\u00B0/g, \"&#\").replace(/\uFB02\u00B0/g, \"&\").replace(/\u00B6\u00DF/g, \";\");\n};\nconst version = \"10.9.1\";\nconst defaultConfig$1 = Object.freeze(defaultConfig$2);\nlet siteConfig = assignWithDepth$1({}, defaultConfig$1);\nlet configFromInitialize;\nlet directives = [];\nlet currentConfig = assignWithDepth$1({}, defaultConfig$1);\nconst updateCurrentConfig = (siteCfg, _directives) => {\n let cfg = assignWithDepth$1({}, siteCfg);\n let sumOfDirectives = {};\n for (const d of _directives) {\n sanitize(d);\n sumOfDirectives = assignWithDepth$1(sumOfDirectives, d);\n }\n cfg = assignWithDepth$1(cfg, sumOfDirectives);\n if (sumOfDirectives.theme && sumOfDirectives.theme in theme) {\n const tmpConfigFromInitialize = assignWithDepth$1({}, configFromInitialize);\n const themeVariables = assignWithDepth$1(\n tmpConfigFromInitialize.themeVariables || {},\n sumOfDirectives.themeVariables\n );\n if (cfg.theme && cfg.theme in theme) {\n cfg.themeVariables = theme[cfg.theme].getThemeVariables(themeVariables);\n }\n }\n currentConfig = cfg;\n checkConfig(currentConfig);\n return currentConfig;\n};\nconst setSiteConfig = (conf) => {\n siteConfig = assignWithDepth$1({}, defaultConfig$1);\n siteConfig = assignWithDepth$1(siteConfig, conf);\n if (conf.theme && theme[conf.theme]) {\n siteConfig.themeVariables = theme[conf.theme].getThemeVariables(conf.themeVariables);\n }\n updateCurrentConfig(siteConfig, directives);\n return siteConfig;\n};\nconst saveConfigFromInitialize = (conf) => {\n configFromInitialize = assignWithDepth$1({}, conf);\n};\nconst updateSiteConfig = (conf) => {\n siteConfig = assignWithDepth$1(siteConfig, conf);\n updateCurrentConfig(siteConfig, directives);\n return siteConfig;\n};\nconst getSiteConfig = () => {\n return assignWithDepth$1({}, siteConfig);\n};\nconst setConfig$1 = (conf) => {\n checkConfig(conf);\n assignWithDepth$1(currentConfig, conf);\n return getConfig$1();\n};\nconst getConfig$1 = () => {\n return assignWithDepth$1({}, currentConfig);\n};\nconst sanitize = (options) => {\n if (!options) {\n return;\n }\n [\"secure\", ...siteConfig.secure ?? []].forEach((key) => {\n if (Object.hasOwn(options, key)) {\n log$1.debug(`Denied attempt to modify a secure key ${key}`, options[key]);\n delete options[key];\n }\n });\n Object.keys(options).forEach((key) => {\n if (key.startsWith(\"__\")) {\n delete options[key];\n }\n });\n Object.keys(options).forEach((key) => {\n if (typeof options[key] === \"string\" && (options[key].includes(\"<\") || options[key].includes(\">\") || options[key].includes(\"url(data:\"))) {\n delete options[key];\n }\n if (typeof options[key] === \"object\") {\n sanitize(options[key]);\n }\n });\n};\nconst addDirective = (directive) => {\n sanitizeDirective(directive);\n if (directive.fontFamily && (!directive.themeVariables || !directive.themeVariables.fontFamily)) {\n directive.themeVariables = { fontFamily: directive.fontFamily };\n }\n directives.push(directive);\n updateCurrentConfig(siteConfig, directives);\n};\nconst reset = (config2 = siteConfig) => {\n directives = [];\n updateCurrentConfig(config2, directives);\n};\nconst ConfigWarning = {\n LAZY_LOAD_DEPRECATED: \"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.\"\n};\nconst issuedWarnings = {};\nconst issueWarning = (warning) => {\n if (issuedWarnings[warning]) {\n return;\n }\n log$1.warn(ConfigWarning[warning]);\n issuedWarnings[warning] = true;\n};\nconst checkConfig = (config2) => {\n if (!config2) {\n return;\n }\n if (config2.lazyLoadedDiagrams || config2.loadExternalDiagramsAtStartup) {\n issueWarning(\"LAZY_LOAD_DEPRECATED\");\n }\n};\nconst id$l = \"c4\";\nconst detector$l = (txt) => {\n return /^\\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);\n};\nconst loader$m = async () => {\n const { diagram: diagram2 } = await import(\"./c4Diagram-ae766693.js\");\n return { id: id$l, diagram: diagram2 };\n};\nconst plugin$j = {\n id: id$l,\n detector: detector$l,\n loader: loader$m\n};\nconst c4 = plugin$j;\nconst id$k = \"flowchart\";\nconst detector$k = (txt, config2) => {\n var _a, _b;\n if (((_a = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _a.defaultRenderer) === \"dagre-wrapper\" || ((_b = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _b.defaultRenderer) === \"elk\") {\n return false;\n }\n return /^\\s*graph/.test(txt);\n};\nconst loader$l = async () => {\n const { diagram: diagram2 } = await import(\"./flowDiagram-b222e15a.js\");\n return { id: id$k, diagram: diagram2 };\n};\nconst plugin$i = {\n id: id$k,\n detector: detector$k,\n loader: loader$l\n};\nconst flowchart = plugin$i;\nconst id$j = \"flowchart-v2\";\nconst detector$j = (txt, config2) => {\n var _a, _b, _c;\n if (((_a = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _a.defaultRenderer) === \"dagre-d3\" || ((_b = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _b.defaultRenderer) === \"elk\") {\n return false;\n }\n if (/^\\s*graph/.test(txt) && ((_c = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _c.defaultRenderer) === \"dagre-wrapper\") {\n return true;\n }\n return /^\\s*flowchart/.test(txt);\n};\nconst loader$k = async () => {\n const { diagram: diagram2 } = await import(\"./flowDiagram-v2-13329dc7.js\");\n return { id: id$j, diagram: diagram2 };\n};\nconst plugin$h = {\n id: id$j,\n detector: detector$j,\n loader: loader$k\n};\nconst flowchartV2 = plugin$h;\nconst id$i = \"er\";\nconst detector$i = (txt) => {\n return /^\\s*erDiagram/.test(txt);\n};\nconst loader$j = async () => {\n const { diagram: diagram2 } = await import(\"./erDiagram-09d1c15f.js\");\n return { id: id$i, diagram: diagram2 };\n};\nconst plugin$g = {\n id: id$i,\n detector: detector$i,\n loader: loader$j\n};\nconst er = plugin$g;\nconst id$h = \"gitGraph\";\nconst detector$h = (txt) => {\n return /^\\s*gitGraph/.test(txt);\n};\nconst loader$i = async () => {\n const { diagram: diagram2 } = await import(\"./gitGraphDiagram-942e62fe.js\");\n return { id: id$h, diagram: diagram2 };\n};\nconst plugin$f = {\n id: id$h,\n detector: detector$h,\n loader: loader$i\n};\nconst git = plugin$f;\nconst id$g = \"gantt\";\nconst detector$g = (txt) => {\n return /^\\s*gantt/.test(txt);\n};\nconst loader$h = async () => {\n const { diagram: diagram2 } = await import(\"./ganttDiagram-b62c793e.js\");\n return { id: id$g, diagram: diagram2 };\n};\nconst plugin$e = {\n id: id$g,\n detector: detector$g,\n loader: loader$h\n};\nconst gantt = plugin$e;\nconst id$f = \"info\";\nconst detector$f = (txt) => {\n return /^\\s*info/.test(txt);\n};\nconst loader$g = async () => {\n const { diagram: diagram2 } = await import(\"./infoDiagram-94cd232f.js\");\n return { id: id$f, diagram: diagram2 };\n};\nconst info = {\n id: id$f,\n detector: detector$f,\n loader: loader$g\n};\nconst id$e = \"pie\";\nconst detector$e = (txt) => {\n return /^\\s*pie/.test(txt);\n};\nconst loader$f = async () => {\n const { diagram: diagram2 } = await import(\"./pieDiagram-bb1d19e5.js\");\n return { id: id$e, diagram: diagram2 };\n};\nconst pie = {\n id: id$e,\n detector: detector$e,\n loader: loader$f\n};\nconst id$d = \"quadrantChart\";\nconst detector$d = (txt) => {\n return /^\\s*quadrantChart/.test(txt);\n};\nconst loader$e = async () => {\n const { diagram: diagram2 } = await import(\"./quadrantDiagram-c759a472.js\");\n return { id: id$d, diagram: diagram2 };\n};\nconst plugin$d = {\n id: id$d,\n detector: detector$d,\n loader: loader$e\n};\nconst quadrantChart = plugin$d;\nconst id$c = \"xychart\";\nconst detector$c = (txt) => {\n return /^\\s*xychart-beta/.test(txt);\n};\nconst loader$d = async () => {\n const { diagram: diagram2 } = await import(\"./xychartDiagram-f11f50a6.js\");\n return { id: id$c, diagram: diagram2 };\n};\nconst plugin$c = {\n id: id$c,\n detector: detector$c,\n loader: loader$d\n};\nconst xychart = plugin$c;\nconst id$b = \"requirement\";\nconst detector$b = (txt) => {\n return /^\\s*requirement(Diagram)?/.test(txt);\n};\nconst loader$c = async () => {\n const { diagram: diagram2 } = await import(\"./requirementDiagram-87253d64.js\");\n return { id: id$b, diagram: diagram2 };\n};\nconst plugin$b = {\n id: id$b,\n detector: detector$b,\n loader: loader$c\n};\nconst requirement = plugin$b;\nconst id$a = \"sequence\";\nconst detector$a = (txt) => {\n return /^\\s*sequenceDiagram/.test(txt);\n};\nconst loader$b = async () => {\n const { diagram: diagram2 } = await import(\"./sequenceDiagram-6894f283.js\");\n return { id: id$a, diagram: diagram2 };\n};\nconst plugin$a = {\n id: id$a,\n detector: detector$a,\n loader: loader$b\n};\nconst sequence = plugin$a;\nconst id$9 = \"class\";\nconst detector$9 = (txt, config2) => {\n var _a;\n if (((_a = config2 == null ? void 0 : config2.class) == null ? void 0 : _a.defaultRenderer) === \"dagre-wrapper\") {\n return false;\n }\n return /^\\s*classDiagram/.test(txt);\n};\nconst loader$a = async () => {\n const { diagram: diagram2 } = await import(\"./classDiagram-fb54d2a0.js\");\n return { id: id$9, diagram: diagram2 };\n};\nconst plugin$9 = {\n id: id$9,\n detector: detector$9,\n loader: loader$a\n};\nconst classDiagram = plugin$9;\nconst id$8 = \"classDiagram\";\nconst detector$8 = (txt, config2) => {\n var _a;\n if (/^\\s*classDiagram/.test(txt) && ((_a = config2 == null ? void 0 : config2.class) == null ? void 0 : _a.defaultRenderer) === \"dagre-wrapper\") {\n return true;\n }\n return /^\\s*classDiagram-v2/.test(txt);\n};\nconst loader$9 = async () => {\n const { diagram: diagram2 } = await import(\"./classDiagram-v2-a2b738ad.js\");\n return { id: id$8, diagram: diagram2 };\n};\nconst plugin$8 = {\n id: id$8,\n detector: detector$8,\n loader: loader$9\n};\nconst classDiagramV2 = plugin$8;\nconst id$7 = \"state\";\nconst detector$7 = (txt, config2) => {\n var _a;\n if (((_a = config2 == null ? void 0 : config2.state) == null ? void 0 : _a.defaultRenderer) === \"dagre-wrapper\") {\n return false;\n }\n return /^\\s*stateDiagram/.test(txt);\n};\nconst loader$8 = async () => {\n const { diagram: diagram2 } = await import(\"./stateDiagram-5dee940d.js\");\n return { id: id$7, diagram: diagram2 };\n};\nconst plugin$7 = {\n id: id$7,\n detector: detector$7,\n loader: loader$8\n};\nconst state = plugin$7;\nconst id$6 = \"stateDiagram\";\nconst detector$6 = (txt, config2) => {\n var _a;\n if (/^\\s*stateDiagram-v2/.test(txt)) {\n return true;\n }\n if (/^\\s*stateDiagram/.test(txt) && ((_a = config2 == null ? void 0 : config2.state) == null ? void 0 : _a.defaultRenderer) === \"dagre-wrapper\") {\n return true;\n }\n return false;\n};\nconst loader$7 = async () => {\n const { diagram: diagram2 } = await import(\"./stateDiagram-v2-1992cada.js\");\n return { id: id$6, diagram: diagram2 };\n};\nconst plugin$6 = {\n id: id$6,\n detector: detector$6,\n loader: loader$7\n};\nconst stateV2 = plugin$6;\nconst id$5 = \"journey\";\nconst detector$5 = (txt) => {\n return /^\\s*journey/.test(txt);\n};\nconst loader$6 = async () => {\n const { diagram: diagram2 } = await import(\"./journeyDiagram-6625b456.js\");\n return { id: id$5, diagram: diagram2 };\n};\nconst plugin$5 = {\n id: id$5,\n detector: detector$5,\n loader: loader$6\n};\nconst journey = plugin$5;\nconst d3Attrs = function(d3Elem, attrs) {\n for (let attr of attrs) {\n d3Elem.attr(attr[0], attr[1]);\n }\n};\nconst calculateSvgSizeAttrs = function(height, width, useMaxWidth) {\n let attrs = /* @__PURE__ */ new Map();\n if (useMaxWidth) {\n attrs.set(\"width\", \"100%\");\n attrs.set(\"style\", `max-width: ${width}px;`);\n } else {\n attrs.set(\"height\", height);\n attrs.set(\"width\", width);\n }\n return attrs;\n};\nconst configureSvgSize = function(svgElem, height, width, useMaxWidth) {\n const attrs = calculateSvgSizeAttrs(height, width, useMaxWidth);\n d3Attrs(svgElem, attrs);\n};\nconst setupGraphViewbox$1 = function(graph, svgElem, padding, useMaxWidth) {\n const svgBounds = svgElem.node().getBBox();\n const sWidth = svgBounds.width;\n const sHeight = svgBounds.height;\n log$1.info(`SVG bounds: ${sWidth}x${sHeight}`, svgBounds);\n let width = 0;\n let height = 0;\n log$1.info(`Graph bounds: ${width}x${height}`, graph);\n width = sWidth + padding * 2;\n height = sHeight + padding * 2;\n log$1.info(`Calculated bounds: ${width}x${height}`);\n configureSvgSize(svgElem, height, width, useMaxWidth);\n const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${svgBounds.width + 2 * padding} ${svgBounds.height + 2 * padding}`;\n svgElem.attr(\"viewBox\", vBox);\n};\nconst themes = {};\nconst getStyles = (type2, userStyles, options) => {\n let diagramStyles = \"\";\n if (type2 in themes && themes[type2]) {\n diagramStyles = themes[type2](options);\n } else {\n log$1.warn(`No theme found for ${type2}`);\n }\n return ` & {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n fill: ${options.textColor}\n }\n\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${options.errorBkgColor};\n }\n & .error-text {\n fill: ${options.errorTextColor};\n stroke: ${options.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 2px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${options.lineColor};\n stroke: ${options.lineColor};\n }\n & .marker.cross {\n stroke: ${options.lineColor};\n }\n\n & svg {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n }\n\n ${diagramStyles}\n\n ${userStyles}\n`;\n};\nconst addStylesForDiagram = (type2, diagramTheme) => {\n if (diagramTheme !== void 0) {\n themes[type2] = diagramTheme;\n }\n};\nconst getStyles$1 = getStyles;\nlet accTitle = \"\";\nlet diagramTitle = \"\";\nlet accDescription = \"\";\nconst sanitizeText$1 = (txt) => sanitizeText$2(txt, getConfig$1());\nconst clear = () => {\n accTitle = \"\";\n accDescription = \"\";\n diagramTitle = \"\";\n};\nconst setAccTitle = (txt) => {\n accTitle = sanitizeText$1(txt).replace(/^\\s+/g, \"\");\n};\nconst getAccTitle = () => accTitle;\nconst setAccDescription = (txt) => {\n accDescription = sanitizeText$1(txt).replace(/\\n\\s+/g, \"\\n\");\n};\nconst getAccDescription = () => accDescription;\nconst setDiagramTitle = (txt) => {\n diagramTitle = sanitizeText$1(txt);\n};\nconst getDiagramTitle = () => diagramTitle;\nconst commonDb = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n clear,\n getAccDescription,\n getAccTitle,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle\n}, Symbol.toStringTag, { value: \"Module\" }));\nconst log = log$1;\nconst setLogLevel = setLogLevel$1;\nconst getConfig = getConfig$1;\nconst setConfig = setConfig$1;\nconst defaultConfig = defaultConfig$1;\nconst sanitizeText = (text) => sanitizeText$2(text, getConfig());\nconst setupGraphViewbox = setupGraphViewbox$1;\nconst getCommonDb = () => {\n return commonDb;\n};\nconst diagrams = {};\nconst registerDiagram = (id2, diagram2, detector2) => {\n var _a;\n if (diagrams[id2]) {\n throw new Error(`Diagram ${id2} already registered.`);\n }\n diagrams[id2] = diagram2;\n if (detector2) {\n addDetector(id2, detector2);\n }\n addStylesForDiagram(id2, diagram2.styles);\n (_a = diagram2.injectUtils) == null ? void 0 : _a.call(\n diagram2,\n log,\n setLogLevel,\n getConfig,\n sanitizeText,\n setupGraphViewbox,\n getCommonDb(),\n () => {\n }\n );\n};\nconst getDiagram = (name) => {\n if (name in diagrams) {\n return diagrams[name];\n }\n throw new DiagramNotFoundError(name);\n};\nclass DiagramNotFoundError extends Error {\n constructor(name) {\n super(`Diagram ${name} not found.`);\n }\n}\nconst selectSvgElement = (id2) => {\n var _a;\n const { securityLevel } = getConfig();\n let root = select(\"body\");\n if (securityLevel === \"sandbox\") {\n const sandboxElement = select(`#i${id2}`);\n const doc = ((_a = sandboxElement.node()) == null ? void 0 : _a.contentDocument) ?? document;\n root = select(doc.body);\n }\n const svg = root.select(`#${id2}`);\n return svg;\n};\nconst draw = (_text, id2, version2) => {\n log$1.debug(\"rendering svg for syntax error\\n\");\n const svg = selectSvgElement(id2);\n const g = svg.append(\"g\");\n svg.attr(\"viewBox\", \"0 0 2412 512\");\n configureSvgSize(svg, 100, 512, true);\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z\"\n );\n g.append(\"path\").attr(\"class\", \"error-icon\").attr(\n \"d\",\n \"m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z\"\n );\n g.append(\"text\").attr(\"class\", \"error-text\").attr(\"x\", 1440).attr(\"y\", 250).attr(\"font-size\", \"150px\").style(\"text-anchor\", \"middle\").text(\"Syntax error in text\");\n g.append(\"text\").attr(\"class\", \"error-text\").attr(\"x\", 1250).attr(\"y\", 400).attr(\"font-size\", \"100px\").style(\"text-anchor\", \"middle\").text(`mermaid version ${version2}`);\n};\nconst renderer = { draw };\nconst errorRenderer = renderer;\nconst diagram = {\n db: {},\n renderer,\n parser: {\n parser: { yy: {} },\n parse: () => {\n return;\n }\n }\n};\nconst errorDiagram = diagram;\nconst id$4 = \"flowchart-elk\";\nconst detector$4 = (txt, config2) => {\n var _a;\n if (\n // If diagram explicitly states flowchart-elk\n /^\\s*flowchart-elk/.test(txt) || // If a flowchart/graph diagram has their default renderer set to elk\n /^\\s*flowchart|graph/.test(txt) && ((_a = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _a.defaultRenderer) === \"elk\"\n ) {\n return true;\n }\n return false;\n};\nconst loader$5 = async () => {\n const { diagram: diagram2 } = await import(\"./flowchart-elk-definition-ae0efee6.js\");\n return { id: id$4, diagram: diagram2 };\n};\nconst plugin$4 = {\n id: id$4,\n detector: detector$4,\n loader: loader$5\n};\nconst flowchartElk = plugin$4;\nconst id$3 = \"timeline\";\nconst detector$3 = (txt) => {\n return /^\\s*timeline/.test(txt);\n};\nconst loader$4 = async () => {\n const { diagram: diagram2 } = await import(\"./timeline-definition-bf702344.js\");\n return { id: id$3, diagram: diagram2 };\n};\nconst plugin$3 = {\n id: id$3,\n detector: detector$3,\n loader: loader$4\n};\nconst timeline = plugin$3;\nconst id$2 = \"mindmap\";\nconst detector$2 = (txt) => {\n return /^\\s*mindmap/.test(txt);\n};\nconst loader$3 = async () => {\n const { diagram: diagram2 } = await import(\"./mindmap-definition-307c710a.js\");\n return { id: id$2, diagram: diagram2 };\n};\nconst plugin$2 = {\n id: id$2,\n detector: detector$2,\n loader: loader$3\n};\nconst mindmap = plugin$2;\nconst id$1 = \"sankey\";\nconst detector$1 = (txt) => {\n return /^\\s*sankey-beta/.test(txt);\n};\nconst loader$2 = async () => {\n const { diagram: diagram2 } = await import(\"./sankeyDiagram-707fac0f.js\");\n return { id: id$1, diagram: diagram2 };\n};\nconst plugin$1 = {\n id: id$1,\n detector: detector$1,\n loader: loader$2\n};\nconst sankey = plugin$1;\nconst id = \"block\";\nconst detector = (txt) => {\n return /^\\s*block-beta/.test(txt);\n};\nconst loader$1 = async () => {\n const { diagram: diagram2 } = await import(\"./blockDiagram-9f4a6865.js\");\n return { id, diagram: diagram2 };\n};\nconst plugin = {\n id,\n detector,\n loader: loader$1\n};\nconst block = plugin;\nlet hasLoadedDiagrams = false;\nconst addDiagrams = () => {\n if (hasLoadedDiagrams) {\n return;\n }\n hasLoadedDiagrams = true;\n registerDiagram(\"error\", errorDiagram, (text) => {\n return text.toLowerCase().trim() === \"error\";\n });\n registerDiagram(\n \"---\",\n // --- diagram type may appear if YAML front-matter is not parsed correctly\n {\n db: {\n clear: () => {\n }\n },\n styles: {},\n // should never be used\n renderer: {\n draw: () => {\n }\n },\n parser: {\n parser: { yy: {} },\n parse: () => {\n throw new Error(\n \"Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks\"\n );\n }\n },\n init: () => null\n // no op\n },\n (text) => {\n return text.toLowerCase().trimStart().startsWith(\"---\");\n }\n );\n registerLazyLoadedDiagrams(\n c4,\n classDiagramV2,\n classDiagram,\n er,\n gantt,\n info,\n pie,\n requirement,\n sequence,\n flowchartElk,\n flowchartV2,\n flowchart,\n mindmap,\n timeline,\n git,\n stateV2,\n state,\n journey,\n quadrantChart,\n sankey,\n xychart,\n block\n );\n};\nclass Diagram {\n constructor(text, metadata = {}) {\n this.text = text;\n this.metadata = metadata;\n this.type = \"graph\";\n this.text = encodeEntities(text);\n this.text += \"\\n\";\n const cnf = getConfig$1();\n try {\n this.type = detectType(text, cnf);\n } catch (e) {\n this.type = \"error\";\n this.detectError = e;\n }\n const diagram2 = getDiagram(this.type);\n log$1.debug(\"Type \" + this.type);\n this.db = diagram2.db;\n this.renderer = diagram2.renderer;\n this.parser = diagram2.parser;\n this.parser.parser.yy = this.db;\n this.init = diagram2.init;\n this.parse();\n }\n parse() {\n var _a, _b, _c, _d, _e;\n if (this.detectError) {\n throw this.detectError;\n }\n (_b = (_a = this.db).clear) == null ? void 0 : _b.call(_a);\n const config2 = getConfig$1();\n (_c = this.init) == null ? void 0 : _c.call(this, config2);\n if (this.metadata.title) {\n (_e = (_d = this.db).setDiagramTitle) == null ? void 0 : _e.call(_d, this.metadata.title);\n }\n this.parser.parse(this.text);\n }\n async render(id2, version2) {\n await this.renderer.draw(this.text, id2, version2, this);\n }\n getParser() {\n return this.parser;\n }\n getType() {\n return this.type;\n }\n}\nconst getDiagramFromText$1 = async (text, metadata = {}) => {\n const type2 = detectType(text, getConfig$1());\n try {\n getDiagram(type2);\n } catch (error) {\n const loader2 = getDiagramLoader(type2);\n if (!loader2) {\n throw new UnknownDiagramError(`Diagram ${type2} not found.`);\n }\n const { id: id2, diagram: diagram2 } = await loader2();\n registerDiagram(id2, diagram2);\n }\n return new Diagram(text, metadata);\n};\nlet interactionFunctions = [];\nconst attachFunctions = () => {\n interactionFunctions.forEach((f) => {\n f();\n });\n interactionFunctions = [];\n};\nconst SVG_ROLE = \"graphics-document document\";\nfunction setA11yDiagramInfo(svg, diagramType) {\n svg.attr(\"role\", SVG_ROLE);\n if (diagramType !== \"\") {\n svg.attr(\"aria-roledescription\", diagramType);\n }\n}\nfunction addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, baseId) {\n if (svg.insert === void 0) {\n return;\n }\n if (a11yDesc) {\n const descId = `chart-desc-${baseId}`;\n svg.attr(\"aria-describedby\", descId);\n svg.insert(\"desc\", \":first-child\").attr(\"id\", descId).text(a11yDesc);\n }\n if (a11yTitle) {\n const titleId = `chart-title-${baseId}`;\n svg.attr(\"aria-labelledby\", titleId);\n svg.insert(\"title\", \":first-child\").attr(\"id\", titleId).text(a11yTitle);\n }\n}\nconst cleanupComments = (text) => {\n return text.replace(/^\\s*%%(?!{)[^\\n]+\\n?/gm, \"\").trimStart();\n};\n/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */\nfunction isNothing(subject) {\n return typeof subject === \"undefined\" || subject === null;\n}\nfunction isObject(subject) {\n return typeof subject === \"object\" && subject !== null;\n}\nfunction toArray(sequence2) {\n if (Array.isArray(sequence2))\n return sequence2;\n else if (isNothing(sequence2))\n return [];\n return [sequence2];\n}\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n if (source) {\n sourceKeys = Object.keys(source);\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction repeat(string, count) {\n var result = \"\", cycle;\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n return result;\n}\nfunction isNegativeZero(number) {\n return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;\n}\nvar isNothing_1 = isNothing;\nvar isObject_1 = isObject;\nvar toArray_1 = toArray;\nvar repeat_1 = repeat;\nvar isNegativeZero_1 = isNegativeZero;\nvar extend_1 = extend;\nvar common = {\n isNothing: isNothing_1,\n isObject: isObject_1,\n toArray: toArray_1,\n repeat: repeat_1,\n isNegativeZero: isNegativeZero_1,\n extend: extend_1\n};\nfunction formatError(exception2, compact) {\n var where = \"\", message = exception2.reason || \"(unknown reason)\";\n if (!exception2.mark)\n return message;\n if (exception2.mark.name) {\n where += 'in \"' + exception2.mark.name + '\" ';\n }\n where += \"(\" + (exception2.mark.line + 1) + \":\" + (exception2.mark.column + 1) + \")\";\n if (!compact && exception2.mark.snippet) {\n where += \"\\n\\n\" + exception2.mark.snippet;\n }\n return message + \" \" + where;\n}\nfunction YAMLException$1(reason, mark) {\n Error.call(this);\n this.name = \"YAMLException\";\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = new Error().stack || \"\";\n }\n}\nYAMLException$1.prototype = Object.create(Error.prototype);\nYAMLException$1.prototype.constructor = YAMLException$1;\nYAMLException$1.prototype.toString = function toString(compact) {\n return this.name + \": \" + formatError(this, compact);\n};\nvar exception = YAMLException$1;\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = \"\";\n var tail = \"\";\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n if (position - lineStart > maxHalfLength) {\n head = \" ... \";\n lineStart = position - maxHalfLength + head.length;\n }\n if (lineEnd - position > maxHalfLength) {\n tail = \" ...\";\n lineEnd = position + maxHalfLength - tail.length;\n }\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, \"\u2192\") + tail,\n pos: position - lineStart + head.length\n // relative position\n };\n}\nfunction padStart(string, max) {\n return common.repeat(\" \", max - string.length) + string;\n}\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n if (!mark.buffer)\n return null;\n if (!options.maxLength)\n options.maxLength = 79;\n if (typeof options.indent !== \"number\")\n options.indent = 1;\n if (typeof options.linesBefore !== \"number\")\n options.linesBefore = 3;\n if (typeof options.linesAfter !== \"number\")\n options.linesAfter = 2;\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [0];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n while (match = re.exec(mark.buffer)) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n if (foundLineNo < 0)\n foundLineNo = lineStarts.length - 1;\n var result = \"\", i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0)\n break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(\" \", options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\" + result;\n }\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(\" \", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n result += common.repeat(\"-\", options.indent + lineNoLength + 3 + line.pos) + \"^\\n\";\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length)\n break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(\" \", options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + \" | \" + line.str + \"\\n\";\n }\n return result.replace(/\\n$/, \"\");\n}\nvar snippet = makeSnippet;\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n \"kind\",\n \"multi\",\n \"resolve\",\n \"construct\",\n \"instanceOf\",\n \"predicate\",\n \"represent\",\n \"representName\",\n \"defaultStyle\",\n \"styleAliases\"\n];\nvar YAML_NODE_KINDS = [\n \"scalar\",\n \"sequence\",\n \"mapping\"\n];\nfunction compileStyleAliases(map2) {\n var result = {};\n if (map2 !== null) {\n Object.keys(map2).forEach(function(style) {\n map2[style].forEach(function(alias) {\n result[String(alias)] = style;\n });\n });\n }\n return result;\n}\nfunction Type$1(tag, options) {\n options = options || {};\n Object.keys(options).forEach(function(name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new exception('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n this.options = options;\n this.tag = tag;\n this.kind = options[\"kind\"] || null;\n this.resolve = options[\"resolve\"] || function() {\n return true;\n };\n this.construct = options[\"construct\"] || function(data) {\n return data;\n };\n this.instanceOf = options[\"instanceOf\"] || null;\n this.predicate = options[\"predicate\"] || null;\n this.represent = options[\"represent\"] || null;\n this.representName = options[\"representName\"] || null;\n this.defaultStyle = options[\"defaultStyle\"] || null;\n this.multi = options[\"multi\"] || false;\n this.styleAliases = compileStyleAliases(options[\"styleAliases\"] || null);\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new exception('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\nvar type = Type$1;\nfunction compileList(schema2, name) {\n var result = [];\n schema2[name].forEach(function(currentType) {\n var newIndex = result.length;\n result.forEach(function(previousType, previousIndex) {\n if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) {\n newIndex = previousIndex;\n }\n });\n result[newIndex] = currentType;\n });\n return result;\n}\nfunction compileMap() {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n function collectType(type2) {\n if (type2.multi) {\n result.multi[type2.kind].push(type2);\n result.multi[\"fallback\"].push(type2);\n } else {\n result[type2.kind][type2.tag] = result[\"fallback\"][type2.tag] = type2;\n }\n }\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\nfunction Schema$1(definition) {\n return this.extend(definition);\n}\nSchema$1.prototype.extend = function extend2(definition) {\n var implicit = [];\n var explicit = [];\n if (definition instanceof type) {\n explicit.push(definition);\n } else if (Array.isArray(definition)) {\n explicit = explicit.concat(definition);\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n if (definition.implicit)\n implicit = implicit.concat(definition.implicit);\n if (definition.explicit)\n explicit = explicit.concat(definition.explicit);\n } else {\n throw new exception(\"Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })\");\n }\n implicit.forEach(function(type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n }\n if (type$1.loadKind && type$1.loadKind !== \"scalar\") {\n throw new exception(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\");\n }\n if (type$1.multi) {\n throw new exception(\"There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.\");\n }\n });\n explicit.forEach(function(type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");\n }\n });\n var result = Object.create(Schema$1.prototype);\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n result.compiledImplicit = compileList(result, \"implicit\");\n result.compiledExplicit = compileList(result, \"explicit\");\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n return result;\n};\nvar schema = Schema$1;\nvar str = new type(\"tag:yaml.org,2002:str\", {\n kind: \"scalar\",\n construct: function(data) {\n return data !== null ? data : \"\";\n }\n});\nvar seq = new type(\"tag:yaml.org,2002:seq\", {\n kind: \"sequence\",\n construct: function(data) {\n return data !== null ? data : [];\n }\n});\nvar map = new type(\"tag:yaml.org,2002:map\", {\n kind: \"mapping\",\n construct: function(data) {\n return data !== null ? data : {};\n }\n});\nvar failsafe = new schema({\n explicit: [\n str,\n seq,\n map\n ]\n});\nfunction resolveYamlNull(data) {\n if (data === null)\n return true;\n var max = data.length;\n return max === 1 && data === \"~\" || max === 4 && (data === \"null\" || data === \"Null\" || data === \"NULL\");\n}\nfunction constructYamlNull() {\n return null;\n}\nfunction isNull(object) {\n return object === null;\n}\nvar _null = new type(\"tag:yaml.org,2002:null\", {\n kind: \"scalar\",\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function() {\n return \"~\";\n },\n lowercase: function() {\n return \"null\";\n },\n uppercase: function() {\n return \"NULL\";\n },\n camelcase: function() {\n return \"Null\";\n },\n empty: function() {\n return \"\";\n }\n },\n defaultStyle: \"lowercase\"\n});\nfunction resolveYamlBoolean(data) {\n if (data === null)\n return false;\n var max = data.length;\n return max === 4 && (data === \"true\" || data === \"True\" || data === \"TRUE\") || max === 5 && (data === \"false\" || data === \"False\" || data === \"FALSE\");\n}\nfunction constructYamlBoolean(data) {\n return data === \"true\" || data === \"True\" || data === \"TRUE\";\n}\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === \"[object Boolean]\";\n}\nvar bool = new type(\"tag:yaml.org,2002:bool\", {\n kind: \"scalar\",\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function(object) {\n return object ? \"true\" : \"false\";\n },\n uppercase: function(object) {\n return object ? \"TRUE\" : \"FALSE\";\n },\n camelcase: function(object) {\n return object ? \"True\" : \"False\";\n }\n },\n defaultStyle: \"lowercase\"\n});\nfunction isHexCode(c) {\n return 48 <= c && c <= 57 || 65 <= c && c <= 70 || 97 <= c && c <= 102;\n}\nfunction isOctCode(c) {\n return 48 <= c && c <= 55;\n}\nfunction isDecCode(c) {\n return 48 <= c && c <= 57;\n}\nfunction resolveYamlInteger(data) {\n if (data === null)\n return false;\n var max = data.length, index = 0, hasDigits = false, ch;\n if (!max)\n return false;\n ch = data[index];\n if (ch === \"-\" || ch === \"+\") {\n ch = data[++index];\n }\n if (ch === \"0\") {\n if (index + 1 === max)\n return true;\n ch = data[++index];\n if (ch === \"b\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\")\n continue;\n if (ch !== \"0\" && ch !== \"1\")\n return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n if (ch === \"x\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\")\n continue;\n if (!isHexCode(data.charCodeAt(index)))\n return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n if (ch === \"o\") {\n index++;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\")\n continue;\n if (!isOctCode(data.charCodeAt(index)))\n return false;\n hasDigits = true;\n }\n return hasDigits && ch !== \"_\";\n }\n }\n if (ch === \"_\")\n return false;\n for (; index < max; index++) {\n ch = data[index];\n if (ch === \"_\")\n continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n if (!hasDigits || ch === \"_\")\n return false;\n return true;\n}\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n if (value.indexOf(\"_\") !== -1) {\n value = value.replace(/_/g, \"\");\n }\n ch = value[0];\n if (ch === \"-\" || ch === \"+\") {\n if (ch === \"-\")\n sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n if (value === \"0\")\n return 0;\n if (ch === \"0\") {\n if (value[1] === \"b\")\n return sign * parseInt(value.slice(2), 2);\n if (value[1] === \"x\")\n return sign * parseInt(value.slice(2), 16);\n if (value[1] === \"o\")\n return sign * parseInt(value.slice(2), 8);\n }\n return sign * parseInt(value, 10);\n}\nfunction isInteger(object) {\n return Object.prototype.toString.call(object) === \"[object Number]\" && (object % 1 === 0 && !common.isNegativeZero(object));\n}\nvar int = new type(\"tag:yaml.org,2002:int\", {\n kind: \"scalar\",\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function(obj) {\n return obj >= 0 ? \"0b\" + obj.toString(2) : \"-0b\" + obj.toString(2).slice(1);\n },\n octal: function(obj) {\n return obj >= 0 ? \"0o\" + obj.toString(8) : \"-0o\" + obj.toString(8).slice(1);\n },\n decimal: function(obj) {\n return obj.toString(10);\n },\n /* eslint-disable max-len */\n hexadecimal: function(obj) {\n return obj >= 0 ? \"0x\" + obj.toString(16).toUpperCase() : \"-0x\" + obj.toString(16).toUpperCase().slice(1);\n }\n },\n defaultStyle: \"decimal\",\n styleAliases: {\n binary: [2, \"bin\"],\n octal: [8, \"oct\"],\n decimal: [10, \"dec\"],\n hexadecimal: [16, \"hex\"]\n }\n});\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n \"^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\"\n);\nfunction resolveYamlFloat(data) {\n if (data === null)\n return false;\n if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === \"_\") {\n return false;\n }\n return true;\n}\nfunction constructYamlFloat(data) {\n var value, sign;\n value = data.replace(/_/g, \"\").toLowerCase();\n sign = value[0] === \"-\" ? -1 : 1;\n if (\"+-\".indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n if (value === \".inf\") {\n return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n } else if (value === \".nan\") {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\nfunction representYamlFloat(object, style) {\n var res;\n if (isNaN(object)) {\n switch (style) {\n case \"lowercase\":\n return \".nan\";\n case \"uppercase\":\n return \".NAN\";\n case \"camelcase\":\n return \".NaN\";\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case \"lowercase\":\n return \".inf\";\n case \"uppercase\":\n return \".INF\";\n case \"camelcase\":\n return \".Inf\";\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case \"lowercase\":\n return \"-.inf\";\n case \"uppercase\":\n return \"-.INF\";\n case \"camelcase\":\n return \"-.Inf\";\n }\n } else if (common.isNegativeZero(object)) {\n return \"-0.0\";\n }\n res = object.toString(10);\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace(\"e\", \".e\") : res;\n}\nfunction isFloat(object) {\n return Object.prototype.toString.call(object) === \"[object Number]\" && (object % 1 !== 0 || common.isNegativeZero(object));\n}\nvar float = new type(\"tag:yaml.org,2002:float\", {\n kind: \"scalar\",\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: \"lowercase\"\n});\nvar json = failsafe.extend({\n implicit: [\n _null,\n bool,\n int,\n float\n ]\n});\nvar core = json;\nvar YAML_DATE_REGEXP = new RegExp(\n \"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"\n);\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n \"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\"\n);\nfunction resolveYamlTimestamp(data) {\n if (data === null)\n return false;\n if (YAML_DATE_REGEXP.exec(data) !== null)\n return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null)\n return true;\n return false;\n}\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date;\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null)\n match = YAML_TIMESTAMP_REGEXP.exec(data);\n if (match === null)\n throw new Error(\"Date resolve error\");\n year = +match[1];\n month = +match[2] - 1;\n day = +match[3];\n if (!match[4]) {\n return new Date(Date.UTC(year, month, day));\n }\n hour = +match[4];\n minute = +match[5];\n second = +match[6];\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) {\n fraction += \"0\";\n }\n fraction = +fraction;\n }\n if (match[9]) {\n tz_hour = +match[10];\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 6e4;\n if (match[9] === \"-\")\n delta = -delta;\n }\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n if (delta)\n date.setTime(date.getTime() - delta);\n return date;\n}\nfunction representYamlTimestamp(object) {\n return object.toISOString();\n}\nvar timestamp = new type(\"tag:yaml.org,2002:timestamp\", {\n kind: \"scalar\",\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\nfunction resolveYamlMerge(data) {\n return data === \"<<\" || data === null;\n}\nvar merge = new type(\"tag:yaml.org,2002:merge\", {\n kind: \"scalar\",\n resolve: resolveYamlMerge\n});\nvar BASE64_MAP = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r\";\nfunction resolveYamlBinary(data) {\n if (data === null)\n return false;\n var code, idx, bitlen = 0, max = data.length, map2 = BASE64_MAP;\n for (idx = 0; idx < max; idx++) {\n code = map2.indexOf(data.charAt(idx));\n if (code > 64)\n continue;\n if (code < 0)\n return false;\n bitlen += 6;\n }\n return bitlen % 8 === 0;\n}\nfunction constructYamlBinary(data) {\n var idx, tailbits, input = data.replace(/[\\r\\n=]/g, \"\"), max = input.length, map2 = BASE64_MAP, bits = 0, result = [];\n for (idx = 0; idx < max; idx++) {\n if (idx % 4 === 0 && idx) {\n result.push(bits >> 16 & 255);\n result.push(bits >> 8 & 255);\n result.push(bits & 255);\n }\n bits = bits << 6 | map2.indexOf(input.charAt(idx));\n }\n tailbits = max % 4 * 6;\n if (tailbits === 0) {\n result.push(bits >> 16 & 255);\n result.push(bits >> 8 & 255);\n result.push(bits & 255);\n } else if (tailbits === 18) {\n result.push(bits >> 10 & 255);\n result.push(bits >> 2 & 255);\n } else if (tailbits === 12) {\n result.push(bits >> 4 & 255);\n }\n return new Uint8Array(result);\n}\nfunction representYamlBinary(object) {\n var result = \"\", bits = 0, idx, tail, max = object.length, map2 = BASE64_MAP;\n for (idx = 0; idx < max; idx++) {\n if (idx % 3 === 0 && idx) {\n result += map2[bits >> 18 & 63];\n result += map2[bits >> 12 & 63];\n result += map2[bits >> 6 & 63];\n result += map2[bits & 63];\n }\n bits = (bits << 8) + object[idx];\n }\n tail = max % 3;\n if (tail === 0) {\n result += map2[bits >> 18 & 63];\n result += map2[bits >> 12 & 63];\n result += map2[bits >> 6 & 63];\n result += map2[bits & 63];\n } else if (tail === 2) {\n result += map2[bits >> 10 & 63];\n result += map2[bits >> 4 & 63];\n result += map2[bits << 2 & 63];\n result += map2[64];\n } else if (tail === 1) {\n result += map2[bits >> 2 & 63];\n result += map2[bits << 4 & 63];\n result += map2[64];\n result += map2[64];\n }\n return result;\n}\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === \"[object Uint8Array]\";\n}\nvar binary = new type(\"tag:yaml.org,2002:binary\", {\n kind: \"scalar\",\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\nvar _hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nvar _toString$2 = Object.prototype.toString;\nfunction resolveYamlOmap(data) {\n if (data === null)\n return true;\n var objectKeys = [], index, length, pair, pairKey, pairHasKey, object = data;\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n if (_toString$2.call(pair) !== \"[object Object]\")\n return false;\n for (pairKey in pair) {\n if (_hasOwnProperty$3.call(pair, pairKey)) {\n if (!pairHasKey)\n pairHasKey = true;\n else\n return false;\n }\n }\n if (!pairHasKey)\n return false;\n if (objectKeys.indexOf(pairKey) === -1)\n objectKeys.push(pairKey);\n else\n return false;\n }\n return true;\n}\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\nvar omap = new type(\"tag:yaml.org,2002:omap\", {\n kind: \"sequence\",\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\nvar _toString$1 = Object.prototype.toString;\nfunction resolveYamlPairs(data) {\n if (data === null)\n return true;\n var index, length, pair, keys, result, object = data;\n result = new Array(object.length);\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n if (_toString$1.call(pair) !== \"[object Object]\")\n return false;\n keys = Object.keys(pair);\n if (keys.length !== 1)\n return false;\n result[index] = [keys[0], pair[keys[0]]];\n }\n return true;\n}\nfunction constructYamlPairs(data) {\n if (data === null)\n return [];\n var index, length, pair, keys, result, object = data;\n result = new Array(object.length);\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n keys = Object.keys(pair);\n result[index] = [keys[0], pair[keys[0]]];\n }\n return result;\n}\nvar pairs = new type(\"tag:yaml.org,2002:pairs\", {\n kind: \"sequence\",\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\nvar _hasOwnProperty$2 = Object.prototype.hasOwnProperty;\nfunction resolveYamlSet(data) {\n if (data === null)\n return true;\n var key, object = data;\n for (key in object) {\n if (_hasOwnProperty$2.call(object, key)) {\n if (object[key] !== null)\n return false;\n }\n }\n return true;\n}\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\nvar set = new type(\"tag:yaml.org,2002:set\", {\n kind: \"mapping\",\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\nvar _default = core.extend({\n implicit: [\n timestamp,\n merge\n ],\n explicit: [\n binary,\n omap,\n pairs,\n set\n ]\n});\nvar _hasOwnProperty$1 = Object.prototype.hasOwnProperty;\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\nfunction _class(obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction is_EOL(c) {\n return c === 10 || c === 13;\n}\nfunction is_WHITE_SPACE(c) {\n return c === 9 || c === 32;\n}\nfunction is_WS_OR_EOL(c) {\n return c === 9 || c === 32 || c === 10 || c === 13;\n}\nfunction is_FLOW_INDICATOR(c) {\n return c === 44 || c === 91 || c === 93 || c === 123 || c === 125;\n}\nfunction fromHexCode(c) {\n var lc;\n if (48 <= c && c <= 57) {\n return c - 48;\n }\n lc = c | 32;\n if (97 <= lc && lc <= 102) {\n return lc - 97 + 10;\n }\n return -1;\n}\nfunction escapedHexLen(c) {\n if (c === 120) {\n return 2;\n }\n if (c === 117) {\n return 4;\n }\n if (c === 85) {\n return 8;\n }\n return 0;\n}\nfunction fromDecimalCode(c) {\n if (48 <= c && c <= 57) {\n return c - 48;\n }\n return -1;\n}\nfunction simpleEscapeSequence(c) {\n return c === 48 ? \"\\0\" : c === 97 ? \"\\x07\" : c === 98 ? \"\\b\" : c === 116 ? \"\t\" : c === 9 ? \"\t\" : c === 110 ? \"\\n\" : c === 118 ? \"\\v\" : c === 102 ? \"\\f\" : c === 114 ? \"\\r\" : c === 101 ? \"\\x1B\" : c === 32 ? \" \" : c === 34 ? '\"' : c === 47 ? \"/\" : c === 92 ? \"\\\\\" : c === 78 ? \"\u0085\" : c === 95 ? \"\u00A0\" : c === 76 ? \"\\u2028\" : c === 80 ? \"\\u2029\" : \"\";\n}\nfunction charFromCodepoint(c) {\n if (c <= 65535) {\n return String.fromCharCode(c);\n }\n return String.fromCharCode(\n (c - 65536 >> 10) + 55296,\n (c - 65536 & 1023) + 56320\n );\n}\nvar simpleEscapeCheck = new Array(256);\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\nfunction State$1(input, options) {\n this.input = input;\n this.filename = options[\"filename\"] || null;\n this.schema = options[\"schema\"] || _default;\n this.onWarning = options[\"onWarning\"] || null;\n this.legacy = options[\"legacy\"] || false;\n this.json = options[\"json\"] || false;\n this.listener = options[\"listener\"] || null;\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n this.firstTabInLine = -1;\n this.documents = [];\n}\nfunction generateError(state2, message) {\n var mark = {\n name: state2.filename,\n buffer: state2.input.slice(0, -1),\n // omit trailing \\0\n position: state2.position,\n line: state2.line,\n column: state2.position - state2.lineStart\n };\n mark.snippet = snippet(mark);\n return new exception(message, mark);\n}\nfunction throwError(state2, message) {\n throw generateError(state2, message);\n}\nfunction throwWarning(state2, message) {\n if (state2.onWarning) {\n state2.onWarning.call(null, generateError(state2, message));\n }\n}\nvar directiveHandlers = {\n YAML: function handleYamlDirective(state2, name, args) {\n var match, major, minor;\n if (state2.version !== null) {\n throwError(state2, \"duplication of %YAML directive\");\n }\n if (args.length !== 1) {\n throwError(state2, \"YAML directive accepts exactly one argument\");\n }\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n if (match === null) {\n throwError(state2, \"ill-formed argument of the YAML directive\");\n }\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n if (major !== 1) {\n throwError(state2, \"unacceptable YAML version of the document\");\n }\n state2.version = args[0];\n state2.checkLineBreaks = minor < 2;\n if (minor !== 1 && minor !== 2) {\n throwWarning(state2, \"unsupported YAML version of the document\");\n }\n },\n TAG: function handleTagDirective(state2, name, args) {\n var handle, prefix;\n if (args.length !== 2) {\n throwError(state2, \"TAG directive accepts exactly two arguments\");\n }\n handle = args[0];\n prefix = args[1];\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state2, \"ill-formed tag handle (first argument) of the TAG directive\");\n }\n if (_hasOwnProperty$1.call(state2.tagMap, handle)) {\n throwError(state2, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state2, \"ill-formed tag prefix (second argument) of the TAG directive\");\n }\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state2, \"tag prefix is malformed: \" + prefix);\n }\n state2.tagMap[handle] = prefix;\n }\n};\nfunction captureSegment(state2, start, end, checkJson) {\n var _position, _length, _character, _result;\n if (start < end) {\n _result = state2.input.slice(start, end);\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 9 || 32 <= _character && _character <= 1114111)) {\n throwError(state2, \"expected valid JSON character\");\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state2, \"the stream contains non-printable characters\");\n }\n state2.result += _result;\n }\n}\nfunction mergeMappings(state2, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n if (!common.isObject(source)) {\n throwError(state2, \"cannot merge mappings; the provided source object is unacceptable\");\n }\n sourceKeys = Object.keys(source);\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n if (!_hasOwnProperty$1.call(destination, key)) {\n destination[key] = source[key];\n overridableKeys[key] = true;\n }\n }\n}\nfunction storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) {\n var index, quantity;\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state2, \"nested arrays are not supported inside keys\");\n }\n if (typeof keyNode === \"object\" && _class(keyNode[index]) === \"[object Object]\") {\n keyNode[index] = \"[object Object]\";\n }\n }\n }\n if (typeof keyNode === \"object\" && _class(keyNode) === \"[object Object]\") {\n keyNode = \"[object Object]\";\n }\n keyNode = String(keyNode);\n if (_result === null) {\n _result = {};\n }\n if (keyTag === \"tag:yaml.org,2002:merge\") {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state2, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state2, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state2.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) {\n state2.line = startLine || state2.line;\n state2.lineStart = startLineStart || state2.lineStart;\n state2.position = startPos || state2.position;\n throwError(state2, \"duplicated mapping key\");\n }\n if (keyNode === \"__proto__\") {\n Object.defineProperty(_result, keyNode, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: valueNode\n });\n } else {\n _result[keyNode] = valueNode;\n }\n delete overridableKeys[keyNode];\n }\n return _result;\n}\nfunction readLineBreak(state2) {\n var ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch === 10) {\n state2.position++;\n } else if (ch === 13) {\n state2.position++;\n if (state2.input.charCodeAt(state2.position) === 10) {\n state2.position++;\n }\n } else {\n throwError(state2, \"a line break is expected\");\n }\n state2.line += 1;\n state2.lineStart = state2.position;\n state2.firstTabInLine = -1;\n}\nfunction skipSeparationSpace(state2, allowComments, checkIndent) {\n var lineBreaks = 0, ch = state2.input.charCodeAt(state2.position);\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 9 && state2.firstTabInLine === -1) {\n state2.firstTabInLine = state2.position;\n }\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (allowComments && ch === 35) {\n do {\n ch = state2.input.charCodeAt(++state2.position);\n } while (ch !== 10 && ch !== 13 && ch !== 0);\n }\n if (is_EOL(ch)) {\n readLineBreak(state2);\n ch = state2.input.charCodeAt(state2.position);\n lineBreaks++;\n state2.lineIndent = 0;\n while (ch === 32) {\n state2.lineIndent++;\n ch = state2.input.charCodeAt(++state2.position);\n }\n } else {\n break;\n }\n }\n if (checkIndent !== -1 && lineBreaks !== 0 && state2.lineIndent < checkIndent) {\n throwWarning(state2, \"deficient indentation\");\n }\n return lineBreaks;\n}\nfunction testDocumentSeparator(state2) {\n var _position = state2.position, ch;\n ch = state2.input.charCodeAt(_position);\n if ((ch === 45 || ch === 46) && ch === state2.input.charCodeAt(_position + 1) && ch === state2.input.charCodeAt(_position + 2)) {\n _position += 3;\n ch = state2.input.charCodeAt(_position);\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n return false;\n}\nfunction writeFoldedLines(state2, count) {\n if (count === 1) {\n state2.result += \" \";\n } else if (count > 1) {\n state2.result += common.repeat(\"\\n\", count - 1);\n }\n}\nfunction readPlainScalar(state2, nodeIndent, withinFlowCollection) {\n var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state2.kind, _result = state2.result, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96) {\n return false;\n }\n if (ch === 63 || ch === 45) {\n following = state2.input.charCodeAt(state2.position + 1);\n if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n state2.kind = \"scalar\";\n state2.result = \"\";\n captureStart = captureEnd = state2.position;\n hasPendingContent = false;\n while (ch !== 0) {\n if (ch === 58) {\n following = state2.input.charCodeAt(state2.position + 1);\n if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n } else if (ch === 35) {\n preceding = state2.input.charCodeAt(state2.position - 1);\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n } else if (state2.position === state2.lineStart && testDocumentSeparator(state2) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n } else if (is_EOL(ch)) {\n _line = state2.line;\n _lineStart = state2.lineStart;\n _lineIndent = state2.lineIndent;\n skipSeparationSpace(state2, false, -1);\n if (state2.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state2.input.charCodeAt(state2.position);\n continue;\n } else {\n state2.position = captureEnd;\n state2.line = _line;\n state2.lineStart = _lineStart;\n state2.lineIndent = _lineIndent;\n break;\n }\n }\n if (hasPendingContent) {\n captureSegment(state2, captureStart, captureEnd, false);\n writeFoldedLines(state2, state2.line - _line);\n captureStart = captureEnd = state2.position;\n hasPendingContent = false;\n }\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state2.position + 1;\n }\n ch = state2.input.charCodeAt(++state2.position);\n }\n captureSegment(state2, captureStart, captureEnd, false);\n if (state2.result) {\n return true;\n }\n state2.kind = _kind;\n state2.result = _result;\n return false;\n}\nfunction readSingleQuotedScalar(state2, nodeIndent) {\n var ch, captureStart, captureEnd;\n ch = state2.input.charCodeAt(state2.position);\n if (ch !== 39) {\n return false;\n }\n state2.kind = \"scalar\";\n state2.result = \"\";\n state2.position++;\n captureStart = captureEnd = state2.position;\n while ((ch = state2.input.charCodeAt(state2.position)) !== 0) {\n if (ch === 39) {\n captureSegment(state2, captureStart, state2.position, true);\n ch = state2.input.charCodeAt(++state2.position);\n if (ch === 39) {\n captureStart = state2.position;\n state2.position++;\n captureEnd = state2.position;\n } else {\n return true;\n }\n } else if (is_EOL(ch)) {\n captureSegment(state2, captureStart, captureEnd, true);\n writeFoldedLines(state2, skipSeparationSpace(state2, false, nodeIndent));\n captureStart = captureEnd = state2.position;\n } else if (state2.position === state2.lineStart && testDocumentSeparator(state2)) {\n throwError(state2, \"unexpected end of the document within a single quoted scalar\");\n } else {\n state2.position++;\n captureEnd = state2.position;\n }\n }\n throwError(state2, \"unexpected end of the stream within a single quoted scalar\");\n}\nfunction readDoubleQuotedScalar(state2, nodeIndent) {\n var captureStart, captureEnd, hexLength, hexResult, tmp, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch !== 34) {\n return false;\n }\n state2.kind = \"scalar\";\n state2.result = \"\";\n state2.position++;\n captureStart = captureEnd = state2.position;\n while ((ch = state2.input.charCodeAt(state2.position)) !== 0) {\n if (ch === 34) {\n captureSegment(state2, captureStart, state2.position, true);\n state2.position++;\n return true;\n } else if (ch === 92) {\n captureSegment(state2, captureStart, state2.position, true);\n ch = state2.input.charCodeAt(++state2.position);\n if (is_EOL(ch)) {\n skipSeparationSpace(state2, false, nodeIndent);\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state2.result += simpleEscapeMap[ch];\n state2.position++;\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n for (; hexLength > 0; hexLength--) {\n ch = state2.input.charCodeAt(++state2.position);\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n } else {\n throwError(state2, \"expected hexadecimal character\");\n }\n }\n state2.result += charFromCodepoint(hexResult);\n state2.position++;\n } else {\n throwError(state2, \"unknown escape sequence\");\n }\n captureStart = captureEnd = state2.position;\n } else if (is_EOL(ch)) {\n captureSegment(state2, captureStart, captureEnd, true);\n writeFoldedLines(state2, skipSeparationSpace(state2, false, nodeIndent));\n captureStart = captureEnd = state2.position;\n } else if (state2.position === state2.lineStart && testDocumentSeparator(state2)) {\n throwError(state2, \"unexpected end of the document within a double quoted scalar\");\n } else {\n state2.position++;\n captureEnd = state2.position;\n }\n }\n throwError(state2, \"unexpected end of the stream within a double quoted scalar\");\n}\nfunction readFlowCollection(state2, nodeIndent) {\n var readNext = true, _line, _lineStart, _pos, _tag = state2.tag, _result, _anchor = state2.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = /* @__PURE__ */ Object.create(null), keyNode, keyTag, valueNode, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch === 91) {\n terminator = 93;\n isMapping = false;\n _result = [];\n } else if (ch === 123) {\n terminator = 125;\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = _result;\n }\n ch = state2.input.charCodeAt(++state2.position);\n while (ch !== 0) {\n skipSeparationSpace(state2, true, nodeIndent);\n ch = state2.input.charCodeAt(state2.position);\n if (ch === terminator) {\n state2.position++;\n state2.tag = _tag;\n state2.anchor = _anchor;\n state2.kind = isMapping ? \"mapping\" : \"sequence\";\n state2.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state2, \"missed comma between flow collection entries\");\n } else if (ch === 44) {\n throwError(state2, \"expected the node content, but found ','\");\n }\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n if (ch === 63) {\n following = state2.input.charCodeAt(state2.position + 1);\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state2.position++;\n skipSeparationSpace(state2, true, nodeIndent);\n }\n }\n _line = state2.line;\n _lineStart = state2.lineStart;\n _pos = state2.position;\n composeNode(state2, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state2.tag;\n keyNode = state2.result;\n skipSeparationSpace(state2, true, nodeIndent);\n ch = state2.input.charCodeAt(state2.position);\n if ((isExplicitPair || state2.line === _line) && ch === 58) {\n isPair = true;\n ch = state2.input.charCodeAt(++state2.position);\n skipSeparationSpace(state2, true, nodeIndent);\n composeNode(state2, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state2.result;\n }\n if (isMapping) {\n storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state2, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n skipSeparationSpace(state2, true, nodeIndent);\n ch = state2.input.charCodeAt(state2.position);\n if (ch === 44) {\n readNext = true;\n ch = state2.input.charCodeAt(++state2.position);\n } else {\n readNext = false;\n }\n }\n throwError(state2, \"unexpected end of the stream within a flow collection\");\n}\nfunction readBlockScalar(state2, nodeIndent) {\n var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch === 124) {\n folding = false;\n } else if (ch === 62) {\n folding = true;\n } else {\n return false;\n }\n state2.kind = \"scalar\";\n state2.result = \"\";\n while (ch !== 0) {\n ch = state2.input.charCodeAt(++state2.position);\n if (ch === 43 || ch === 45) {\n if (CHOMPING_CLIP === chomping) {\n chomping = ch === 43 ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state2, \"repeat of a chomping mode identifier\");\n }\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state2, \"bad explicit indentation width of a block scalar; it cannot be less than one\");\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state2, \"repeat of an indentation width identifier\");\n }\n } else {\n break;\n }\n }\n if (is_WHITE_SPACE(ch)) {\n do {\n ch = state2.input.charCodeAt(++state2.position);\n } while (is_WHITE_SPACE(ch));\n if (ch === 35) {\n do {\n ch = state2.input.charCodeAt(++state2.position);\n } while (!is_EOL(ch) && ch !== 0);\n }\n }\n while (ch !== 0) {\n readLineBreak(state2);\n state2.lineIndent = 0;\n ch = state2.input.charCodeAt(state2.position);\n while ((!detectedIndent || state2.lineIndent < textIndent) && ch === 32) {\n state2.lineIndent++;\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (!detectedIndent && state2.lineIndent > textIndent) {\n textIndent = state2.lineIndent;\n }\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n if (state2.lineIndent < textIndent) {\n if (chomping === CHOMPING_KEEP) {\n state2.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) {\n state2.result += \"\\n\";\n }\n }\n break;\n }\n if (folding) {\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n state2.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state2.result += common.repeat(\"\\n\", emptyLines + 1);\n } else if (emptyLines === 0) {\n if (didReadContent) {\n state2.result += \" \";\n }\n } else {\n state2.result += common.repeat(\"\\n\", emptyLines);\n }\n } else {\n state2.result += common.repeat(\"\\n\", didReadContent ? 1 + emptyLines : emptyLines);\n }\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state2.position;\n while (!is_EOL(ch) && ch !== 0) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n captureSegment(state2, captureStart, state2.position, false);\n }\n return true;\n}\nfunction readBlockSequence(state2, nodeIndent) {\n var _line, _tag = state2.tag, _anchor = state2.anchor, _result = [], following, detected = false, ch;\n if (state2.firstTabInLine !== -1)\n return false;\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = _result;\n }\n ch = state2.input.charCodeAt(state2.position);\n while (ch !== 0) {\n if (state2.firstTabInLine !== -1) {\n state2.position = state2.firstTabInLine;\n throwError(state2, \"tab characters must not be used in indentation\");\n }\n if (ch !== 45) {\n break;\n }\n following = state2.input.charCodeAt(state2.position + 1);\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n detected = true;\n state2.position++;\n if (skipSeparationSpace(state2, true, -1)) {\n if (state2.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state2.input.charCodeAt(state2.position);\n continue;\n }\n }\n _line = state2.line;\n composeNode(state2, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state2.result);\n skipSeparationSpace(state2, true, -1);\n ch = state2.input.charCodeAt(state2.position);\n if ((state2.line === _line || state2.lineIndent > nodeIndent) && ch !== 0) {\n throwError(state2, \"bad indentation of a sequence entry\");\n } else if (state2.lineIndent < nodeIndent) {\n break;\n }\n }\n if (detected) {\n state2.tag = _tag;\n state2.anchor = _anchor;\n state2.kind = \"sequence\";\n state2.result = _result;\n return true;\n }\n return false;\n}\nfunction readBlockMapping(state2, nodeIndent, flowIndent) {\n var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state2.tag, _anchor = state2.anchor, _result = {}, overridableKeys = /* @__PURE__ */ Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;\n if (state2.firstTabInLine !== -1)\n return false;\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = _result;\n }\n ch = state2.input.charCodeAt(state2.position);\n while (ch !== 0) {\n if (!atExplicitKey && state2.firstTabInLine !== -1) {\n state2.position = state2.firstTabInLine;\n throwError(state2, \"tab characters must not be used in indentation\");\n }\n following = state2.input.charCodeAt(state2.position + 1);\n _line = state2.line;\n if ((ch === 63 || ch === 58) && is_WS_OR_EOL(following)) {\n if (ch === 63) {\n if (atExplicitKey) {\n storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n } else if (atExplicitKey) {\n atExplicitKey = false;\n allowCompact = true;\n } else {\n throwError(state2, \"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\");\n }\n state2.position += 1;\n ch = following;\n } else {\n _keyLine = state2.line;\n _keyLineStart = state2.lineStart;\n _keyPos = state2.position;\n if (!composeNode(state2, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n break;\n }\n if (state2.line === _line) {\n ch = state2.input.charCodeAt(state2.position);\n while (is_WHITE_SPACE(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (ch === 58) {\n ch = state2.input.charCodeAt(++state2.position);\n if (!is_WS_OR_EOL(ch)) {\n throwError(state2, \"a whitespace character is expected after the key-value separator within a block mapping\");\n }\n if (atExplicitKey) {\n storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state2.tag;\n keyNode = state2.result;\n } else if (detected) {\n throwError(state2, \"can not read an implicit mapping pair; a colon is missed\");\n } else {\n state2.tag = _tag;\n state2.anchor = _anchor;\n return true;\n }\n } else if (detected) {\n throwError(state2, \"can not read a block mapping entry; a multiline key may not be an implicit key\");\n } else {\n state2.tag = _tag;\n state2.anchor = _anchor;\n return true;\n }\n }\n if (state2.line === _line || state2.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state2.line;\n _keyLineStart = state2.lineStart;\n _keyPos = state2.position;\n }\n if (composeNode(state2, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state2.result;\n } else {\n valueNode = state2.result;\n }\n }\n if (!atExplicitKey) {\n storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n skipSeparationSpace(state2, true, -1);\n ch = state2.input.charCodeAt(state2.position);\n }\n if ((state2.line === _line || state2.lineIndent > nodeIndent) && ch !== 0) {\n throwError(state2, \"bad indentation of a mapping entry\");\n } else if (state2.lineIndent < nodeIndent) {\n break;\n }\n }\n if (atExplicitKey) {\n storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n if (detected) {\n state2.tag = _tag;\n state2.anchor = _anchor;\n state2.kind = \"mapping\";\n state2.result = _result;\n }\n return detected;\n}\nfunction readTagProperty(state2) {\n var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch !== 33)\n return false;\n if (state2.tag !== null) {\n throwError(state2, \"duplication of a tag property\");\n }\n ch = state2.input.charCodeAt(++state2.position);\n if (ch === 60) {\n isVerbatim = true;\n ch = state2.input.charCodeAt(++state2.position);\n } else if (ch === 33) {\n isNamed = true;\n tagHandle = \"!!\";\n ch = state2.input.charCodeAt(++state2.position);\n } else {\n tagHandle = \"!\";\n }\n _position = state2.position;\n if (isVerbatim) {\n do {\n ch = state2.input.charCodeAt(++state2.position);\n } while (ch !== 0 && ch !== 62);\n if (state2.position < state2.length) {\n tagName = state2.input.slice(_position, state2.position);\n ch = state2.input.charCodeAt(++state2.position);\n } else {\n throwError(state2, \"unexpected end of the stream within a verbatim tag\");\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n if (ch === 33) {\n if (!isNamed) {\n tagHandle = state2.input.slice(_position - 1, state2.position + 1);\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state2, \"named tag handle cannot contain such characters\");\n }\n isNamed = true;\n _position = state2.position + 1;\n } else {\n throwError(state2, \"tag suffix cannot contain exclamation marks\");\n }\n }\n ch = state2.input.charCodeAt(++state2.position);\n }\n tagName = state2.input.slice(_position, state2.position);\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state2, \"tag suffix cannot contain flow indicator characters\");\n }\n }\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state2, \"tag name cannot contain such characters: \" + tagName);\n }\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state2, \"tag name is malformed: \" + tagName);\n }\n if (isVerbatim) {\n state2.tag = tagName;\n } else if (_hasOwnProperty$1.call(state2.tagMap, tagHandle)) {\n state2.tag = state2.tagMap[tagHandle] + tagName;\n } else if (tagHandle === \"!\") {\n state2.tag = \"!\" + tagName;\n } else if (tagHandle === \"!!\") {\n state2.tag = \"tag:yaml.org,2002:\" + tagName;\n } else {\n throwError(state2, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n return true;\n}\nfunction readAnchorProperty(state2) {\n var _position, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch !== 38)\n return false;\n if (state2.anchor !== null) {\n throwError(state2, \"duplication of an anchor property\");\n }\n ch = state2.input.charCodeAt(++state2.position);\n _position = state2.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (state2.position === _position) {\n throwError(state2, \"name of an anchor node must contain at least one character\");\n }\n state2.anchor = state2.input.slice(_position, state2.position);\n return true;\n}\nfunction readAlias(state2) {\n var _position, alias, ch;\n ch = state2.input.charCodeAt(state2.position);\n if (ch !== 42)\n return false;\n ch = state2.input.charCodeAt(++state2.position);\n _position = state2.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (state2.position === _position) {\n throwError(state2, \"name of an alias node must contain at least one character\");\n }\n alias = state2.input.slice(_position, state2.position);\n if (!_hasOwnProperty$1.call(state2.anchorMap, alias)) {\n throwError(state2, 'unidentified alias \"' + alias + '\"');\n }\n state2.result = state2.anchorMap[alias];\n skipSeparationSpace(state2, true, -1);\n return true;\n}\nfunction composeNode(state2, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type2, flowIndent, blockIndent;\n if (state2.listener !== null) {\n state2.listener(\"open\", state2);\n }\n state2.tag = null;\n state2.anchor = null;\n state2.kind = null;\n state2.result = null;\n allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;\n if (allowToSeek) {\n if (skipSeparationSpace(state2, true, -1)) {\n atNewLine = true;\n if (state2.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state2.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state2.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n if (indentStatus === 1) {\n while (readTagProperty(state2) || readAnchorProperty(state2)) {\n if (skipSeparationSpace(state2, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n if (state2.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state2.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state2.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n blockIndent = state2.position - state2.lineStart;\n if (indentStatus === 1) {\n if (allowBlockCollections && (readBlockSequence(state2, blockIndent) || readBlockMapping(state2, blockIndent, flowIndent)) || readFlowCollection(state2, flowIndent)) {\n hasContent = true;\n } else {\n if (allowBlockScalars && readBlockScalar(state2, flowIndent) || readSingleQuotedScalar(state2, flowIndent) || readDoubleQuotedScalar(state2, flowIndent)) {\n hasContent = true;\n } else if (readAlias(state2)) {\n hasContent = true;\n if (state2.tag !== null || state2.anchor !== null) {\n throwError(state2, \"alias node should not have any properties\");\n }\n } else if (readPlainScalar(state2, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n if (state2.tag === null) {\n state2.tag = \"?\";\n }\n }\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = state2.result;\n }\n }\n } else if (indentStatus === 0) {\n hasContent = allowBlockCollections && readBlockSequence(state2, blockIndent);\n }\n }\n if (state2.tag === null) {\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = state2.result;\n }\n } else if (state2.tag === \"?\") {\n if (state2.result !== null && state2.kind !== \"scalar\") {\n throwError(state2, 'unacceptable node kind for ! tag; it should be \"scalar\", not \"' + state2.kind + '\"');\n }\n for (typeIndex = 0, typeQuantity = state2.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type2 = state2.implicitTypes[typeIndex];\n if (type2.resolve(state2.result)) {\n state2.result = type2.construct(state2.result);\n state2.tag = type2.tag;\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = state2.result;\n }\n break;\n }\n }\n } else if (state2.tag !== \"!\") {\n if (_hasOwnProperty$1.call(state2.typeMap[state2.kind || \"fallback\"], state2.tag)) {\n type2 = state2.typeMap[state2.kind || \"fallback\"][state2.tag];\n } else {\n type2 = null;\n typeList = state2.typeMap.multi[state2.kind || \"fallback\"];\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state2.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type2 = typeList[typeIndex];\n break;\n }\n }\n }\n if (!type2) {\n throwError(state2, \"unknown tag !<\" + state2.tag + \">\");\n }\n if (state2.result !== null && type2.kind !== state2.kind) {\n throwError(state2, \"unacceptable node kind for !<\" + state2.tag + '> tag; it should be \"' + type2.kind + '\", not \"' + state2.kind + '\"');\n }\n if (!type2.resolve(state2.result, state2.tag)) {\n throwError(state2, \"cannot resolve a node with !<\" + state2.tag + \"> explicit tag\");\n } else {\n state2.result = type2.construct(state2.result, state2.tag);\n if (state2.anchor !== null) {\n state2.anchorMap[state2.anchor] = state2.result;\n }\n }\n }\n if (state2.listener !== null) {\n state2.listener(\"close\", state2);\n }\n return state2.tag !== null || state2.anchor !== null || hasContent;\n}\nfunction readDocument(state2) {\n var documentStart = state2.position, _position, directiveName, directiveArgs, hasDirectives = false, ch;\n state2.version = null;\n state2.checkLineBreaks = state2.legacy;\n state2.tagMap = /* @__PURE__ */ Object.create(null);\n state2.anchorMap = /* @__PURE__ */ Object.create(null);\n while ((ch = state2.input.charCodeAt(state2.position)) !== 0) {\n skipSeparationSpace(state2, true, -1);\n ch = state2.input.charCodeAt(state2.position);\n if (state2.lineIndent > 0 || ch !== 37) {\n break;\n }\n hasDirectives = true;\n ch = state2.input.charCodeAt(++state2.position);\n _position = state2.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n directiveName = state2.input.slice(_position, state2.position);\n directiveArgs = [];\n if (directiveName.length < 1) {\n throwError(state2, \"directive name must not be less than one character in length\");\n }\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n if (ch === 35) {\n do {\n ch = state2.input.charCodeAt(++state2.position);\n } while (ch !== 0 && !is_EOL(ch));\n break;\n }\n if (is_EOL(ch))\n break;\n _position = state2.position;\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state2.input.charCodeAt(++state2.position);\n }\n directiveArgs.push(state2.input.slice(_position, state2.position));\n }\n if (ch !== 0)\n readLineBreak(state2);\n if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state2, directiveName, directiveArgs);\n } else {\n throwWarning(state2, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n skipSeparationSpace(state2, true, -1);\n if (state2.lineIndent === 0 && state2.input.charCodeAt(state2.position) === 45 && state2.input.charCodeAt(state2.position + 1) === 45 && state2.input.charCodeAt(state2.position + 2) === 45) {\n state2.position += 3;\n skipSeparationSpace(state2, true, -1);\n } else if (hasDirectives) {\n throwError(state2, \"directives end mark is expected\");\n }\n composeNode(state2, state2.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state2, true, -1);\n if (state2.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state2.input.slice(documentStart, state2.position))) {\n throwWarning(state2, \"non-ASCII line breaks are interpreted as content\");\n }\n state2.documents.push(state2.result);\n if (state2.position === state2.lineStart && testDocumentSeparator(state2)) {\n if (state2.input.charCodeAt(state2.position) === 46) {\n state2.position += 3;\n skipSeparationSpace(state2, true, -1);\n }\n return;\n }\n if (state2.position < state2.length - 1) {\n throwError(state2, \"end of the stream or a document separator is expected\");\n } else {\n return;\n }\n}\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n if (input.length !== 0) {\n if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) {\n input += \"\\n\";\n }\n if (input.charCodeAt(0) === 65279) {\n input = input.slice(1);\n }\n }\n var state2 = new State$1(input, options);\n var nullpos = input.indexOf(\"\\0\");\n if (nullpos !== -1) {\n state2.position = nullpos;\n throwError(state2, \"null byte is not allowed in input\");\n }\n state2.input += \"\\0\";\n while (state2.input.charCodeAt(state2.position) === 32) {\n state2.lineIndent += 1;\n state2.position += 1;\n }\n while (state2.position < state2.length - 1) {\n readDocument(state2);\n }\n return state2.documents;\n}\nfunction loadAll$1(input, iterator, options) {\n if (iterator !== null && typeof iterator === \"object\" && typeof options === \"undefined\") {\n options = iterator;\n iterator = null;\n }\n var documents = loadDocuments(input, options);\n if (typeof iterator !== \"function\") {\n return documents;\n }\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\nfunction load$1(input, options) {\n var documents = loadDocuments(input, options);\n if (documents.length === 0) {\n return void 0;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new exception(\"expected a single document in the stream, but found more\");\n}\nvar loadAll_1 = loadAll$1;\nvar load_1 = load$1;\nvar loader = {\n loadAll: loadAll_1,\n load: load_1\n};\nvar JSON_SCHEMA = json;\nvar load = loader.load;\nfunction extractFrontMatter(text) {\n const matches = text.match(frontMatterRegex);\n if (!matches) {\n return {\n text,\n metadata: {}\n };\n }\n let parsed = load(matches[1], {\n // To support config, we need JSON schema.\n // https://www.yaml.org/spec/1.2/spec.html#id2803231\n schema: JSON_SCHEMA\n }) ?? {};\n parsed = typeof parsed === \"object\" && !Array.isArray(parsed) ? parsed : {};\n const metadata = {};\n if (parsed.displayMode) {\n metadata.displayMode = parsed.displayMode.toString();\n }\n if (parsed.title) {\n metadata.title = parsed.title.toString();\n }\n if (parsed.config) {\n metadata.config = parsed.config;\n }\n return {\n text: text.slice(matches[0].length),\n metadata\n };\n}\nconst cleanupText = (code) => {\n return code.replace(/\\r\\n?/g, \"\\n\").replace(\n /<(\\w+)([^>]*)>/g,\n (match, tag, attributes) => \"<\" + tag + attributes.replace(/=\"([^\"]*)\"/g, \"='$1'\") + \">\"\n );\n};\nconst processFrontmatter = (code) => {\n const { text, metadata } = extractFrontMatter(code);\n const { displayMode, title, config: config2 = {} } = metadata;\n if (displayMode) {\n if (!config2.gantt) {\n config2.gantt = {};\n }\n config2.gantt.displayMode = displayMode;\n }\n return { title, config: config2, text };\n};\nconst processDirectives = (code) => {\n const initDirective = utils.detectInit(code) ?? {};\n const wrapDirectives = utils.detectDirective(code, \"wrap\");\n if (Array.isArray(wrapDirectives)) {\n initDirective.wrap = wrapDirectives.some(({ type: type2 }) => {\n });\n } else if ((wrapDirectives == null ? void 0 : wrapDirectives.type) === \"wrap\") {\n initDirective.wrap = true;\n }\n return {\n text: removeDirectives(code),\n directive: initDirective\n };\n};\nfunction preprocessDiagram(code) {\n const cleanedCode = cleanupText(code);\n const frontMatterResult = processFrontmatter(cleanedCode);\n const directiveResult = processDirectives(frontMatterResult.text);\n const config2 = cleanAndMerge(frontMatterResult.config, directiveResult.directive);\n code = cleanupComments(directiveResult.text);\n return {\n code,\n title: frontMatterResult.title,\n config: config2\n };\n}\nconst MAX_TEXTLENGTH = 5e4;\nconst MAX_TEXTLENGTH_EXCEEDED_MSG = \"graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa\";\nconst SECURITY_LVL_SANDBOX = \"sandbox\";\nconst SECURITY_LVL_LOOSE = \"loose\";\nconst XMLNS_SVG_STD = \"http://www.w3.org/2000/svg\";\nconst XMLNS_XLINK_STD = \"http://www.w3.org/1999/xlink\";\nconst XMLNS_XHTML_STD = \"http://www.w3.org/1999/xhtml\";\nconst IFRAME_WIDTH = \"100%\";\nconst IFRAME_HEIGHT = \"100%\";\nconst IFRAME_STYLES = \"border:0;margin:0;\";\nconst IFRAME_BODY_STYLE = \"margin:0\";\nconst IFRAME_SANDBOX_OPTS = \"allow-top-navigation-by-user-activation allow-popups\";\nconst IFRAME_NOT_SUPPORTED_MSG = 'The \"iframe\" tag is not supported by your browser.';\nconst DOMPURIFY_TAGS = [\"foreignobject\"];\nconst DOMPURIFY_ATTR = [\"dominant-baseline\"];\nfunction processAndSetConfigs(text) {\n const processed = preprocessDiagram(text);\n reset();\n addDirective(processed.config ?? {});\n return processed;\n}\nasync function parse$1(text, parseOptions) {\n addDiagrams();\n text = processAndSetConfigs(text).code;\n try {\n await getDiagramFromText(text);\n } catch (error) {\n if (parseOptions == null ? void 0 : parseOptions.suppressErrors) {\n return false;\n }\n throw error;\n }\n return true;\n}\nconst cssImportantStyles = (cssClass, element, cssClasses = []) => {\n return `\n.${cssClass} ${element} { ${cssClasses.join(\" !important; \")} !important; }`;\n};\nconst createCssStyles = (config2, classDefs = {}) => {\n var _a;\n let cssStyles = \"\";\n if (config2.themeCSS !== void 0) {\n cssStyles += `\n${config2.themeCSS}`;\n }\n if (config2.fontFamily !== void 0) {\n cssStyles += `\n:root { --mermaid-font-family: ${config2.fontFamily}}`;\n }\n if (config2.altFontFamily !== void 0) {\n cssStyles += `\n:root { --mermaid-alt-font-family: ${config2.altFontFamily}}`;\n }\n if (!isEmpty(classDefs)) {\n const htmlLabels = config2.htmlLabels || ((_a = config2.flowchart) == null ? void 0 : _a.htmlLabels);\n const cssHtmlElements = [\"> *\", \"span\"];\n const cssShapeElements = [\"rect\", \"polygon\", \"ellipse\", \"circle\", \"path\"];\n const cssElements = htmlLabels ? cssHtmlElements : cssShapeElements;\n for (const classId in classDefs) {\n const styleClassDef = classDefs[classId];\n if (!isEmpty(styleClassDef.styles)) {\n cssElements.forEach((cssElement) => {\n cssStyles += cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles);\n });\n }\n if (!isEmpty(styleClassDef.textStyles)) {\n cssStyles += cssImportantStyles(styleClassDef.id, \"tspan\", styleClassDef.textStyles);\n }\n }\n }\n return cssStyles;\n};\nconst createUserStyles = (config2, graphType, classDefs, svgId) => {\n const userCSSstyles = createCssStyles(config2, classDefs);\n const allStyles = getStyles$1(graphType, userCSSstyles, config2.themeVariables);\n return serialize(compile(`${svgId}{${allStyles}}`), stringify);\n};\nconst cleanUpSvgCode = (svgCode = \"\", inSandboxMode, useArrowMarkerUrls) => {\n let cleanedUpSvg = svgCode;\n if (!useArrowMarkerUrls && !inSandboxMode) {\n cleanedUpSvg = cleanedUpSvg.replace(\n /marker-end=\"url\\([\\d+./:=?A-Za-z-]*?#/g,\n 'marker-end=\"url(#'\n );\n }\n cleanedUpSvg = decodeEntities(cleanedUpSvg);\n cleanedUpSvg = cleanedUpSvg.replace(/
/g, \"
\");\n return cleanedUpSvg;\n};\nconst putIntoIFrame = (svgCode = \"\", svgElement) => {\n var _a, _b;\n const height = ((_b = (_a = svgElement == null ? void 0 : svgElement.viewBox) == null ? void 0 : _a.baseVal) == null ? void 0 : _b.height) ? svgElement.viewBox.baseVal.height + \"px\" : IFRAME_HEIGHT;\n const base64encodedSrc = btoa('' + svgCode + \"\");\n return ``;\n};\nconst appendDivSvgG = (parentRoot, id2, enclosingDivId, divStyle, svgXlink) => {\n const enclosingDiv = parentRoot.append(\"div\");\n enclosingDiv.attr(\"id\", enclosingDivId);\n if (divStyle) {\n enclosingDiv.attr(\"style\", divStyle);\n }\n const svgNode = enclosingDiv.append(\"svg\").attr(\"id\", id2).attr(\"width\", \"100%\").attr(\"xmlns\", XMLNS_SVG_STD);\n if (svgXlink) {\n svgNode.attr(\"xmlns:xlink\", svgXlink);\n }\n svgNode.append(\"g\");\n return parentRoot;\n};\nfunction sandboxedIframe(parentNode, iFrameId) {\n return parentNode.append(\"iframe\").attr(\"id\", iFrameId).attr(\"style\", \"width: 100%; height: 100%;\").attr(\"sandbox\", \"\");\n}\nconst removeExistingElements = (doc, id2, divId, iFrameId) => {\n var _a, _b, _c;\n (_a = doc.getElementById(id2)) == null ? void 0 : _a.remove();\n (_b = doc.getElementById(divId)) == null ? void 0 : _b.remove();\n (_c = doc.getElementById(iFrameId)) == null ? void 0 : _c.remove();\n};\nconst render$1 = async function(id2, text, svgContainingElement) {\n var _a, _b, _c, _d, _e, _f;\n addDiagrams();\n const processed = processAndSetConfigs(text);\n text = processed.code;\n const config2 = getConfig$1();\n log$1.debug(config2);\n if (text.length > ((config2 == null ? void 0 : config2.maxTextSize) ?? MAX_TEXTLENGTH)) {\n text = MAX_TEXTLENGTH_EXCEEDED_MSG;\n }\n const idSelector = \"#\" + id2;\n const iFrameID = \"i\" + id2;\n const iFrameID_selector = \"#\" + iFrameID;\n const enclosingDivID = \"d\" + id2;\n const enclosingDivID_selector = \"#\" + enclosingDivID;\n let root = select(\"body\");\n const isSandboxed = config2.securityLevel === SECURITY_LVL_SANDBOX;\n const isLooseSecurityLevel = config2.securityLevel === SECURITY_LVL_LOOSE;\n const fontFamily = config2.fontFamily;\n if (svgContainingElement !== void 0) {\n if (svgContainingElement) {\n svgContainingElement.innerHTML = \"\";\n }\n if (isSandboxed) {\n const iframe = sandboxedIframe(select(svgContainingElement), iFrameID);\n root = select(iframe.nodes()[0].contentDocument.body);\n root.node().style.margin = 0;\n } else {\n root = select(svgContainingElement);\n }\n appendDivSvgG(root, id2, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD);\n } else {\n removeExistingElements(document, id2, enclosingDivID, iFrameID);\n if (isSandboxed) {\n const iframe = sandboxedIframe(select(\"body\"), iFrameID);\n root = select(iframe.nodes()[0].contentDocument.body);\n root.node().style.margin = 0;\n } else {\n root = select(\"body\");\n }\n appendDivSvgG(root, id2, enclosingDivID);\n }\n let diag;\n let parseEncounteredException;\n try {\n diag = await getDiagramFromText(text, { title: processed.title });\n } catch (error) {\n diag = new Diagram(\"error\");\n parseEncounteredException = error;\n }\n const element = root.select(enclosingDivID_selector).node();\n const diagramType = diag.type;\n const svg = element.firstChild;\n const firstChild = svg.firstChild;\n const diagramClassDefs = (_b = (_a = diag.renderer).getClasses) == null ? void 0 : _b.call(_a, text, diag);\n const rules = createUserStyles(config2, diagramType, diagramClassDefs, idSelector);\n const style1 = document.createElement(\"style\");\n style1.innerHTML = rules;\n svg.insertBefore(style1, firstChild);\n try {\n await diag.renderer.draw(text, id2, version, diag);\n } catch (e) {\n errorRenderer.draw(text, id2, version);\n throw e;\n }\n const svgNode = root.select(`${enclosingDivID_selector} svg`);\n const a11yTitle = (_d = (_c = diag.db).getAccTitle) == null ? void 0 : _d.call(_c);\n const a11yDescr = (_f = (_e = diag.db).getAccDescription) == null ? void 0 : _f.call(_e);\n addA11yInfo(diagramType, svgNode, a11yTitle, a11yDescr);\n root.select(`[id=\"${id2}\"]`).selectAll(\"foreignobject > *\").attr(\"xmlns\", XMLNS_XHTML_STD);\n let svgCode = root.select(enclosingDivID_selector).node().innerHTML;\n log$1.debug(\"config.arrowMarkerAbsolute\", config2.arrowMarkerAbsolute);\n svgCode = cleanUpSvgCode(svgCode, isSandboxed, evaluate(config2.arrowMarkerAbsolute));\n if (isSandboxed) {\n const svgEl = root.select(enclosingDivID_selector + \" svg\").node();\n svgCode = putIntoIFrame(svgCode, svgEl);\n } else if (!isLooseSecurityLevel) {\n svgCode = DOMPurify.sanitize(svgCode, {\n ADD_TAGS: DOMPURIFY_TAGS,\n ADD_ATTR: DOMPURIFY_ATTR\n });\n }\n attachFunctions();\n if (parseEncounteredException) {\n throw parseEncounteredException;\n }\n const tmpElementSelector = isSandboxed ? iFrameID_selector : enclosingDivID_selector;\n const node = select(tmpElementSelector).node();\n if (node && \"remove\" in node) {\n node.remove();\n }\n return {\n svg: svgCode,\n bindFunctions: diag.db.bindFunctions\n };\n};\nfunction initialize$1(options = {}) {\n var _a;\n if ((options == null ? void 0 : options.fontFamily) && !((_a = options.themeVariables) == null ? void 0 : _a.fontFamily)) {\n if (!options.themeVariables) {\n options.themeVariables = {};\n }\n options.themeVariables.fontFamily = options.fontFamily;\n }\n saveConfigFromInitialize(options);\n if ((options == null ? void 0 : options.theme) && options.theme in theme) {\n options.themeVariables = theme[options.theme].getThemeVariables(\n options.themeVariables\n );\n } else if (options) {\n options.themeVariables = theme.default.getThemeVariables(options.themeVariables);\n }\n const config2 = typeof options === \"object\" ? setSiteConfig(options) : getSiteConfig();\n setLogLevel$1(config2.logLevel);\n addDiagrams();\n}\nconst getDiagramFromText = (text, metadata = {}) => {\n const { code } = preprocessDiagram(text);\n return getDiagramFromText$1(code, metadata);\n};\nfunction addA11yInfo(diagramType, svgNode, a11yTitle, a11yDescr) {\n setA11yDiagramInfo(svgNode, diagramType);\n addSVGa11yTitleDescription(svgNode, a11yTitle, a11yDescr, svgNode.attr(\"id\"));\n}\nconst mermaidAPI = Object.freeze({\n render: render$1,\n parse: parse$1,\n getDiagramFromText,\n initialize: initialize$1,\n getConfig: getConfig$1,\n setConfig: setConfig$1,\n getSiteConfig,\n updateSiteConfig,\n reset: () => {\n reset();\n },\n globalReset: () => {\n reset(defaultConfig$1);\n },\n defaultConfig: defaultConfig$1\n});\nsetLogLevel$1(getConfig$1().logLevel);\nreset(getConfig$1());\nconst loadRegisteredDiagrams = async () => {\n log$1.debug(`Loading registered diagrams`);\n const results = await Promise.allSettled(\n Object.entries(detectors).map(async ([key, { detector: detector2, loader: loader2 }]) => {\n if (loader2) {\n try {\n getDiagram(key);\n } catch (error) {\n try {\n const { diagram: diagram2, id: id2 } = await loader2();\n registerDiagram(id2, diagram2, detector2);\n } catch (err) {\n log$1.error(`Failed to load external diagram with key ${key}. Removing from detectors.`);\n delete detectors[key];\n throw err;\n }\n }\n }\n })\n );\n const failed = results.filter((result) => result.status === \"rejected\");\n if (failed.length > 0) {\n log$1.error(`Failed to load ${failed.length} external diagrams`);\n for (const res of failed) {\n log$1.error(res);\n }\n throw new Error(`Failed to load ${failed.length} external diagrams`);\n }\n};\nconst handleError = (error, errors, parseError) => {\n log$1.warn(error);\n if (isDetailedError(error)) {\n if (parseError) {\n parseError(error.str, error.hash);\n }\n errors.push({ ...error, message: error.str, error });\n } else {\n if (parseError) {\n parseError(error);\n }\n if (error instanceof Error) {\n errors.push({\n str: error.message,\n message: error.message,\n hash: error.name,\n error\n });\n }\n }\n};\nconst run = async function(options = {\n querySelector: \".mermaid\"\n}) {\n try {\n await runThrowsErrors(options);\n } catch (e) {\n if (isDetailedError(e)) {\n log$1.error(e.str);\n }\n if (mermaid.parseError) {\n mermaid.parseError(e);\n }\n if (!options.suppressErrors) {\n log$1.error(\"Use the suppressErrors option to suppress these errors\");\n throw e;\n }\n }\n};\nconst runThrowsErrors = async function({ postRenderCallback, querySelector, nodes } = {\n querySelector: \".mermaid\"\n}) {\n const conf = mermaidAPI.getConfig();\n log$1.debug(`${!postRenderCallback ? \"No \" : \"\"}Callback function found`);\n let nodesToProcess;\n if (nodes) {\n nodesToProcess = nodes;\n } else if (querySelector) {\n nodesToProcess = document.querySelectorAll(querySelector);\n } else {\n throw new Error(\"Nodes and querySelector are both undefined\");\n }\n log$1.debug(`Found ${nodesToProcess.length} diagrams`);\n if ((conf == null ? void 0 : conf.startOnLoad) !== void 0) {\n log$1.debug(\"Start On Load: \" + (conf == null ? void 0 : conf.startOnLoad));\n mermaidAPI.updateSiteConfig({ startOnLoad: conf == null ? void 0 : conf.startOnLoad });\n }\n const idGenerator = new utils.InitIDGenerator(conf.deterministicIds, conf.deterministicIDSeed);\n let txt;\n const errors = [];\n for (const element of Array.from(nodesToProcess)) {\n log$1.info(\"Rendering diagram: \" + element.id);\n /*! Check if previously processed */\n if (element.getAttribute(\"data-processed\")) {\n continue;\n }\n element.setAttribute(\"data-processed\", \"true\");\n const id2 = `mermaid-${idGenerator.next()}`;\n txt = element.innerHTML;\n txt = dedent(utils.entityDecode(txt)).trim().replace(//gi, \"
\");\n const init2 = utils.detectInit(txt);\n if (init2) {\n log$1.debug(\"Detected early reinit: \", init2);\n }\n try {\n const { svg, bindFunctions } = await render(id2, txt, element);\n element.innerHTML = svg;\n if (postRenderCallback) {\n await postRenderCallback(id2);\n }\n if (bindFunctions) {\n bindFunctions(element);\n }\n } catch (error) {\n handleError(error, errors, mermaid.parseError);\n }\n }\n if (errors.length > 0) {\n throw errors[0];\n }\n};\nconst initialize = function(config2) {\n mermaidAPI.initialize(config2);\n};\nconst init = async function(config2, nodes, callback) {\n log$1.warn(\"mermaid.init is deprecated. Please use run instead.\");\n if (config2) {\n initialize(config2);\n }\n const runOptions = { postRenderCallback: callback, querySelector: \".mermaid\" };\n if (typeof nodes === \"string\") {\n runOptions.querySelector = nodes;\n } else if (nodes) {\n if (nodes instanceof HTMLElement) {\n runOptions.nodes = [nodes];\n } else {\n runOptions.nodes = nodes;\n }\n }\n await run(runOptions);\n};\nconst registerExternalDiagrams = async (diagrams2, {\n lazyLoad = true\n} = {}) => {\n registerLazyLoadedDiagrams(...diagrams2);\n if (lazyLoad === false) {\n await loadRegisteredDiagrams();\n }\n};\nconst contentLoaded = function() {\n if (mermaid.startOnLoad) {\n const { startOnLoad } = mermaidAPI.getConfig();\n if (startOnLoad) {\n mermaid.run().catch((err) => log$1.error(\"Mermaid failed to initialize\", err));\n }\n }\n};\nif (typeof document !== \"undefined\") {\n /*!\n * Wait for document loaded before starting the execution\n */\n window.addEventListener(\"load\", contentLoaded, false);\n}\nconst setParseErrorHandler = function(parseErrorHandler) {\n mermaid.parseError = parseErrorHandler;\n};\nconst executionQueue = [];\nlet executionQueueRunning = false;\nconst executeQueue = async () => {\n if (executionQueueRunning) {\n return;\n }\n executionQueueRunning = true;\n while (executionQueue.length > 0) {\n const f = executionQueue.shift();\n if (f) {\n try {\n await f();\n } catch (e) {\n log$1.error(\"Error executing queue\", e);\n }\n }\n }\n executionQueueRunning = false;\n};\nconst parse = async (text, parseOptions) => {\n return new Promise((resolve, reject) => {\n const performCall = () => new Promise((res, rej) => {\n mermaidAPI.parse(text, parseOptions).then(\n (r) => {\n res(r);\n resolve(r);\n },\n (e) => {\n var _a;\n log$1.error(\"Error parsing\", e);\n (_a = mermaid.parseError) == null ? void 0 : _a.call(mermaid, e);\n rej(e);\n reject(e);\n }\n );\n });\n executionQueue.push(performCall);\n executeQueue().catch(reject);\n });\n};\nconst render = (id2, text, container) => {\n return new Promise((resolve, reject) => {\n const performCall = () => new Promise((res, rej) => {\n mermaidAPI.render(id2, text, container).then(\n (r) => {\n res(r);\n resolve(r);\n },\n (e) => {\n var _a;\n log$1.error(\"Error parsing\", e);\n (_a = mermaid.parseError) == null ? void 0 : _a.call(mermaid, e);\n rej(e);\n reject(e);\n }\n );\n });\n executionQueue.push(performCall);\n executeQueue().catch(reject);\n });\n};\nconst mermaid = {\n startOnLoad: true,\n mermaidAPI,\n parse,\n render,\n init,\n run,\n registerExternalDiagrams,\n initialize,\n parseError: void 0,\n contentLoaded,\n setParseErrorHandler,\n detectType\n};\nexport {\n selectSvgElement as A,\n defaultConfig$2 as B,\n cleanAndMerge as C,\n parseFontSize as D,\n getThemeVariables$2 as E,\n getConfig$1 as F,\n hasKatex as G,\n calculateMathMLDimensions as H,\n generateId as I,\n lineBreakRegex as J,\n defaultConfig as K,\n commonDb as L,\n decodeEntities as M,\n mermaid as N,\n ZERO_WIDTH_SPACE as Z,\n getAccDescription as a,\n setAccDescription as b,\n getConfig as c,\n sanitizeText$2 as d,\n common$1 as e,\n assignWithDepth$1 as f,\n getAccTitle as g,\n calculateTextWidth as h,\n configureSvgSize as i,\n calculateTextHeight as j,\n getStylesFromArray as k,\n log$1 as l,\n evaluate as m,\n interpolateToCurve as n,\n setupGraphViewbox$1 as o,\n setConfig as p,\n setDiagramTitle as q,\n renderKatex as r,\n setAccTitle as s,\n getDiagramTitle as t,\n utils as u,\n clear as v,\n wrapLabel as w,\n parseGenericTypes as x,\n random as y,\n setupGraphViewbox as z\n};\n", "export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\n", "/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n", "import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n", "import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset:\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d m s\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n", "import {IMPORT, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n"], + "mappings": "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U,WACxB,OAAO9C,EAAQiD,EAAKH,KAAN,CAEjB,CAEDH,EAAS1D,EAAe0D,CAAD,CACxB,CAEQQ,SAAAA,EAAcX,EAAS,CAC9BY,eAAQC,KAAK,qBAAsBb,CAAnC,EACO,IACR,CAED,OAAOW,CACR,CC5HM,IAAMG,GAAOlE,EAAO,CACzB,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,SACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,KArHyB,CAAD,EAyHbmE,EAAMnE,EAAO,CACxB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,OA3CwB,CAAD,EA8CZoE,EAAapE,EAAO,CAC/B,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,cAzB+B,CAAD,EAgCnBqE,EAAgBrE,EAAO,CAClC,UACA,gBACA,SACA,UACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,KAtBkC,CAAD,EAyBtBsE,EAAStE,EAAO,CAC3B,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,aACA,aA9B2B,CAAD,EAmCfuE,EAAmBvE,EAAO,CACrC,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,MAfqC,CAAD,EAkBzBwE,EAAOxE,EAAO,CAAC,OAAD,CAAD,ECrRbkE,EAAOlE,EAAO,CACzB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,UACA,cACA,cACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,QACA,MA7GyB,CAAD,EAgHbmE,EAAMnE,EAAO,CACxB,gBACA,aACA,WACA,qBACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,UACA,UACA,YACA,mBACA,cACA,kBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OACA,eACA,mBACA,mBACA,IACA,KACA,KACA,QACA,IACA,KACA,KACA,IACA,YAtLwB,CAAD,EAyLZsE,EAAStE,EAAO,CAC3B,SACA,cACA,QACA,WACA,QACA,eACA,cACA,aACA,aACA,QACA,MACA,UACA,eACA,WACA,QACA,QACA,SACA,OACA,KACA,UACA,SACA,gBACA,SACA,SACA,iBACA,YACA,WACA,cACA,UACA,UACA,gBACA,WACA,WACA,OACA,WACA,WACA,aACA,UACA,SACA,SACA,cACA,gBACA,uBACA,YACA,YACA,aACA,WACA,iBACA,iBACA,YACA,UACA,QACA,OArD2B,CAAD,EAwDfyE,EAAMzE,EAAO,CACxB,aACA,SACA,cACA,YACA,aALwB,CA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EACvB,WAAc,WACd,QAAW,GACX,YAAe,GACf,QAAW,QACb,EACA,QAAW,CACT,YAAe,GACf,eAAkB,GAClB,eAAkB,GAClB,WAAc,IACd,MAAS,IACT,OAAU,GACV,UAAa,GACb,cAAiB,EACjB,WAAc,GACd,cAAiB,GACjB,aAAgB,SAChB,gBAAmB,EACnB,YAAe,GACf,aAAgB,GAChB,eAAkB,0BAClB,WAAc,GACd,gBAAmB,GACnB,cAAiB,KACjB,aAAgB,CACd,UACA,UACA,UACA,UACA,UACA,SACF,EACA,aAAgB,CACd,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,eAAkB,CAChB,MACF,CACF,EACA,MAAS,CACP,YAAe,GACf,eAAkB,GAClB,oBAAuB,GACvB,cAAiB,GACjB,QAAW,EACX,WAAc,GACd,gBAAmB,gBACnB,WAAc,EAChB,EACA,MAAS,CACP,YAAe,GACf,eAAkB,GAClB,cAAiB,GACjB,SAAY,EACZ,QAAW,EACX,WAAc,GACd,WAAc,IACd,WAAc,GACd,UAAa,GACb,WAAc,EACd,YAAe,EACf,eAAkB,KAClB,SAAY,GACZ,YAAe,GACf,iBAAoB,KACpB,kBAAqB,GACrB,OAAU,EACV,gBAAmB,eACrB,EACA,GAAM,CACJ,YAAe,GACf,eAAkB,GAClB,eAAkB,GAClB,gBAAmB,KACnB,eAAkB,IAClB,gBAAmB,GACnB,cAAiB,GACjB,OAAU,OACV,KAAQ,WACR,SAAY,EACd,EACA,IAAO,CACL,YAAe,GACf,aAAgB,GAClB,EACA,cAAiB,CACf,YAAe,GACf,WAAc,IACd,YAAe,IACf,cAAiB,GACjB,aAAgB,GAChB,gBAAmB,EACnB,kBAAqB,EACrB,kBAAqB,EACrB,mBAAsB,GACtB,mBAAsB,GACtB,sBAAyB,GACzB,uBAA0B,EAC1B,iBAAoB,EACpB,mBAAsB,GACtB,YAAe,EACf,cAAiB,MACjB,cAAiB,OACjB,kCAAqC,EACrC,kCAAqC,CACvC,EACA,QAAW,CACT,YAAe,GACf,MAAS,IACT,OAAU,IACV,cAAiB,GACjB,aAAgB,GAChB,UAAa,GACb,MAAS,CACP,KAAQ,4BACR,UAAa,GACb,cAAiB,GACjB,aAAgB,EAChB,UAAa,GACb,cAAiB,GACjB,aAAgB,EAChB,SAAY,GACZ,WAAc,EACd,UAAa,EACb,aAAgB,GAChB,cAAiB,CACnB,EACA,MAAS,CACP,KAAQ,4BACR,UAAa,GACb,cAAiB,GACjB,aAAgB,EAChB,UAAa,GACb,cAAiB,GACjB,aAAgB,EAChB,SAAY,GACZ,WAAc,EACd,UAAa,EACb,aAAgB,GAChB,cAAiB,CACnB,EACA,iBAAoB,WACpB,yBAA4B,EAC9B,EACA,YAAe,CACb,YAAe,GACf,UAAa,UACb,WAAc,OACd,iBAAoB,QACpB,kBAAqB,OACrB,eAAkB,IAClB,gBAAmB,IACnB,SAAY,GACZ,aAAgB,GAChB,YAAe,EACjB,EACA,QAAW,CACT,YAAe,GACf,QAAW,GACX,aAAgB,GAClB,EACA,SAAY,CACV,YAAe,GACf,eAAkB,GAClB,eAAkB,GAClB,WAAc,IACd,MAAS,IACT,OAAU,GACV,UAAa,GACb,cAAiB,EACjB,WAAc,GACd,cAAiB,GACjB,aAAgB,SAChB,gBAAmB,EACnB,YAAe,GACf,aAAgB,GAChB,eAAkB,0BAClB,WAAc,GACd,gBAAmB,GACnB,cAAiB,KACjB,aAAgB,CACd,UACA,UACA,UACA,UACA,UACA,SACF,EACA,aAAgB,CACd,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,eAAkB,CAChB,MACF,EACA,kBAAqB,EACvB,EACA,SAAY,CACV,YAAe,GACf,eAAkB,GAClB,eAAkB,EAClB,UAAa,CACX,MAAS,GACT,OAAU,IACV,EAAK,IACL,EAAK,CACP,EACA,eAAkB,OAClB,gBAAmB,EACnB,gBAAmB,GACnB,aAAgB,GAChB,kBAAqB,GACrB,gBAAmB,GACnB,oBAAuB,EACzB,EACA,GAAM,CACJ,YAAe,GACf,eAAkB,GAClB,eAAkB,GAClB,cAAiB,GACjB,eAAkB,GAClB,MAAS,IACT,OAAU,GACV,UAAa,GACb,aAAgB,EAChB,iBAAoB,EACpB,gBAAmB,EACnB,eAAkB,GAClB,iBAAoB,0BACpB,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", + "names": ["require_dayjs_min", "__commonJSMin", "exports", "module", "n", "r", "i", "s", "u", "a", "o", "f", "c", "d", "l", "$", "y", "M", "t", "e", "m", "g", "D", "p", "_", "S", "w", "O", "h", "v", "T", "require_dist", "__commonJSMin", "exports", "invalidProtocolRegex", "htmlEntitiesRegex", "htmlCtrlEntityRegex", "ctrlCharactersRegex", "urlSchemeRegex", "relativeFirstCharacters", "isRelativeUrlWithoutProtocol", "url", "decodeHtmlCharacters", "str", "match", "dec", "sanitizeUrl", "sanitizedUrl", "urlSchemeParseResults", "urlScheme", "entries", "setPrototypeOf", "isFrozen", "getPrototypeOf", "getOwnPropertyDescriptor", "Object", "freeze", "seal", "create", "apply", "construct", "Reflect", "fun", "thisValue", "args", "x", "Func", "arrayForEach", "unapply", "Array", "prototype", "forEach", "arrayPop", "pop", "arrayPush", "push", "stringToLowerCase", "String", "toLowerCase", "stringToString", "toString", "stringMatch", "match", "stringReplace", "replace", "stringIndexOf", "indexOf", "stringTrim", "trim", "regExpTest", "RegExp", "test", "typeErrorCreate", "unconstruct", "TypeError", "func", "thisArg", "_len", "_key", "_len2", "_key2", "addToSet", "set", "array", "transformCaseFunc", "_transformCaseFunc", "l", "length", "element", "lcElement", "clone", "object", "newObject", "property", "value", "lookupGetter", "prop", "desc", "get", "fallbackValue", "console", "warn", "html", "svg", "svgFilters", "svgDisallowed", "mathMl", "mathMlDisallowed", "text", "xml", "MUSTACHE_EXPR", "ERB_EXPR", "TMPLIT_EXPR", "DATA_ATTR", "ARIA_ATTR", "IS_ALLOWED_URI", "IS_SCRIPT_OR_DATA", "ATTR_WHITESPACE", "DOCTYPE_NAME", "getGlobal", "window", "_createTrustedTypesPolicy", "trustedTypes", "purifyHostElement", "createPolicy", "suffix", "ATTR_NAME", "hasAttribute", "getAttribute", "policyName", "createHTML", "createScriptURL", "scriptUrl", "createDOMPurify", "DOMPurify", "root", "version", "VERSION", "removed", "document", "nodeType", "isSupported", "originalDocument", "currentScript", "DocumentFragment", "HTMLTemplateElement", "Node", "Element", "NodeFilter", "NamedNodeMap", "MozNamedAttrMap", "HTMLFormElement", "DOMParser", "ElementPrototype", "cloneNode", "getNextSibling", "getChildNodes", "getParentNode", "template", "createElement", "content", "ownerDocument", "trustedTypesPolicy", "emptyHTML", "implementation", "createNodeIterator", "createDocumentFragment", "getElementsByTagName", "importNode", "hooks", "createHTMLDocument", "undefined", "EXPRESSIONS", "ALLOWED_TAGS", "DEFAULT_ALLOWED_TAGS", "TAGS", "ALLOWED_ATTR", "DEFAULT_ALLOWED_ATTR", "ATTRS", "CUSTOM_ELEMENT_HANDLING", "tagNameCheck", "writable", "configurable", "enumerable", "attributeNameCheck", "allowCustomizedBuiltInElements", "FORBID_TAGS", "FORBID_ATTR", "ALLOW_ARIA_ATTR", "ALLOW_DATA_ATTR", "ALLOW_UNKNOWN_PROTOCOLS", "ALLOW_SELF_CLOSE_IN_ATTR", "SAFE_FOR_TEMPLATES", "WHOLE_DOCUMENT", "SET_CONFIG", "FORCE_BODY", "RETURN_DOM", "RETURN_DOM_FRAGMENT", "RETURN_TRUSTED_TYPE", "SANITIZE_DOM", "SANITIZE_NAMED_PROPS", "SANITIZE_NAMED_PROPS_PREFIX", "KEEP_CONTENT", "IN_PLACE", "USE_PROFILES", "FORBID_CONTENTS", "DEFAULT_FORBID_CONTENTS", "DATA_URI_TAGS", "DEFAULT_DATA_URI_TAGS", "URI_SAFE_ATTRIBUTES", "DEFAULT_URI_SAFE_ATTRIBUTES", "MATHML_NAMESPACE", "SVG_NAMESPACE", "HTML_NAMESPACE", "NAMESPACE", "IS_EMPTY_INPUT", "ALLOWED_NAMESPACES", "DEFAULT_ALLOWED_NAMESPACES", "PARSER_MEDIA_TYPE", "SUPPORTED_PARSER_MEDIA_TYPES", "DEFAULT_PARSER_MEDIA_TYPE", "CONFIG", "formElement", "isRegexOrFunction", "testValue", "Function", "_parseConfig", "cfg", "ADD_URI_SAFE_ATTR", "ADD_DATA_URI_TAGS", "ALLOWED_URI_REGEXP", "ADD_TAGS", "ADD_ATTR", "table", "tbody", "TRUSTED_TYPES_POLICY", "MATHML_TEXT_INTEGRATION_POINTS", "HTML_INTEGRATION_POINTS", "COMMON_SVG_AND_HTML_ELEMENTS", "ALL_SVG_TAGS", "ALL_MATHML_TAGS", "_checkValidNamespace", "parent", "tagName", "namespaceURI", "parentTagName", "Boolean", "_forceRemove", "node", "parentNode", "removeChild", "remove", "_removeAttribute", "name", "attribute", "getAttributeNode", "from", "removeAttribute", "setAttribute", "_initDocument", "dirty", "doc", "leadingWhitespace", "matches", "dirtyPayload", "parseFromString", "documentElement", "createDocument", "innerHTML", "body", "insertBefore", "createTextNode", "childNodes", "call", "_createIterator", "SHOW_ELEMENT", "SHOW_COMMENT", "SHOW_TEXT", "_isClobbered", "elm", "nodeName", "textContent", "attributes", "hasChildNodes", "_isNode", "_executeHook", "entryPoint", "currentNode", "data", "hook", "_sanitizeElements", "allowedTags", "firstElementChild", "_basicCustomElementTest", "childCount", "i", "_isValidAttribute", "lcTag", "lcName", "_sanitizeAttributes", "attr", "hookEvent", "attrName", "attrValue", "keepAttr", "allowedAttributes", "forceKeepAttr", "getAttributeType", "setAttributeNS", "_sanitizeShadowDOM", "fragment", "shadowNode", "shadowIterator", "nextNode", "sanitize", "importedNode", "returnNode", "appendChild", "firstChild", "nodeIterator", "shadowroot", "shadowrootmode", "serializedHTML", "outerHTML", "doctype", "setConfig", "clearConfig", "isValidAttribute", "tag", "addHook", "hookFunction", "removeHook", "removeHooks", "removeAllHooks", "purify", "dedent", "templ", "values", "_i", "strings", "indentLengths", "arr", "str", "matches", "match", "_a", "_b", "pattern_1", "string", "value", "i", "endentations", "endentation", "indentedValue", "max", "values", "valueof", "value", "index", "min", "values", "valueof", "value", "index", "ascending", "a", "b", "descending", "a", "b", "bisector", "f", "compare1", "compare2", "delta", "ascending", "d", "x", "descending", "zero", "left", "a", "lo", "hi", "mid", "right", "center", "i", "number", "x", "ascendingBisect", "bisector", "ascending", "bisectRight", "bisectLeft", "bisectCenter", "number", "bisect_default", "InternMap", "entries", "key", "keyof", "value", "intern_get", "intern_set", "intern_delete", "intern_get", "_intern", "_key", "value", "key", "intern_set", "intern_delete", "keyof", "e10", "e5", "e2", "tickSpec", "start", "stop", "count", "step", "power", "error", "factor", "i1", "i2", "inc", "ticks", "reverse", "n", "i", "tickIncrement", "tickStep", "range", "start", "stop", "step", "n", "identity_default", "x", "top", "right", "bottom", "left", "epsilon", "translateX", "x", "translateY", "y", "number", "scale", "d", "center", "offset", "entering", "axis", "orient", "tickArguments", "tickValues", "tickFormat", "tickSizeInner", "tickSizeOuter", "tickPadding", "k", "transform", "context", "values", "format", "identity_default", "spacing", "range", "range0", "range1", "position", "selection", "path", "tick", "tickExit", "tickEnter", "line", "text", "p", "_", "axisTop", "axisBottom", "scale", "axis", "bottom", "none", "selector_default", "selector", "select_default", "select", "selector_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "subnode", "i", "Selection", "array", "x", "empty", "selectorAll_default", "selector", "arrayAll", "select", "array", "selectAll_default", "selectorAll_default", "groups", "m", "subgroups", "parents", "j", "group", "n", "node", "i", "Selection", "matcher_default", "selector", "childMatcher", "node", "find", "childFind", "match", "childFirst", "selectChild_default", "childMatcher", "filter", "children", "childrenFilter", "match", "selectChildren_default", "childMatcher", "filter_default", "match", "matcher_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "i", "Selection", "sparse_default", "update", "enter_default", "Selection", "sparse_default", "EnterNode", "parent", "datum", "child", "next", "selector", "constant_default", "x", "bindIndex", "parent", "group", "enter", "update", "exit", "data", "i", "node", "groupLength", "dataLength", "EnterNode", "bindKey", "key", "nodeByKeyValue", "keyValues", "keyValue", "datum", "data_default", "value", "bind", "parents", "groups", "constant_default", "m", "j", "arraylike", "enterGroup", "updateGroup", "exitGroup", "i0", "i1", "previous", "next", "Selection", "exit_default", "Selection", "sparse_default", "join_default", "onenter", "onupdate", "onexit", "enter", "update", "exit", "merge_default", "context", "selection", "groups0", "groups1", "m0", "m1", "m", "merges", "j", "group0", "group1", "n", "merge", "node", "i", "Selection", "order_default", "groups", "j", "m", "group", "i", "next", "node", "sort_default", "compare", "ascending", "compareNode", "a", "b", "groups", "m", "sortgroups", "j", "group", "n", "sortgroup", "node", "i", "Selection", "call_default", "callback", "nodes_default", "node_default", "groups", "j", "m", "group", "i", "node", "size_default", "size", "node", "empty_default", "each_default", "callback", "groups", "j", "m", "group", "i", "n", "node", "xhtml", "namespaces_default", "namespace_default", "name", "prefix", "i", "namespaces_default", "attrRemove", "name", "attrRemoveNS", "fullname", "attrConstant", "value", "attrConstantNS", "attrFunction", "v", "attrFunctionNS", "attr_default", "namespace_default", "node", "window_default", "node", "styleRemove", "name", "styleConstant", "value", "priority", "styleFunction", "v", "style_default", "styleValue", "node", "window_default", "propertyRemove", "name", "propertyConstant", "value", "propertyFunction", "v", "property_default", "classArray", "string", "classList", "node", "ClassList", "name", "i", "classedAdd", "names", "list", "n", "classedRemove", "classedTrue", "classedFalse", "classedFunction", "value", "classed_default", "textRemove", "textConstant", "value", "textFunction", "v", "text_default", "htmlRemove", "htmlConstant", "value", "htmlFunction", "v", "html_default", "raise", "raise_default", "lower", "lower_default", "creatorInherit", "name", "document", "uri", "xhtml", "creatorFixed", "fullname", "creator_default", "namespace_default", "append_default", "name", "create", "creator_default", "constantNull", "insert_default", "name", "before", "create", "creator_default", "select", "selector_default", "remove", "parent", "remove_default", "selection_cloneShallow", "clone", "parent", "selection_cloneDeep", "clone_default", "deep", "datum_default", "value", "contextListener", "listener", "event", "parseTypenames", "typenames", "t", "name", "onRemove", "typename", "on", "j", "m", "o", "onAdd", "value", "options", "on_default", "i", "dispatchEvent", "node", "type", "params", "window", "window_default", "event", "dispatchConstant", "dispatchFunction", "dispatch_default", "iterator_default", "groups", "j", "m", "group", "i", "node", "root", "Selection", "groups", "parents", "selection", "selection_selection", "select_default", "selectAll_default", "selectChild_default", "selectChildren_default", "filter_default", "data_default", "enter_default", "exit_default", "join_default", "merge_default", "order_default", "sort_default", "call_default", "nodes_default", "node_default", "size_default", "empty_default", "each_default", "attr_default", "style_default", "property_default", "classed_default", "text_default", "html_default", "raise_default", "lower_default", "append_default", "insert_default", "remove_default", "clone_default", "datum_default", "on_default", "dispatch_default", "iterator_default", "selection_default", "select_default", "selector", "Selection", "root", "selectAll_default", "selector", "Selection", "array", "root", "define_default", "constructor", "factory", "prototype", "extend", "parent", "definition", "key", "Color", "darker", "brighter", "reI", "reN", "reP", "reHex", "reRgbInteger", "reRgbPercent", "reRgbaInteger", "reRgbaPercent", "reHslPercent", "reHslaPercent", "named", "define_default", "color", "channels", "color_formatHex", "color_formatHex8", "color_formatHsl", "color_formatRgb", "hslConvert", "format", "m", "l", "rgbn", "Rgb", "rgba", "hsla", "n", "r", "g", "b", "a", "rgbConvert", "o", "rgb", "opacity", "extend", "k", "clampi", "clampa", "rgb_formatHex", "rgb_formatHex8", "rgb_formatRgb", "hex", "value", "h", "s", "Hsl", "min", "max", "hsl", "m2", "m1", "hsl2rgb", "clamph", "clampt", "radians", "degrees", "K", "Xn", "Yn", "Zn", "t0", "t1", "t2", "t3", "labConvert", "o", "Lab", "Hcl", "hcl2lab", "Rgb", "rgbConvert", "r", "rgb2lrgb", "g", "b", "y", "xyz2lab", "x", "z", "lab", "l", "a", "b", "opacity", "labConvert", "Lab", "define_default", "extend", "Color", "k", "K", "y", "x", "z", "Xn", "lab2xyz", "Yn", "Zn", "Rgb", "lrgb2rgb", "xyz2lab", "t3", "t2", "t0", "t1", "rgb2lrgb", "hclConvert", "o", "Hcl", "h", "degrees", "hcl", "h", "c", "l", "opacity", "hclConvert", "Hcl", "hcl2lab", "o", "Lab", "radians", "define_default", "extend", "Color", "k", "K", "constant_default", "x", "linear", "a", "d", "t", "exponential", "b", "y", "hue", "constant_default", "gamma", "nogamma", "hcl", "hue", "start", "end", "h", "c", "nogamma", "l", "opacity", "t", "hcl_default", "hclLong", "basis", "t1", "v0", "v1", "v2", "v3", "t2", "t3", "basis_default", "values", "n", "t", "basisClosed_default", "values", "n", "t", "v0", "v1", "v2", "v3", "basis", "rgb_default", "rgbGamma", "y", "color", "gamma", "rgb", "start", "end", "r", "g", "b", "opacity", "nogamma", "t", "rgbSpline", "spline", "colors", "n", "i", "rgbBasis", "basis_default", "rgbBasisClosed", "basisClosed_default", "numberArray_default", "a", "b", "n", "c", "i", "t", "isNumberArray", "x", "genericArray", "a", "b", "nb", "na", "x", "c", "i", "value_default", "t", "date_default", "a", "b", "d", "t", "number_default", "a", "b", "t", "object_default", "a", "b", "i", "c", "k", "value_default", "t", "reA", "reB", "zero", "b", "one", "t", "string_default", "a", "bi", "am", "bm", "bs", "i", "q", "number_default", "o", "value_default", "a", "b", "t", "c", "constant_default", "number_default", "color", "rgb_default", "string_default", "date_default", "isNumberArray", "numberArray_default", "genericArray", "object_default", "round_default", "a", "b", "t", "degrees", "identity", "decompose_default", "a", "b", "c", "d", "e", "f", "scaleX", "scaleY", "skewX", "svgNode", "parseCss", "value", "m", "identity", "decompose_default", "parseSvg", "interpolateTransform", "parse", "pxComma", "pxParen", "degParen", "pop", "s", "translate", "xa", "ya", "xb", "yb", "q", "i", "number_default", "rotate", "a", "b", "skewX", "scale", "t", "n", "o", "interpolateTransformCss", "parseCss", "interpolateTransformSvg", "parseSvg", "initRange", "domain", "range", "implicit", "ordinal", "index", "InternMap", "domain", "range", "unknown", "scale", "d", "i", "_", "value", "initRange", "band", "scale", "ordinal", "domain", "ordinalRange", "r0", "r1", "step", "bandwidth", "round", "paddingInner", "paddingOuter", "align", "rescale", "n", "reverse", "start", "stop", "values", "range", "i", "_", "initRange", "constants", "x", "number", "x", "unit", "identity", "x", "normalize", "a", "b", "constants", "clamper", "t", "bimap", "domain", "range", "interpolate", "d0", "d1", "r0", "r1", "polymap", "j", "d", "r", "i", "bisect_default", "copy", "source", "target", "transformer", "value_default", "transform", "untransform", "unknown", "clamp", "piecewise", "output", "input", "rescale", "n", "scale", "y", "number_default", "_", "number", "round_default", "u", "continuous", "formatDecimal_default", "x", "formatDecimalParts", "p", "i", "coefficient", "exponent_default", "x", "formatDecimalParts", "formatGroup_default", "grouping", "thousands", "value", "width", "i", "t", "j", "g", "length", "formatNumerals_default", "numerals", "value", "i", "re", "formatSpecifier", "specifier", "match", "FormatSpecifier", "formatTrim_default", "s", "out", "n", "i", "i0", "i1", "prefixExponent", "formatPrefixAuto_default", "x", "p", "d", "formatDecimalParts", "coefficient", "exponent", "i", "n", "formatRounded_default", "x", "p", "d", "formatDecimalParts", "coefficient", "exponent", "formatTypes_default", "x", "p", "formatDecimal_default", "formatRounded_default", "formatPrefixAuto_default", "identity_default", "x", "map", "prefixes", "locale_default", "locale", "group", "identity_default", "formatGroup_default", "currencyPrefix", "currencySuffix", "decimal", "numerals", "formatNumerals_default", "percent", "minus", "nan", "newFormat", "specifier", "formatSpecifier", "fill", "align", "sign", "symbol", "zero", "width", "comma", "precision", "trim", "type", "formatTypes_default", "prefix", "suffix", "formatType", "maybeSuffix", "format", "value", "valuePrefix", "valueSuffix", "i", "n", "c", "valueNegative", "formatTrim_default", "prefixExponent", "length", "padding", "formatPrefix", "f", "e", "exponent_default", "k", "locale", "format", "formatPrefix", "defaultLocale", "definition", "locale_default", "precisionFixed_default", "step", "exponent_default", "precisionPrefix_default", "step", "value", "exponent_default", "precisionRound_default", "step", "max", "exponent_default", "tickFormat", "start", "stop", "count", "specifier", "step", "tickStep", "precision", "formatSpecifier", "value", "precisionPrefix_default", "formatPrefix", "precisionRound_default", "precisionFixed_default", "format", "linearish", "scale", "domain", "count", "d", "ticks", "specifier", "tickFormat", "i0", "i1", "start", "stop", "prestep", "step", "maxIter", "tickIncrement", "linear", "continuous", "copy", "initRange", "t0", "t1", "timeInterval", "floori", "offseti", "count", "field", "interval", "date", "d0", "d1", "step", "start", "stop", "range", "previous", "test", "end", "d", "millisecond", "timeInterval", "date", "step", "start", "end", "k", "milliseconds", "second", "timeInterval", "date", "step", "start", "end", "seconds", "timeMinute", "timeInterval", "date", "step", "start", "end", "timeMinutes", "utcMinute", "utcMinutes", "timeHour", "timeInterval", "date", "step", "start", "end", "timeHours", "utcHour", "utcHours", "timeDay", "timeInterval", "date", "step", "start", "end", "timeDays", "utcDay", "utcDays", "unixDay", "unixDays", "timeWeekday", "i", "timeInterval", "date", "step", "start", "end", "timeSunday", "timeMonday", "timeTuesday", "timeWednesday", "timeThursday", "timeFriday", "timeSaturday", "timeSundays", "timeMondays", "timeTuesdays", "timeWednesdays", "timeThursdays", "timeFridays", "timeSaturdays", "utcWeekday", "utcSunday", "utcMonday", "utcTuesday", "utcWednesday", "utcThursday", "utcFriday", "utcSaturday", "utcSundays", "utcMondays", "utcTuesdays", "utcWednesdays", "utcThursdays", "utcFridays", "utcSaturdays", "timeMonth", "timeInterval", "date", "step", "start", "end", "timeMonths", "utcMonth", "utcMonths", "timeYear", "timeInterval", "date", "step", "start", "end", "k", "timeYears", "utcYear", "utcYears", "ticker", "year", "month", "week", "day", "hour", "minute", "tickIntervals", "second", "ticks", "start", "stop", "count", "reverse", "interval", "tickInterval", "target", "i", "bisector", "step", "tickStep", "millisecond", "t", "utcTicks", "utcTickInterval", "utcYear", "utcMonth", "utcSunday", "unixDay", "utcHour", "utcMinute", "timeTicks", "timeTickInterval", "timeYear", "timeMonth", "timeSunday", "timeDay", "timeHour", "timeMinute", "localDate", "d", "date", "utcDate", "newDate", "y", "m", "formatLocale", "locale", "locale_dateTime", "locale_date", "locale_time", "locale_periods", "locale_weekdays", "locale_shortWeekdays", "locale_months", "locale_shortMonths", "periodRe", "formatRe", "periodLookup", "formatLookup", "weekdayRe", "weekdayLookup", "shortWeekdayRe", "shortWeekdayLookup", "monthRe", "monthLookup", "shortMonthRe", "shortMonthLookup", "formats", "formatShortWeekday", "formatWeekday", "formatShortMonth", "formatMonth", "formatDayOfMonth", "formatMicroseconds", "formatYearISO", "formatFullYearISO", "formatHour24", "formatHour12", "formatDayOfYear", "formatMilliseconds", "formatMonthNumber", "formatMinutes", "formatPeriod", "formatQuarter", "formatUnixTimestamp", "formatUnixTimestampSeconds", "formatSeconds", "formatWeekdayNumberMonday", "formatWeekNumberSunday", "formatWeekNumberISO", "formatWeekdayNumberSunday", "formatWeekNumberMonday", "formatYear", "formatFullYear", "formatZone", "formatLiteralPercent", "utcFormats", "formatUTCShortWeekday", "formatUTCWeekday", "formatUTCShortMonth", "formatUTCMonth", "formatUTCDayOfMonth", "formatUTCMicroseconds", "formatUTCYearISO", "formatUTCFullYearISO", "formatUTCHour24", "formatUTCHour12", "formatUTCDayOfYear", "formatUTCMilliseconds", "formatUTCMonthNumber", "formatUTCMinutes", "formatUTCPeriod", "formatUTCQuarter", "formatUTCSeconds", "formatUTCWeekdayNumberMonday", "formatUTCWeekNumberSunday", "formatUTCWeekNumberISO", "formatUTCWeekdayNumberSunday", "formatUTCWeekNumberMonday", "formatUTCYear", "formatUTCFullYear", "formatUTCZone", "parses", "parseShortWeekday", "parseWeekday", "parseShortMonth", "parseMonth", "parseLocaleDateTime", "parseDayOfMonth", "parseMicroseconds", "parseYear", "parseFullYear", "parseHour24", "parseDayOfYear", "parseMilliseconds", "parseMonthNumber", "parseMinutes", "parsePeriod", "parseQuarter", "parseUnixTimestamp", "parseUnixTimestampSeconds", "parseSeconds", "parseWeekdayNumberMonday", "parseWeekNumberSunday", "parseWeekNumberISO", "parseWeekdayNumberSunday", "parseWeekNumberMonday", "parseLocaleDate", "parseLocaleTime", "parseZone", "parseLiteralPercent", "newFormat", "specifier", "string", "i", "j", "n", "c", "pad", "format", "pads", "newParse", "Z", "parseSpecifier", "week", "day", "utcMonday", "utcDay", "timeMonday", "timeDay", "parse", "f", "p", "numberRe", "percentRe", "requoteRe", "value", "fill", "width", "sign", "length", "requote", "s", "names", "name", "timeYear", "timeSunday", "dISO", "timeThursday", "z", "utcYear", "dow", "utcSunday", "UTCdISO", "utcThursday", "locale", "timeFormat", "timeParse", "utcFormat", "utcParse", "defaultLocale", "definition", "formatLocale", "nice", "domain", "interval", "i0", "i1", "x0", "x1", "t", "date", "number", "calendar", "ticks", "tickInterval", "year", "month", "week", "day", "hour", "minute", "second", "format", "scale", "continuous", "invert", "domain", "formatMillisecond", "formatSecond", "formatMinute", "formatHour", "formatDay", "formatWeek", "formatMonth", "formatYear", "tickFormat", "y", "_", "interval", "d", "count", "specifier", "nice", "copy", "time", "initRange", "timeTicks", "timeTickInterval", "timeYear", "timeMonth", "timeSunday", "timeDay", "timeHour", "timeMinute", "timeFormat", "colors_default", "specifier", "n", "colors", "Tableau10_default", "colors_default", "constant_default", "x", "abs", "atan2", "cos", "max", "min", "sin", "sqrt", "epsilon", "pi", "halfPi", "tau", "acos", "x", "asin", "pi", "tau", "epsilon", "tauEpsilon", "append", "strings", "i", "n", "appendRound", "digits", "d", "k", "Path", "x", "y", "x1", "y1", "x2", "y2", "r", "x0", "y0", "x21", "y21", "x01", "y01", "l01_2", "x20", "y20", "l21_2", "l20_2", "l21", "l01", "l", "t01", "t21", "a0", "a1", "ccw", "dx", "dy", "cw", "da", "w", "h", "path", "withPath", "shape", "digits", "_", "d", "Path", "arcInnerRadius", "d", "arcOuterRadius", "arcStartAngle", "arcEndAngle", "arcPadAngle", "intersect", "x0", "y0", "x1", "y1", "x2", "y2", "x3", "y3", "x10", "y10", "x32", "y32", "t", "epsilon", "cornerTangents", "r1", "rc", "cw", "x01", "y01", "lo", "sqrt", "ox", "oy", "x11", "y11", "x00", "y00", "dx", "dy", "d2", "r", "D", "max", "cx0", "cy0", "cx1", "cy1", "dx0", "dy0", "dx1", "dy1", "arc_default", "innerRadius", "outerRadius", "cornerRadius", "constant_default", "padRadius", "startAngle", "endAngle", "padAngle", "context", "path", "withPath", "arc", "buffer", "r0", "a0", "halfPi", "a1", "da", "abs", "tau", "cos", "sin", "a01", "a11", "a00", "a10", "da0", "da1", "ap", "rp", "min", "rc0", "rc1", "t0", "t1", "p0", "asin", "p1", "oc", "pi", "ax", "ay", "bx", "by", "kc", "acos", "lc", "atan2", "a", "_", "Linear", "context", "x", "y", "linear_default", "slice", "array_default", "x", "x", "p", "y", "line_default", "x", "y", "defined", "constant_default", "context", "curve", "linear_default", "output", "path", "withPath", "line", "data", "i", "n", "array_default", "d", "defined0", "buffer", "_", "descending_default", "a", "b", "identity_default", "d", "pie_default", "value", "identity_default", "sortValues", "descending_default", "sort", "startAngle", "constant_default", "endAngle", "tau", "padAngle", "pie", "data", "i", "n", "array_default", "j", "k", "sum", "index", "arcs", "a0", "da", "a1", "p", "pa", "v", "_", "point", "that", "x", "y", "Basis", "context", "basis_default", "Bump", "context", "x", "y", "bumpX", "context", "Bump", "bumpY", "noop_default", "BasisClosed", "context", "noop_default", "x", "y", "point", "basisClosed_default", "BasisOpen", "context", "x", "y", "x0", "y0", "point", "basisOpen_default", "Bundle", "context", "beta", "Basis", "x", "y", "j", "x0", "y0", "dx", "dy", "i", "t", "bundle_default", "custom", "bundle", "point", "that", "x", "y", "Cardinal", "context", "tension", "cardinal_default", "custom", "cardinal", "CardinalClosed", "context", "tension", "noop_default", "x", "y", "point", "cardinalClosed_default", "custom", "cardinal", "CardinalOpen", "context", "tension", "x", "y", "point", "cardinalOpen_default", "custom", "cardinal", "point", "that", "x", "y", "x1", "y1", "x2", "y2", "epsilon", "a", "n", "b", "m", "CatmullRom", "context", "alpha", "x23", "y23", "catmullRom_default", "custom", "catmullRom", "Cardinal", "CatmullRomClosed", "context", "alpha", "noop_default", "x", "y", "x23", "y23", "point", "catmullRomClosed_default", "custom", "catmullRom", "CardinalClosed", "CatmullRomOpen", "context", "alpha", "x", "y", "x23", "y23", "point", "catmullRomOpen_default", "custom", "catmullRom", "CardinalOpen", "LinearClosed", "context", "noop_default", "x", "y", "linearClosed_default", "sign", "x", "slope3", "that", "x2", "y2", "h0", "h1", "s0", "s1", "p", "slope2", "t", "h", "point", "t0", "t1", "x0", "y0", "x1", "y1", "dx", "MonotoneX", "context", "y", "MonotoneY", "ReflectContext", "monotoneX", "monotoneY", "Natural", "context", "x", "y", "n", "px", "controlPoints", "py", "i0", "i1", "i", "m", "a", "b", "r", "natural_default", "Step", "context", "t", "x", "y", "x1", "step_default", "stepBefore", "stepAfter", "noop", "dispatch", "i", "n", "_", "t", "Dispatch", "parseTypenames", "typenames", "types", "name", "typename", "callback", "T", "get", "set", "copy", "type", "that", "args", "c", "dispatch_default", "frame", "timeout", "interval", "pokeDelay", "taskHead", "taskTail", "clockLast", "clockNow", "clockSkew", "clock", "setFrame", "f", "now", "clearNow", "Timer", "timer", "callback", "delay", "time", "sleep", "t", "timerFlush", "wake", "nap", "poke", "t0", "t1", "t2", "timeout_default", "callback", "delay", "time", "t", "Timer", "elapsed", "emptyOn", "dispatch_default", "emptyTween", "CREATED", "SCHEDULED", "STARTING", "STARTED", "RUNNING", "ENDING", "ENDED", "schedule_default", "node", "name", "id", "index", "group", "timing", "schedules", "create", "init", "schedule", "get", "set", "self", "tween", "timer", "elapsed", "start", "i", "j", "n", "o", "stop", "timeout_default", "tick", "t", "interrupt_default", "node", "name", "schedules", "schedule", "active", "empty", "i", "STARTING", "ENDING", "ENDED", "interrupt_default", "name", "tweenRemove", "id", "name", "tween0", "tween1", "schedule", "set", "tween", "i", "n", "tweenFunction", "value", "t", "tween_default", "get", "tweenValue", "transition", "node", "interpolate_default", "a", "b", "c", "number_default", "color", "rgb_default", "string_default", "attrRemove", "name", "attrRemoveNS", "fullname", "attrConstant", "interpolate", "value1", "string00", "string1", "interpolate0", "string0", "attrConstantNS", "attrFunction", "value", "string10", "attrFunctionNS", "attr_default", "namespace_default", "interpolateTransformSvg", "interpolate_default", "tweenValue", "attrInterpolate", "name", "i", "t", "attrInterpolateNS", "fullname", "attrTweenNS", "value", "t0", "i0", "tween", "attrTween", "attrTween_default", "key", "namespace_default", "delayFunction", "id", "value", "init", "delayConstant", "delay_default", "get", "durationFunction", "id", "value", "set", "durationConstant", "duration_default", "get", "easeConstant", "id", "value", "set", "ease_default", "get", "easeVarying", "id", "value", "v", "set", "easeVarying_default", "filter_default", "match", "matcher_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "i", "Transition", "merge_default", "transition", "groups0", "groups1", "m0", "m1", "m", "merges", "j", "group0", "group1", "n", "merge", "node", "i", "Transition", "start", "name", "t", "i", "onFunction", "id", "listener", "on0", "on1", "sit", "init", "set", "schedule", "on", "on_default", "get", "removeFunction", "id", "parent", "i", "remove_default", "select_default", "select", "name", "id", "selector_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "subnode", "i", "schedule_default", "get", "Transition", "selectAll_default", "select", "name", "id", "selectorAll_default", "groups", "m", "subgroups", "parents", "j", "group", "n", "node", "i", "children", "child", "inherit", "get", "k", "l", "schedule_default", "Transition", "Selection", "selection_default", "styleNull", "name", "interpolate", "string00", "string10", "interpolate0", "string0", "styleValue", "string1", "styleRemove", "styleConstant", "value1", "styleFunction", "value", "styleMaybeRemove", "id", "on0", "on1", "listener0", "key", "event", "remove", "schedule", "set", "on", "listener", "style_default", "priority", "interpolateTransformCss", "interpolate_default", "tweenValue", "styleInterpolate", "name", "i", "priority", "t", "styleTween", "value", "i0", "tween", "styleTween_default", "key", "textConstant", "value", "textFunction", "value1", "text_default", "tweenValue", "textInterpolate", "i", "t", "textTween", "value", "t0", "i0", "tween", "textTween_default", "key", "transition_default", "name", "id0", "id1", "newId", "groups", "m", "j", "group", "n", "node", "i", "inherit", "get", "schedule_default", "Transition", "end_default", "on0", "on1", "that", "id", "size", "resolve", "reject", "cancel", "end", "schedule", "set", "on", "id", "Transition", "groups", "parents", "name", "transition", "selection_default", "newId", "selection_prototype", "select_default", "selectAll_default", "filter_default", "merge_default", "transition_default", "on_default", "attr_default", "attrTween_default", "style_default", "styleTween_default", "text_default", "textTween_default", "remove_default", "tween_default", "delay_default", "duration_default", "ease_default", "easeVarying_default", "end_default", "cubicInOut", "defaultTiming", "cubicInOut", "inherit", "node", "id", "timing", "transition_default", "name", "Transition", "newId", "now", "groups", "m", "j", "group", "n", "i", "schedule_default", "selection_default", "interrupt_default", "transition_default", "abs", "max", "min", "number1", "e", "number2", "X", "type", "x", "xy", "Y", "y", "XY", "type", "responseText", "response", "text_default", "input", "init", "parser", "type", "input", "init", "text_default", "text", "xml_default", "html", "svg", "Transform", "k", "x", "y", "point", "location", "identity", "transform", "node", "Channel", "r", "g", "b", "h", "s", "l", "a", "c", "n", "p", "q", "t", "channel", "max", "min", "d", "channel_default", "Lang", "number", "lower", "upper", "lang_default", "Unit", "dec", "hex", "unit_default", "Utils", "channel_default", "lang_default", "unit_default", "utils_default", "DEC2HEX", "i", "utils_default", "TYPE", "Type", "TYPE", "type", "type_default", "Channels", "data", "color", "type_default", "TYPE", "h", "s", "l", "utils_default", "g", "b", "r", "a", "channels_default", "channels", "channels_default", "reusable_default", "Hex", "color", "match", "hex", "dec", "length", "hasAlpha", "isFullLength", "multiplier", "bits", "bitsOffset", "mask", "reusable_default", "channels", "r", "g", "b", "a", "DEC2HEX", "hex_default", "HSL", "hue", "match", "number", "unit", "utils_default", "color", "charCode", "h", "s", "l", "isAlphaPercentage", "reusable_default", "channels", "a", "hsl_default", "Keyword", "color", "hex", "hex_default", "channels", "name", "keyword_default", "RGB", "color", "charCode", "match", "r", "isRedPercentage", "g", "isGreenPercentage", "b", "isBluePercentage", "a", "isAlphaPercentage", "reusable_default", "utils_default", "channels", "rgb_default", "Color", "keyword_default", "hex_default", "rgb_default", "hsl_default", "color", "channels", "TYPE", "color_default", "change", "color", "channels", "ch", "color_default", "c", "utils_default", "change_default", "rgba", "r", "g", "b", "a", "change_default", "channels", "reusable_default", "utils_default", "color_default", "rgba_default", "channel", "color", "utils_default", "color_default", "channel_default", "luminance", "color", "r", "g", "b", "color_default", "utils_default", "luminance_default", "isLight", "color", "luminance_default", "is_light_default", "isDark", "color", "is_light_default", "is_dark_default", "adjustChannel", "color", "channel", "amount", "channels", "color_default", "amountCurrent", "amountNext", "utils_default", "adjust_channel_default", "lighten", "color", "amount", "adjust_channel_default", "lighten_default", "darken", "color", "amount", "adjust_channel_default", "darken_default", "adjust", "color", "channels", "ch", "color_default", "changes", "c", "change_default", "adjust_default", "mix", "color1", "color2", "weight", "r1", "g1", "b1", "a1", "color_default", "r2", "g2", "b2", "a2", "weightScale", "weightNormalized", "alphaDelta", "weight1", "weight2", "r", "g", "b", "a", "rgba_default", "mix_default", "invert", "color", "weight", "inverse", "color_default", "mix_default", "invert_default", "freeGlobal", "freeGlobal_default", "freeSelf", "root", "freeGlobal_default", "root_default", "Symbol", "root_default", "Symbol_default", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "Symbol_default", "getRawTag", "value", "isOwn", "tag", "unmasked", "result", "getRawTag_default", "objectProto", "nativeObjectToString", "objectToString", "value", "objectToString_default", "nullTag", "undefinedTag", "symToStringTag", "Symbol_default", "baseGetTag", "value", "getRawTag_default", "objectToString_default", "baseGetTag_default", "isObject", "value", "type", "isObject_default", "asyncTag", "funcTag", "genTag", "proxyTag", "isFunction", "value", "isObject_default", "tag", "baseGetTag_default", "isFunction_default", "coreJsData", "root_default", "coreJsData_default", "maskSrcKey", "uid", "coreJsData_default", "isMasked", "func", "isMasked_default", "funcProto", "funcToString", "toSource", "func", "toSource_default", "reRegExpChar", "reIsHostCtor", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "reIsNative", "baseIsNative", "value", "isObject_default", "isMasked_default", "pattern", "isFunction_default", "toSource_default", "baseIsNative_default", "getValue", "object", "key", "getValue_default", "getNative", "object", "key", "value", "getValue_default", "baseIsNative_default", "getNative_default", "nativeCreate", "getNative_default", "nativeCreate_default", "hashClear", "nativeCreate_default", "hashClear_default", "hashDelete", "key", "result", "hashDelete_default", "HASH_UNDEFINED", "objectProto", "hasOwnProperty", "hashGet", "key", "data", "nativeCreate_default", "result", "hashGet_default", "objectProto", "hasOwnProperty", "hashHas", "key", "data", "nativeCreate_default", "hashHas_default", "HASH_UNDEFINED", "hashSet", "key", "value", "data", "nativeCreate_default", "hashSet_default", "Hash", "entries", "index", "length", "entry", "hashClear_default", "hashDelete_default", "hashGet_default", "hashHas_default", "hashSet_default", "Hash_default", "listCacheClear", "listCacheClear_default", "eq", "value", "other", "eq_default", "assocIndexOf", "array", "key", "length", "eq_default", "assocIndexOf_default", "arrayProto", "splice", "listCacheDelete", "key", "data", "index", "assocIndexOf_default", "lastIndex", "listCacheDelete_default", "listCacheGet", "key", "data", "index", "assocIndexOf_default", "listCacheGet_default", "listCacheHas", "key", "assocIndexOf_default", "listCacheHas_default", "listCacheSet", "key", "value", "data", "index", "assocIndexOf_default", "listCacheSet_default", "ListCache", "entries", "index", "length", "entry", "listCacheClear_default", "listCacheDelete_default", "listCacheGet_default", "listCacheHas_default", "listCacheSet_default", "ListCache_default", "Map", "getNative_default", "root_default", "Map_default", "mapCacheClear", "Hash_default", "Map_default", "ListCache_default", "mapCacheClear_default", "isKeyable", "value", "type", "isKeyable_default", "getMapData", "map", "key", "data", "isKeyable_default", "getMapData_default", "mapCacheDelete", "key", "result", "getMapData_default", "mapCacheDelete_default", "mapCacheGet", "key", "getMapData_default", "mapCacheGet_default", "mapCacheHas", "key", "getMapData_default", "mapCacheHas_default", "mapCacheSet", "key", "value", "data", "getMapData_default", "size", "mapCacheSet_default", "MapCache", "entries", "index", "length", "entry", "mapCacheClear_default", "mapCacheDelete_default", "mapCacheGet_default", "mapCacheHas_default", "mapCacheSet_default", "MapCache_default", "FUNC_ERROR_TEXT", "memoize", "func", "resolver", "memoized", "args", "key", "cache", "result", "MapCache_default", "memoize_default", "stackClear", "ListCache_default", "stackClear_default", "stackDelete", "key", "data", "result", "stackDelete_default", "stackGet", "key", "stackGet_default", "stackHas", "key", "stackHas_default", "LARGE_ARRAY_SIZE", "stackSet", "key", "value", "data", "ListCache_default", "pairs", "Map_default", "MapCache_default", "stackSet_default", "Stack", "entries", "data", "ListCache_default", "stackClear_default", "stackDelete_default", "stackGet_default", "stackHas_default", "stackSet_default", "Stack_default", "defineProperty", "func", "getNative_default", "defineProperty_default", "baseAssignValue", "object", "key", "value", "defineProperty_default", "baseAssignValue_default", "assignMergeValue", "object", "key", "value", "eq_default", "baseAssignValue_default", "assignMergeValue_default", "createBaseFor", "fromRight", "object", "iteratee", "keysFunc", "index", "iterable", "props", "length", "key", "createBaseFor_default", "baseFor", "createBaseFor_default", "baseFor_default", "freeExports", "freeModule", "moduleExports", "Buffer", "root_default", "allocUnsafe", "cloneBuffer", "buffer", "isDeep", "length", "result", "cloneBuffer_default", "Uint8Array", "root_default", "Uint8Array_default", "cloneArrayBuffer", "arrayBuffer", "result", "Uint8Array_default", "cloneArrayBuffer_default", "cloneTypedArray", "typedArray", "isDeep", "buffer", "cloneArrayBuffer_default", "cloneTypedArray_default", "copyArray", "source", "array", "index", "length", "copyArray_default", "objectCreate", "baseCreate", "object", "proto", "isObject_default", "result", "baseCreate_default", "overArg", "func", "transform", "arg", "overArg_default", "getPrototype", "overArg_default", "getPrototype_default", "objectProto", "isPrototype", "value", "Ctor", "proto", "isPrototype_default", "initCloneObject", "object", "isPrototype_default", "baseCreate_default", "getPrototype_default", "initCloneObject_default", "isObjectLike", "value", "isObjectLike_default", "argsTag", "baseIsArguments", "value", "isObjectLike_default", "baseGetTag_default", "baseIsArguments_default", "objectProto", "hasOwnProperty", "propertyIsEnumerable", "isArguments", "baseIsArguments_default", "value", "isObjectLike_default", "isArguments_default", "isArray", "isArray_default", "MAX_SAFE_INTEGER", "isLength", "value", "isLength_default", "isArrayLike", "value", "isLength_default", "isFunction_default", "isArrayLike_default", "isArrayLikeObject", "value", "isObjectLike_default", "isArrayLike_default", "isArrayLikeObject_default", "stubFalse", "stubFalse_default", "freeExports", "freeModule", "moduleExports", "Buffer", "root_default", "nativeIsBuffer", "isBuffer", "stubFalse_default", "isBuffer_default", "objectTag", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "objectCtorString", "isPlainObject", "value", "isObjectLike_default", "baseGetTag_default", "proto", "getPrototype_default", "Ctor", "isPlainObject_default", "argsTag", "arrayTag", "boolTag", "dateTag", "errorTag", "funcTag", "mapTag", "numberTag", "objectTag", "regexpTag", "setTag", "stringTag", "weakMapTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "typedArrayTags", "baseIsTypedArray", "value", "isObjectLike_default", "isLength_default", "baseGetTag_default", "baseIsTypedArray_default", "baseUnary", "func", "value", "baseUnary_default", "freeExports", "freeModule", "moduleExports", "freeProcess", "freeGlobal_default", "nodeUtil", "types", "nodeUtil_default", "nodeIsTypedArray", "nodeUtil_default", "isTypedArray", "baseUnary_default", "baseIsTypedArray_default", "isTypedArray_default", "safeGet", "object", "key", "safeGet_default", "objectProto", "hasOwnProperty", "assignValue", "object", "key", "value", "objValue", "eq_default", "baseAssignValue_default", "assignValue_default", "copyObject", "source", "props", "object", "customizer", "isNew", "index", "length", "key", "newValue", "baseAssignValue_default", "assignValue_default", "copyObject_default", "baseTimes", "n", "iteratee", "index", "result", "baseTimes_default", "MAX_SAFE_INTEGER", "reIsUint", "isIndex", "value", "length", "type", "isIndex_default", "objectProto", "hasOwnProperty", "arrayLikeKeys", "value", "inherited", "isArr", "isArray_default", "isArg", "isArguments_default", "isBuff", "isBuffer_default", "isType", "isTypedArray_default", "skipIndexes", "result", "baseTimes_default", "length", "key", "isIndex_default", "arrayLikeKeys_default", "nativeKeysIn", "object", "result", "key", "nativeKeysIn_default", "objectProto", "hasOwnProperty", "baseKeysIn", "object", "isObject_default", "nativeKeysIn_default", "isProto", "isPrototype_default", "result", "key", "baseKeysIn_default", "keysIn", "object", "isArrayLike_default", "arrayLikeKeys_default", "baseKeysIn_default", "keysIn_default", "toPlainObject", "value", "copyObject_default", "keysIn_default", "toPlainObject_default", "baseMergeDeep", "object", "source", "key", "srcIndex", "mergeFunc", "customizer", "stack", "objValue", "safeGet_default", "srcValue", "stacked", "assignMergeValue_default", "newValue", "isCommon", "isArr", "isArray_default", "isBuff", "isBuffer_default", "isTyped", "isTypedArray_default", "isArrayLikeObject_default", "copyArray_default", "cloneBuffer_default", "cloneTypedArray_default", "isPlainObject_default", "isArguments_default", "toPlainObject_default", "isObject_default", "isFunction_default", "initCloneObject_default", "baseMergeDeep_default", "baseMerge", "object", "source", "srcIndex", "customizer", "stack", "baseFor_default", "srcValue", "key", "Stack_default", "isObject_default", "baseMergeDeep_default", "newValue", "safeGet_default", "assignMergeValue_default", "keysIn_default", "baseMerge_default", "identity", "value", "identity_default", "apply", "func", "thisArg", "args", "apply_default", "nativeMax", "overRest", "func", "start", "transform", "args", "index", "length", "array", "otherArgs", "apply_default", "overRest_default", "constant", "value", "constant_default", "baseSetToString", "defineProperty_default", "func", "string", "constant_default", "identity_default", "baseSetToString_default", "HOT_COUNT", "HOT_SPAN", "nativeNow", "shortOut", "func", "count", "lastCalled", "stamp", "remaining", "shortOut_default", "setToString", "shortOut_default", "baseSetToString_default", "setToString_default", "baseRest", "func", "start", "setToString_default", "overRest_default", "identity_default", "baseRest_default", "isIterateeCall", "value", "index", "object", "isObject_default", "type", "isArrayLike_default", "isIndex_default", "eq_default", "isIterateeCall_default", "createAssigner", "assigner", "baseRest_default", "object", "sources", "index", "length", "customizer", "guard", "isIterateeCall_default", "source", "createAssigner_default", "merge", "createAssigner_default", "object", "source", "srcIndex", "baseMerge_default", "merge_default", "nativeKeys", "overArg_default", "nativeKeys_default", "objectProto", "hasOwnProperty", "baseKeys", "object", "isPrototype_default", "nativeKeys_default", "result", "key", "baseKeys_default", "DataView", "getNative_default", "root_default", "DataView_default", "Promise", "getNative_default", "root_default", "Promise_default", "Set", "getNative_default", "root_default", "Set_default", "WeakMap", "getNative_default", "root_default", "WeakMap_default", "mapTag", "objectTag", "promiseTag", "setTag", "weakMapTag", "dataViewTag", "dataViewCtorString", "toSource_default", "DataView_default", "mapCtorString", "Map_default", "promiseCtorString", "Promise_default", "setCtorString", "Set_default", "weakMapCtorString", "WeakMap_default", "getTag", "baseGetTag_default", "value", "result", "Ctor", "ctorString", "getTag_default", "mapTag", "setTag", "objectProto", "hasOwnProperty", "isEmpty", "value", "isArrayLike_default", "isArray_default", "isBuffer_default", "isTypedArray_default", "isArguments_default", "tag", "getTag_default", "isPrototype_default", "baseKeys_default", "key", "isEmpty_default", "import_dayjs", "import_sanitize_url", "import_dompurify", "COMMENT", "RULESET", "DECLARATION", "IMPORT", "KEYFRAMES", "abs", "from", "trim", "value", "replace", "value", "pattern", "replacement", "indexof", "search", "charat", "index", "substr", "begin", "end", "strlen", "sizeof", "append", "array", "line", "column", "length", "position", "character", "characters", "node", "value", "root", "parent", "type", "props", "children", "char", "character", "prev", "position", "charat", "characters", "column", "line", "next", "length", "peek", "caret", "slice", "begin", "end", "substr", "token", "type", "alloc", "value", "strlen", "dealloc", "delimit", "trim", "delimiter", "whitespace", "type", "character", "peek", "next", "token", "escaping", "index", "count", "next", "character", "slice", "caret", "peek", "delimiter", "type", "position", "commenter", "from", "identifier", "token", "compile", "value", "dealloc", "parse", "alloc", "root", "parent", "rule", "rules", "rulesets", "pseudo", "points", "declarations", "index", "offset", "length", "atrule", "property", "previous", "variable", "scanning", "ampersand", "character", "type", "props", "children", "reference", "characters", "next", "charat", "indexof", "replace", "delimit", "whitespace", "escaping", "caret", "peek", "append", "comment", "commenter", "strlen", "declaration", "ruleset", "prev", "from", "identifier", "post", "size", "sizeof", "i", "j", "k", "x", "y", "substr", "abs", "z", "trim", "node", "RULESET", "COMMENT", "char", "DECLARATION", "serialize", "children", "callback", "output", "length", "sizeof", "i", "stringify", "element", "index", "IMPORT", "DECLARATION", "COMMENT", "KEYFRAMES", "RULESET", "strlen", "LEVELS", "log$1", "_args", "setLogLevel$1", "level", "numericLevel", "format", "dayjs", "lineBreakRegex", "getRows", "s", "breakToPlaceholder", "setupDompurifyHooksIfNotSetup", "setup", "setupDompurifyHooks", "TEMPORARY_ATTRIBUTE", "DOMPurify", "node", "removeScript", "txt", "sanitizeMore", "text", "config2", "_a", "placeholderToBreak", "sanitizeText$2", "sanitizeTextOrArray", "a", "x", "hasBreaks", "splitBreaks", "getUrl", "useAbsolute", "url", "evaluate", "val", "getMax", "values", "newValues", "value", "getMin", "parseGenericTypes", "input", "inputSets", "output", "thisSet", "previousSet", "nextSet", "shouldCombineSets", "processSet", "countOccurrence", "string", "substring", "prevCount", "nextCount", "tildeCount", "hasStartingTilde", "chars", "first", "last", "isMathMLSupported", "katexRegex", "hasKatex", "calculateMathMLDimensions", "renderKatex", "divElem", "body", "dim", "katex", "line", "_", "c", "common$1", "mkBorder", "col", "darkMode", "adjust_default", "oldAttributeBackgroundColorOdd", "oldAttributeBackgroundColorEven", "Theme$4", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "invert_default", "darken_default", "lighten_default", "i", "multiplier", "is_dark_default", "overrides", "keys", "k", "getThemeVariables$4", "userOverrides", "theme2", "Theme$3", "rgba_default", "getThemeVariables$3", "Theme$2", "getThemeVariables$2", "Theme$1", "getThemeVariables$1", "Theme5", "getThemeVariables", "theme", "defaultConfigJson", "config", "keyify", "obj", "prefix", "res", "el", "configKeys", "defaultConfig$2", "sanitizeDirective", "args", "arg", "key", "cssMatchers", "cssKey", "sanitizeCss", "str2", "startCnt", "endCnt", "element", "frontMatterRegex", "directiveRegex", "anyCommentRegex", "UnknownDiagramError", "message", "detectors", "detectType", "detector2", "registerLazyLoadedDiagrams", "diagrams2", "id2", "loader2", "addDetector", "getDiagramLoader", "assignWithDepth", "dst", "src", "depth", "clobber", "assignWithDepth$1", "ZERO_WIDTH_SPACE", "d3CurveTypes", "basis_default", "basisClosed_default", "basisOpen_default", "bumpX", "bumpY", "bundle_default", "cardinalClosed_default", "cardinalOpen_default", "cardinal_default", "catmullRomClosed_default", "catmullRomOpen_default", "catmullRom_default", "linear_default", "linearClosed_default", "monotoneX", "monotoneY", "natural_default", "step_default", "stepAfter", "stepBefore", "directiveWithoutOpen", "detectInit", "inits", "detectDirective", "results", "init2", "type2", "prop", "commentWithoutDirectives", "match", "result", "type22", "error", "removeDirectives", "isSubstringInArray", "arr", "interpolateToCurve", "interpolate", "defaultCurve", "curveName", "formatUrl", "linkStr", "runFunc", "functionName", "params", "arrPaths", "len", "fnName", "distance", "p1", "p2", "traverseEdge", "points", "prevPoint", "totalDistance", "point", "remainingDistance", "calculatePoint", "calcLabelPosition", "roundNumber", "num", "precision", "factor", "distanceToTraverse", "vectorDistance", "distanceRatio", "calcCardinalityPosition", "isRelationTypePresent", "initialPosition", "center", "d", "angle", "cardinalityPosition", "calcTerminalLabelPosition", "terminalMarkerSize", "position", "_points", "distanceToCardinalityPoint", "getStylesFromArray", "style", "labelStyle", "cnt", "generateId", "makeRandomHex", "length", "characters", "charactersLength", "random", "options", "getTextObj", "drawSimpleText", "elem", "textData", "nText", "_fontSizePx", "parseFontSize", "textElem", "span", "wrapLabel", "memoize_default", "label", "maxWidth", "words", "completedLines", "nextLine", "word", "index", "wordLength", "calculateTextWidth", "nextLineLength", "hyphenatedStrings", "remainingWord", "breakString", "hyphenCharacter", "lines", "currentLine", "character", "currentCharacter", "isLastLine", "hyphenatedNextLine", "calculateTextHeight", "calculateTextDimensions", "fontSize", "fontFamily", "fontWeight", "fontFamilies", "dims", "select_default", "g", "fontFamily2", "cHeight", "textObj", "bBox", "InitIDGenerator", "deterministic", "seed", "decoder", "entityDecode", "html", "isDetailedError", "insertTitle", "parent", "cssClass", "titleTopMargin", "title", "bounds", "fontSizeNumber", "cleanAndMerge", "defaultData", "data", "merge_default", "utils", "encodeEntities", "innerTxt", "decodeEntities", "version", "defaultConfig$1", "siteConfig", "configFromInitialize", "directives", "currentConfig", "updateCurrentConfig", "siteCfg", "_directives", "cfg", "sumOfDirectives", "sanitize", "tmpConfigFromInitialize", "themeVariables", "checkConfig", "setSiteConfig", "conf", "saveConfigFromInitialize", "updateSiteConfig", "getSiteConfig", "setConfig$1", "getConfig$1", "addDirective", "directive", "reset", "ConfigWarning", "issuedWarnings", "issueWarning", "warning", "id$l", "detector$l", "loader$m", "diagram2", "plugin$j", "c4", "id$k", "detector$k", "loader$l", "plugin$i", "flowchart", "id$j", "detector$j", "loader$k", "plugin$h", "flowchartV2", "id$i", "detector$i", "loader$j", "plugin$g", "er", "id$h", "detector$h", "loader$i", "plugin$f", "git", "id$g", "detector$g", "loader$h", "plugin$e", "gantt", "id$f", "detector$f", "loader$g", "info", "id$e", "detector$e", "loader$f", "pie", "id$d", "detector$d", "loader$e", "plugin$d", "quadrantChart", "id$c", "detector$c", "loader$d", "plugin$c", "xychart", "id$b", "detector$b", "loader$c", "plugin$b", "requirement", "id$a", "detector$a", "loader$b", "plugin$a", "sequence", "id$9", "detector$9", "loader$a", "plugin$9", "classDiagram", "id$8", "detector$8", "loader$9", "plugin$8", "classDiagramV2", "id$7", "detector$7", "loader$8", "plugin$7", "state", "id$6", "detector$6", "loader$7", "plugin$6", "stateV2", "id$5", "detector$5", "loader$6", "plugin$5", "journey", "d3Attrs", "d3Elem", "attrs", "attr", "calculateSvgSizeAttrs", "height", "width", "useMaxWidth", "configureSvgSize", "svgElem", "setupGraphViewbox$1", "graph", "padding", "svgBounds", "sWidth", "sHeight", "vBox", "themes", "getStyles", "userStyles", "diagramStyles", "addStylesForDiagram", "diagramTheme", "getStyles$1", "accTitle", "diagramTitle", "accDescription", "sanitizeText$1", "clear", "setAccTitle", "getAccTitle", "setAccDescription", "getAccDescription", "setDiagramTitle", "getDiagramTitle", "commonDb", "log", "setLogLevel", "getConfig", "setConfig", "defaultConfig", "sanitizeText", "setupGraphViewbox", "getCommonDb", "diagrams", "registerDiagram", "getDiagram", "name", "DiagramNotFoundError", "selectSvgElement", "securityLevel", "root", "doc", "draw", "_text", "version2", "svg", "renderer", "errorRenderer", "diagram", "errorDiagram", "id$4", "detector$4", "loader$5", "plugin$4", "flowchartElk", "id$3", "detector$3", "loader$4", "plugin$3", "timeline", "id$2", "detector$2", "loader$3", "plugin$2", "mindmap", "id$1", "detector$1", "loader$2", "plugin$1", "sankey", "id", "detector", "loader$1", "plugin", "block", "hasLoadedDiagrams", "addDiagrams", "Diagram", "metadata", "cnf", "e", "getDiagramFromText$1", "interactionFunctions", "attachFunctions", "f", "SVG_ROLE", "setA11yDiagramInfo", "diagramType", "addSVGa11yTitleDescription", "a11yTitle", "a11yDesc", "baseId", "descId", "titleId", "cleanupComments", "isNothing", "subject", "isObject", "toArray", "sequence2", "extend", "target", "source", "sourceKeys", "repeat", "count", "cycle", "isNegativeZero", "number", "isNothing_1", "isObject_1", "toArray_1", "repeat_1", "isNegativeZero_1", "extend_1", "common", "formatError", "exception2", "compact", "where", "YAMLException$1", "reason", "mark", "exception", "getLine", "buffer", "lineStart", "lineEnd", "maxLineLength", "head", "tail", "maxHalfLength", "padStart", "max", "makeSnippet", "re", "lineStarts", "lineEnds", "foundLineNo", "lineNoLength", "snippet", "TYPE_CONSTRUCTOR_OPTIONS", "YAML_NODE_KINDS", "compileStyleAliases", "map2", "alias", "Type$1", "tag", "type", "compileList", "schema2", "currentType", "newIndex", "previousType", "previousIndex", "compileMap", "collectType", "Schema$1", "definition", "implicit", "explicit", "type$1", "schema", "str", "seq", "map", "failsafe", "resolveYamlNull", "constructYamlNull", "isNull", "object", "_null", "resolveYamlBoolean", "constructYamlBoolean", "isBoolean", "bool", "isHexCode", "isOctCode", "isDecCode", "resolveYamlInteger", "hasDigits", "ch", "constructYamlInteger", "sign", "isInteger", "int", "YAML_FLOAT_PATTERN", "resolveYamlFloat", "constructYamlFloat", "SCIENTIFIC_WITHOUT_DOT", "representYamlFloat", "isFloat", "float", "json", "core", "YAML_DATE_REGEXP", "YAML_TIMESTAMP_REGEXP", "resolveYamlTimestamp", "constructYamlTimestamp", "year", "month", "day", "hour", "minute", "second", "fraction", "delta", "tz_hour", "tz_minute", "date", "representYamlTimestamp", "timestamp", "resolveYamlMerge", "merge", "BASE64_MAP", "resolveYamlBinary", "code", "idx", "bitlen", "constructYamlBinary", "tailbits", "bits", "representYamlBinary", "isBinary", "binary", "_hasOwnProperty$3", "_toString$2", "resolveYamlOmap", "objectKeys", "pair", "pairKey", "pairHasKey", "constructYamlOmap", "omap", "_toString$1", "resolveYamlPairs", "constructYamlPairs", "pairs", "_hasOwnProperty$2", "resolveYamlSet", "constructYamlSet", "set", "_default", "_hasOwnProperty$1", "CONTEXT_FLOW_IN", "CONTEXT_FLOW_OUT", "CONTEXT_BLOCK_IN", "CONTEXT_BLOCK_OUT", "CHOMPING_CLIP", "CHOMPING_STRIP", "CHOMPING_KEEP", "PATTERN_NON_PRINTABLE", "PATTERN_NON_ASCII_LINE_BREAKS", "PATTERN_FLOW_INDICATORS", "PATTERN_TAG_HANDLE", "PATTERN_TAG_URI", "_class", "is_EOL", "is_WHITE_SPACE", "is_WS_OR_EOL", "is_FLOW_INDICATOR", "fromHexCode", "lc", "escapedHexLen", "fromDecimalCode", "simpleEscapeSequence", "charFromCodepoint", "simpleEscapeCheck", "simpleEscapeMap", "State$1", "generateError", "state2", "throwError", "throwWarning", "directiveHandlers", "major", "minor", "handle", "captureSegment", "start", "end", "checkJson", "_position", "_length", "_character", "_result", "mergeMappings", "destination", "overridableKeys", "quantity", "storeMappingPair", "keyTag", "keyNode", "valueNode", "startLine", "startLineStart", "startPos", "readLineBreak", "skipSeparationSpace", "allowComments", "checkIndent", "lineBreaks", "testDocumentSeparator", "writeFoldedLines", "readPlainScalar", "nodeIndent", "withinFlowCollection", "preceding", "following", "captureStart", "captureEnd", "hasPendingContent", "_line", "_lineStart", "_lineIndent", "_kind", "readSingleQuotedScalar", "readDoubleQuotedScalar", "hexLength", "hexResult", "tmp", "readFlowCollection", "readNext", "_pos", "_tag", "_anchor", "terminator", "isPair", "isExplicitPair", "isMapping", "composeNode", "readBlockScalar", "folding", "chomping", "didReadContent", "detectedIndent", "textIndent", "emptyLines", "atMoreIndented", "readBlockSequence", "detected", "readBlockMapping", "flowIndent", "allowCompact", "_keyLine", "_keyLineStart", "_keyPos", "atExplicitKey", "readTagProperty", "isVerbatim", "isNamed", "tagHandle", "tagName", "readAnchorProperty", "readAlias", "parentIndent", "nodeContext", "allowToSeek", "allowBlockStyles", "allowBlockScalars", "allowBlockCollections", "indentStatus", "atNewLine", "hasContent", "typeIndex", "typeQuantity", "typeList", "blockIndent", "readDocument", "documentStart", "directiveName", "directiveArgs", "hasDirectives", "loadDocuments", "nullpos", "loadAll$1", "iterator", "documents", "load$1", "loadAll_1", "load_1", "loader", "JSON_SCHEMA", "load", "extractFrontMatter", "matches", "parsed", "cleanupText", "attributes", "processFrontmatter", "displayMode", "processDirectives", "initDirective", "wrapDirectives", "preprocessDiagram", "cleanedCode", "frontMatterResult", "directiveResult", "MAX_TEXTLENGTH", "MAX_TEXTLENGTH_EXCEEDED_MSG", "SECURITY_LVL_SANDBOX", "SECURITY_LVL_LOOSE", "XMLNS_SVG_STD", "XMLNS_XLINK_STD", "XMLNS_XHTML_STD", "IFRAME_WIDTH", "IFRAME_HEIGHT", "IFRAME_STYLES", "IFRAME_BODY_STYLE", "IFRAME_SANDBOX_OPTS", "IFRAME_NOT_SUPPORTED_MSG", "DOMPURIFY_TAGS", "DOMPURIFY_ATTR", "processAndSetConfigs", "processed", "parse$1", "parseOptions", "getDiagramFromText", "cssImportantStyles", "cssClasses", "createCssStyles", "classDefs", "cssStyles", "isEmpty_default", "cssElements", "classId", "styleClassDef", "cssElement", "createUserStyles", "graphType", "svgId", "userCSSstyles", "allStyles", "serialize", "compile", "stringify", "cleanUpSvgCode", "svgCode", "inSandboxMode", "useArrowMarkerUrls", "cleanedUpSvg", "putIntoIFrame", "svgElement", "base64encodedSrc", "appendDivSvgG", "parentRoot", "enclosingDivId", "divStyle", "svgXlink", "enclosingDiv", "svgNode", "sandboxedIframe", "parentNode", "iFrameId", "removeExistingElements", "divId", "render$1", "svgContainingElement", "idSelector", "iFrameID", "iFrameID_selector", "enclosingDivID", "enclosingDivID_selector", "isSandboxed", "isLooseSecurityLevel", "iframe", "diag", "parseEncounteredException", "firstChild", "diagramClassDefs", "rules", "style1", "a11yDescr", "addA11yInfo", "svgEl", "initialize$1", "mermaidAPI", "loadRegisteredDiagrams", "failed", "err", "handleError", "errors", "parseError", "run", "runThrowsErrors", "mermaid", "postRenderCallback", "querySelector", "nodes", "nodesToProcess", "idGenerator", "dedent", "bindFunctions", "render", "initialize", "init", "callback", "runOptions", "registerExternalDiagrams", "lazyLoad", "contentLoaded", "startOnLoad", "setParseErrorHandler", "parseErrorHandler", "executionQueue", "executionQueueRunning", "executeQueue", "parse", "resolve", "reject", "performCall", "rej", "r", "container"] +} diff --git a/public/classDiagram-fb54d2a0-HROX7LLG.min.js b/public/classDiagram-fb54d2a0-HROX7LLG.min.js new file mode 100644 index 000000000..56c0385fe --- /dev/null +++ b/public/classDiagram-fb54d2a0-HROX7LLG.min.js @@ -0,0 +1,3 @@ +import{a as G,b as S,c as I}from"./chunk-QRBMAIWT.min.js";import{a as W}from"./chunk-RNO6SWHZ.min.js";import{A}from"./chunk-K2MRC2FE.min.js";import{G as _,Ga as y,I as C,J as R,Ka as O,ab as T,b as J,c as Z,db as P,h as E,nb as v}from"./chunk-YEACHCAA.min.js";import{d as N}from"./chunk-XUHMPXWX.min.js";var at=N(J(),1),it=N(Z(),1),nt=N(R(),1);var X=0,F=function(i,r,t,o,p){let g=function(e){switch(e){case p.db.relationType.AGGREGATION:return"aggregation";case p.db.relationType.EXTENSION:return"extension";case p.db.relationType.COMPOSITION:return"composition";case p.db.relationType.DEPENDENCY:return"dependency";case p.db.relationType.LOLLIPOP:return"lollipop"}};r.points=r.points.filter(e=>!Number.isNaN(e.y));let s=r.points,c=_().x(function(e){return e.x}).y(function(e){return e.y}).curve(C),n=i.append("path").attr("d",c(s)).attr("id","edge"+X).attr("class","relation"),a="";o.arrowMarkerAbsolute&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replace(/\(/g,"\\("),a=a.replace(/\)/g,"\\)")),t.relation.lineType==1&&n.attr("class","relation dashed-line"),t.relation.lineType==10&&n.attr("class","relation dotted-line"),t.relation.type1!=="none"&&n.attr("marker-start","url("+a+"#"+g(t.relation.type1)+"Start)"),t.relation.type2!=="none"&&n.attr("marker-end","url("+a+"#"+g(t.relation.type2)+"End)");let f,h,x=r.points.length,b=T.calcLabelPosition(r.points);f=b.x,h=b.y;let u,m,w,k;if(x%2!==0&&x>1){let e=T.calcCardinalityPosition(t.relation.type1!=="none",r.points,r.points[0]),d=T.calcCardinalityPosition(t.relation.type2!=="none",r.points,r.points[x-1]);y.debug("cardinality_1_point "+JSON.stringify(e)),y.debug("cardinality_2_point "+JSON.stringify(d)),u=e.x,m=e.y,w=d.x,k=d.y}if(t.title!==void 0){let e=i.append("g").attr("class","classLabel"),d=e.append("text").attr("class","label").attr("x",f).attr("y",h).attr("fill","red").attr("text-anchor","middle").text(t.title);window.label=d;let l=d.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",l.x-o.padding/2).attr("y",l.y-o.padding/2).attr("width",l.width+o.padding).attr("height",l.height+o.padding)}y.info("Rendering relation "+JSON.stringify(t)),t.relationTitle1!==void 0&&t.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",u).attr("y",m).attr("fill","black").attr("font-size","6").text(t.relationTitle1),t.relationTitle2!==void 0&&t.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",w).attr("y",k).attr("fill","black").attr("font-size","6").text(t.relationTitle2),X++},U=function(i,r,t,o){y.debug("Rendering class ",r,t);let p=r.id,g={id:p,label:r.id,width:0,height:0},s=i.append("g").attr("id",o.db.lookUpDomId(p)).attr("class","classGroup"),c;r.link?c=s.append("svg:a").attr("xlink:href",r.link).attr("target",r.linkTarget).append("text").attr("y",t.textHeight+t.padding).attr("x",0):c=s.append("text").attr("y",t.textHeight+t.padding).attr("x",0);let n=!0;r.annotations.forEach(function(d){let l=c.append("tspan").text("\xAB"+d+"\xBB");n||l.attr("dy",t.textHeight),n=!1});let a=$(r),f=c.append("tspan").text(a).attr("class","title");n||f.attr("dy",t.textHeight);let h=c.node().getBBox().height,x,b,u;if(r.members.length>0){x=s.append("line").attr("x1",0).attr("y1",t.padding+h+t.dividerMargin/2).attr("y2",t.padding+h+t.dividerMargin/2);let d=s.append("text").attr("x",t.padding).attr("y",h+t.dividerMargin+t.textHeight).attr("fill","white").attr("class","classText");n=!0,r.members.forEach(function(l){Y(d,l,n,t),n=!1}),b=d.node().getBBox()}if(r.methods.length>0){u=s.append("line").attr("x1",0).attr("y1",t.padding+h+t.dividerMargin+b.height).attr("y2",t.padding+h+t.dividerMargin+b.height);let d=s.append("text").attr("x",t.padding).attr("y",h+2*t.dividerMargin+b.height+t.textHeight).attr("fill","white").attr("class","classText");n=!0,r.methods.forEach(function(l){Y(d,l,n,t),n=!1})}let m=s.node().getBBox();var w=" ";r.cssClasses.length>0&&(w=w+r.cssClasses.join(" "));let e=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",m.width+2*t.padding).attr("height",m.height+t.padding+.5*t.dividerMargin).attr("class",w).node().getBBox().width;return c.node().childNodes.forEach(function(d){d.setAttribute("x",(e-d.getBBox().width)/2)}),r.tooltip&&c.insert("title").text(r.tooltip),x&&x.attr("x2",e),u&&u.attr("x2",e),g.width=e,g.height=m.height+t.padding+.5*t.dividerMargin,g},$=function(i){let r=i.id;return i.type&&(r+="<"+O(i.type)+">"),r},z=function(i,r,t,o){y.debug("Rendering note ",r,t);let p=r.id,g={id:p,text:r.text,width:0,height:0},s=i.append("g").attr("id",p).attr("class","classGroup"),c=s.append("text").attr("y",t.textHeight+t.padding).attr("x",0),n=JSON.parse(`"${r.text}"`).split(` +`);n.forEach(function(x){y.debug(`Adding line: ${x}`),c.append("tspan").text(x).attr("class","title").attr("dy",t.textHeight)});let a=s.node().getBBox(),h=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",a.width+2*t.padding).attr("height",a.height+n.length*t.textHeight+t.padding+.5*t.dividerMargin).node().getBBox().width;return c.node().childNodes.forEach(function(x){x.setAttribute("x",(h-x.getBBox().width)/2)}),g.width=h,g.height=a.height+n.length*t.textHeight+t.padding+.5*t.dividerMargin,g},Y=function(i,r,t,o){let{displayText:p,cssStyle:g}=r.getDisplayDetails(),s=i.append("tspan").attr("x",o.padding).text(p);g!==""&&s.attr("style",r.cssStyle),t||s.attr("dy",o.textHeight)},H={getClassTitleString:$,drawClass:U,drawEdge:F,drawNote:z},M={},B=20,L=function(i){let r=Object.entries(M).find(t=>t[1].label===i);if(r)return r[0]},V=function(i){i.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),i.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},q=function(i,r,t,o){let p=v().class;M={},y.info("Rendering diagram "+i);let g=v().securityLevel,s;g==="sandbox"&&(s=E("#i"+r));let c=g==="sandbox"?E(s.nodes()[0].contentDocument.body):E("body"),n=c.select(`[id='${r}']`);V(n);let a=new A({multigraph:!0});a.setGraph({isMultiGraph:!0}),a.setDefaultEdgeLabel(function(){return{}});let f=o.db.getClasses(),h=Object.keys(f);for(let e of h){let d=f[e],l=H.drawClass(n,d,p,o);M[l.id]=l,a.setNode(l.id,l),y.info("Org height: "+l.height)}o.db.getRelations().forEach(function(e){y.info("tjoho"+L(e.id1)+L(e.id2)+JSON.stringify(e)),a.setEdge(L(e.id1),L(e.id2),{relation:e},e.title||"DEFAULT")}),o.db.getNotes().forEach(function(e){y.debug(`Adding note: ${JSON.stringify(e)}`);let d=H.drawNote(n,e,p,o);M[d.id]=d,a.setNode(d.id,d),e.class&&e.class in f&&a.setEdge(e.id,L(e.class),{relation:{id1:e.id,id2:e.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),W(a),a.nodes().forEach(function(e){e!==void 0&&a.node(e)!==void 0&&(y.debug("Node "+e+": "+JSON.stringify(a.node(e))),c.select("#"+(o.db.lookUpDomId(e)||e)).attr("transform","translate("+(a.node(e).x-a.node(e).width/2)+","+(a.node(e).y-a.node(e).height/2)+" )"))}),a.edges().forEach(function(e){e!==void 0&&a.edge(e)!==void 0&&(y.debug("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(a.edge(e))),H.drawEdge(n,a.edge(e),a.edge(e).relation,p,o))});let u=n.node().getBBox(),m=u.width+B*2,w=u.height+B*2;P(n,w,m,p.useMaxWidth);let k=`${u.x-B} ${u.y-B} ${m} ${w}`;y.debug(`viewBox ${k}`),n.attr("viewBox",k)},K={draw:q},dt={parser:G,db:S,renderer:K,styles:I,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,S.clear()}};export{dt as diagram}; +//# sourceMappingURL=classDiagram-fb54d2a0-HROX7LLG.min.js.map diff --git a/public/classDiagram-fb54d2a0-HROX7LLG.min.js.map b/public/classDiagram-fb54d2a0-HROX7LLG.min.js.map new file mode 100644 index 000000000..d806c3b70 --- /dev/null +++ b/public/classDiagram-fb54d2a0-HROX7LLG.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/mermaid/dist/classDiagram-fb54d2a0.js"], + "sourcesContent": ["import { p as parser, d as db, s as styles } from \"./styles-b83b31c9.js\";\nimport { line, curveBasis, select } from \"d3\";\nimport { layout } from \"dagre-d3-es/src/dagre/index.js\";\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nimport { u as utils, l as log, x as parseGenericTypes, c as getConfig, i as configureSvgSize } from \"./mermaid-6dc72991.js\";\nimport \"ts-dedent\";\nimport \"dayjs\";\nimport \"@braintree/sanitize-url\";\nimport \"dompurify\";\nimport \"khroma\";\nimport \"lodash-es/memoize.js\";\nimport \"lodash-es/merge.js\";\nimport \"stylis\";\nimport \"lodash-es/isEmpty.js\";\nlet edgeCount = 0;\nconst drawEdge = function(elem, path, relation, conf, diagObj) {\n const getRelationType = function(type) {\n switch (type) {\n case diagObj.db.relationType.AGGREGATION:\n return \"aggregation\";\n case diagObj.db.relationType.EXTENSION:\n return \"extension\";\n case diagObj.db.relationType.COMPOSITION:\n return \"composition\";\n case diagObj.db.relationType.DEPENDENCY:\n return \"dependency\";\n case diagObj.db.relationType.LOLLIPOP:\n return \"lollipop\";\n }\n };\n path.points = path.points.filter((p) => !Number.isNaN(p.y));\n const lineData = path.points;\n const lineFunction = line().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n }).curve(curveBasis);\n const svgPath = elem.append(\"path\").attr(\"d\", lineFunction(lineData)).attr(\"id\", \"edge\" + edgeCount).attr(\"class\", \"relation\");\n let url = \"\";\n if (conf.arrowMarkerAbsolute) {\n url = window.location.protocol + \"//\" + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, \"\\\\(\");\n url = url.replace(/\\)/g, \"\\\\)\");\n }\n if (relation.relation.lineType == 1) {\n svgPath.attr(\"class\", \"relation dashed-line\");\n }\n if (relation.relation.lineType == 10) {\n svgPath.attr(\"class\", \"relation dotted-line\");\n }\n if (relation.relation.type1 !== \"none\") {\n svgPath.attr(\n \"marker-start\",\n \"url(\" + url + \"#\" + getRelationType(relation.relation.type1) + \"Start)\"\n );\n }\n if (relation.relation.type2 !== \"none\") {\n svgPath.attr(\n \"marker-end\",\n \"url(\" + url + \"#\" + getRelationType(relation.relation.type2) + \"End)\"\n );\n }\n let x, y;\n const l = path.points.length;\n let labelPosition = utils.calcLabelPosition(path.points);\n x = labelPosition.x;\n y = labelPosition.y;\n let p1_card_x, p1_card_y;\n let p2_card_x, p2_card_y;\n if (l % 2 !== 0 && l > 1) {\n let cardinality_1_point = utils.calcCardinalityPosition(\n relation.relation.type1 !== \"none\",\n path.points,\n path.points[0]\n );\n let cardinality_2_point = utils.calcCardinalityPosition(\n relation.relation.type2 !== \"none\",\n path.points,\n path.points[l - 1]\n );\n log.debug(\"cardinality_1_point \" + JSON.stringify(cardinality_1_point));\n log.debug(\"cardinality_2_point \" + JSON.stringify(cardinality_2_point));\n p1_card_x = cardinality_1_point.x;\n p1_card_y = cardinality_1_point.y;\n p2_card_x = cardinality_2_point.x;\n p2_card_y = cardinality_2_point.y;\n }\n if (relation.title !== void 0) {\n const g = elem.append(\"g\").attr(\"class\", \"classLabel\");\n const label = g.append(\"text\").attr(\"class\", \"label\").attr(\"x\", x).attr(\"y\", y).attr(\"fill\", \"red\").attr(\"text-anchor\", \"middle\").text(relation.title);\n window.label = label;\n const bounds = label.node().getBBox();\n g.insert(\"rect\", \":first-child\").attr(\"class\", \"box\").attr(\"x\", bounds.x - conf.padding / 2).attr(\"y\", bounds.y - conf.padding / 2).attr(\"width\", bounds.width + conf.padding).attr(\"height\", bounds.height + conf.padding);\n }\n log.info(\"Rendering relation \" + JSON.stringify(relation));\n if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== \"none\") {\n const g = elem.append(\"g\").attr(\"class\", \"cardinality\");\n g.append(\"text\").attr(\"class\", \"type1\").attr(\"x\", p1_card_x).attr(\"y\", p1_card_y).attr(\"fill\", \"black\").attr(\"font-size\", \"6\").text(relation.relationTitle1);\n }\n if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== \"none\") {\n const g = elem.append(\"g\").attr(\"class\", \"cardinality\");\n g.append(\"text\").attr(\"class\", \"type2\").attr(\"x\", p2_card_x).attr(\"y\", p2_card_y).attr(\"fill\", \"black\").attr(\"font-size\", \"6\").text(relation.relationTitle2);\n }\n edgeCount++;\n};\nconst drawClass = function(elem, classDef, conf, diagObj) {\n log.debug(\"Rendering class \", classDef, conf);\n const id = classDef.id;\n const classInfo = {\n id,\n label: classDef.id,\n width: 0,\n height: 0\n };\n const g = elem.append(\"g\").attr(\"id\", diagObj.db.lookUpDomId(id)).attr(\"class\", \"classGroup\");\n let title;\n if (classDef.link) {\n title = g.append(\"svg:a\").attr(\"xlink:href\", classDef.link).attr(\"target\", classDef.linkTarget).append(\"text\").attr(\"y\", conf.textHeight + conf.padding).attr(\"x\", 0);\n } else {\n title = g.append(\"text\").attr(\"y\", conf.textHeight + conf.padding).attr(\"x\", 0);\n }\n let isFirst = true;\n classDef.annotations.forEach(function(member) {\n const titleText2 = title.append(\"tspan\").text(\"\u00AB\" + member + \"\u00BB\");\n if (!isFirst) {\n titleText2.attr(\"dy\", conf.textHeight);\n }\n isFirst = false;\n });\n let classTitleString = getClassTitleString(classDef);\n const classTitle = title.append(\"tspan\").text(classTitleString).attr(\"class\", \"title\");\n if (!isFirst) {\n classTitle.attr(\"dy\", conf.textHeight);\n }\n const titleHeight = title.node().getBBox().height;\n let membersLine;\n let membersBox;\n let methodsLine;\n if (classDef.members.length > 0) {\n membersLine = g.append(\"line\").attr(\"x1\", 0).attr(\"y1\", conf.padding + titleHeight + conf.dividerMargin / 2).attr(\"y2\", conf.padding + titleHeight + conf.dividerMargin / 2);\n const members = g.append(\"text\").attr(\"x\", conf.padding).attr(\"y\", titleHeight + conf.dividerMargin + conf.textHeight).attr(\"fill\", \"white\").attr(\"class\", \"classText\");\n isFirst = true;\n classDef.members.forEach(function(member) {\n addTspan(members, member, isFirst, conf);\n isFirst = false;\n });\n membersBox = members.node().getBBox();\n }\n if (classDef.methods.length > 0) {\n methodsLine = g.append(\"line\").attr(\"x1\", 0).attr(\"y1\", conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr(\"y2\", conf.padding + titleHeight + conf.dividerMargin + membersBox.height);\n const methods = g.append(\"text\").attr(\"x\", conf.padding).attr(\"y\", titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr(\"fill\", \"white\").attr(\"class\", \"classText\");\n isFirst = true;\n classDef.methods.forEach(function(method) {\n addTspan(methods, method, isFirst, conf);\n isFirst = false;\n });\n }\n const classBox = g.node().getBBox();\n var cssClassStr = \" \";\n if (classDef.cssClasses.length > 0) {\n cssClassStr = cssClassStr + classDef.cssClasses.join(\" \");\n }\n const rect = g.insert(\"rect\", \":first-child\").attr(\"x\", 0).attr(\"y\", 0).attr(\"width\", classBox.width + 2 * conf.padding).attr(\"height\", classBox.height + conf.padding + 0.5 * conf.dividerMargin).attr(\"class\", cssClassStr);\n const rectWidth = rect.node().getBBox().width;\n title.node().childNodes.forEach(function(x) {\n x.setAttribute(\"x\", (rectWidth - x.getBBox().width) / 2);\n });\n if (classDef.tooltip) {\n title.insert(\"title\").text(classDef.tooltip);\n }\n if (membersLine) {\n membersLine.attr(\"x2\", rectWidth);\n }\n if (methodsLine) {\n methodsLine.attr(\"x2\", rectWidth);\n }\n classInfo.width = rectWidth;\n classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin;\n return classInfo;\n};\nconst getClassTitleString = function(classDef) {\n let classTitleString = classDef.id;\n if (classDef.type) {\n classTitleString += \"<\" + parseGenericTypes(classDef.type) + \">\";\n }\n return classTitleString;\n};\nconst drawNote = function(elem, note, conf, diagObj) {\n log.debug(\"Rendering note \", note, conf);\n const id = note.id;\n const noteInfo = {\n id,\n text: note.text,\n width: 0,\n height: 0\n };\n const g = elem.append(\"g\").attr(\"id\", id).attr(\"class\", \"classGroup\");\n let text = g.append(\"text\").attr(\"y\", conf.textHeight + conf.padding).attr(\"x\", 0);\n const lines = JSON.parse(`\"${note.text}\"`).split(\"\\n\");\n lines.forEach(function(line2) {\n log.debug(`Adding line: ${line2}`);\n text.append(\"tspan\").text(line2).attr(\"class\", \"title\").attr(\"dy\", conf.textHeight);\n });\n const noteBox = g.node().getBBox();\n const rect = g.insert(\"rect\", \":first-child\").attr(\"x\", 0).attr(\"y\", 0).attr(\"width\", noteBox.width + 2 * conf.padding).attr(\n \"height\",\n noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin\n );\n const rectWidth = rect.node().getBBox().width;\n text.node().childNodes.forEach(function(x) {\n x.setAttribute(\"x\", (rectWidth - x.getBBox().width) / 2);\n });\n noteInfo.width = rectWidth;\n noteInfo.height = noteBox.height + lines.length * conf.textHeight + conf.padding + 0.5 * conf.dividerMargin;\n return noteInfo;\n};\nconst addTspan = function(textEl, member, isFirst, conf) {\n const { displayText, cssStyle } = member.getDisplayDetails();\n const tSpan = textEl.append(\"tspan\").attr(\"x\", conf.padding).text(displayText);\n if (cssStyle !== \"\") {\n tSpan.attr(\"style\", member.cssStyle);\n }\n if (!isFirst) {\n tSpan.attr(\"dy\", conf.textHeight);\n }\n};\nconst svgDraw = {\n getClassTitleString,\n drawClass,\n drawEdge,\n drawNote\n};\nlet idCache = {};\nconst padding = 20;\nconst getGraphId = function(label) {\n const foundEntry = Object.entries(idCache).find((entry) => entry[1].label === label);\n if (foundEntry) {\n return foundEntry[0];\n }\n};\nconst insertMarkers = function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"extensionStart\").attr(\"class\", \"extension\").attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,7 L18,13 V 1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"extensionEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 1,1 V 13 L18,7 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"compositionStart\").attr(\"class\", \"extension\").attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"compositionEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"aggregationStart\").attr(\"class\", \"extension\").attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"aggregationEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"dependencyStart\").attr(\"class\", \"extension\").attr(\"refX\", 0).attr(\"refY\", 7).attr(\"markerWidth\", 190).attr(\"markerHeight\", 240).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 5,7 L9,13 L1,7 L9,1 Z\");\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"dependencyEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 18,7 L9,13 L14,7 L9,1 Z\");\n};\nconst draw = function(text, id, _version, diagObj) {\n const conf = getConfig().class;\n idCache = {};\n log.info(\"Rendering diagram \" + text);\n const securityLevel = getConfig().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const diagram2 = root.select(`[id='${id}']`);\n insertMarkers(diagram2);\n const g = new graphlib.Graph({\n multigraph: true\n });\n g.setGraph({\n isMultiGraph: true\n });\n g.setDefaultEdgeLabel(function() {\n return {};\n });\n const classes = diagObj.db.getClasses();\n const keys = Object.keys(classes);\n for (const key of keys) {\n const classDef = classes[key];\n const node = svgDraw.drawClass(diagram2, classDef, conf, diagObj);\n idCache[node.id] = node;\n g.setNode(node.id, node);\n log.info(\"Org height: \" + node.height);\n }\n const relations = diagObj.db.getRelations();\n relations.forEach(function(relation) {\n log.info(\n // cspell:ignore tjoho\n \"tjoho\" + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation)\n );\n g.setEdge(\n getGraphId(relation.id1),\n getGraphId(relation.id2),\n {\n relation\n },\n relation.title || \"DEFAULT\"\n );\n });\n const notes = diagObj.db.getNotes();\n notes.forEach(function(note) {\n log.debug(`Adding note: ${JSON.stringify(note)}`);\n const node = svgDraw.drawNote(diagram2, note, conf, diagObj);\n idCache[node.id] = node;\n g.setNode(node.id, node);\n if (note.class && note.class in classes) {\n g.setEdge(\n note.id,\n getGraphId(note.class),\n {\n relation: {\n id1: note.id,\n id2: note.class,\n relation: {\n type1: \"none\",\n type2: \"none\",\n lineType: 10\n }\n }\n },\n \"DEFAULT\"\n );\n }\n });\n layout(g);\n g.nodes().forEach(function(v) {\n if (v !== void 0 && g.node(v) !== void 0) {\n log.debug(\"Node \" + v + \": \" + JSON.stringify(g.node(v)));\n root.select(\"#\" + (diagObj.db.lookUpDomId(v) || v)).attr(\n \"transform\",\n \"translate(\" + (g.node(v).x - g.node(v).width / 2) + \",\" + (g.node(v).y - g.node(v).height / 2) + \" )\"\n );\n }\n });\n g.edges().forEach(function(e) {\n if (e !== void 0 && g.edge(e) !== void 0) {\n log.debug(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(g.edge(e)));\n svgDraw.drawEdge(diagram2, g.edge(e), g.edge(e).relation, conf, diagObj);\n }\n });\n const svgBounds = diagram2.node().getBBox();\n const width = svgBounds.width + padding * 2;\n const height = svgBounds.height + padding * 2;\n configureSvgSize(diagram2, height, width, conf.useMaxWidth);\n const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`;\n log.debug(`viewBox ${vBox}`);\n diagram2.attr(\"viewBox\", vBox);\n};\nconst renderer = {\n draw\n};\nconst diagram = {\n parser,\n db,\n renderer,\n styles,\n init: (cnf) => {\n if (!cnf.class) {\n cnf.class = {};\n }\n cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n db.clear();\n }\n};\nexport {\n diagram\n};\n"], + "mappings": "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", + "names": ["import_dayjs", "import_sanitize_url", "import_dompurify", "edgeCount", "drawEdge", "elem", "path", "relation", "conf", "diagObj", "getRelationType", "type", "p", "lineData", "lineFunction", "line_default", "d", "basis_default", "svgPath", "url", "x", "y", "l", "labelPosition", "utils", "p1_card_x", "p1_card_y", "p2_card_x", "p2_card_y", "cardinality_1_point", "cardinality_2_point", "log$1", "g", "label", "bounds", "drawClass", "classDef", "id", "classInfo", "title", "isFirst", "member", "titleText2", "classTitleString", "getClassTitleString", "classTitle", "titleHeight", "membersLine", "membersBox", "methodsLine", "members", "addTspan", "methods", "method", "classBox", "cssClassStr", "rectWidth", "parseGenericTypes", "drawNote", "note", "noteInfo", "text", "lines", "line2", "noteBox", "textEl", "displayText", "cssStyle", "tSpan", "svgDraw", "idCache", "padding", "getGraphId", "foundEntry", "entry", "insertMarkers", "draw", "_version", "getConfig", "securityLevel", "sandboxElement", "select_default", "root", "diagram2", "Graph", "classes", "keys", "key", "node", "layout", "v", "svgBounds", "width", "height", "configureSvgSize", "vBox", "renderer", "diagram", "parser$1", "db", "styles", "cnf"] +} diff --git a/public/classDiagram-v2-a2b738ad-P3OHMUUZ.min.js b/public/classDiagram-v2-a2b738ad-P3OHMUUZ.min.js new file mode 100644 index 000000000..58e2563b8 --- /dev/null +++ b/public/classDiagram-v2-a2b738ad-P3OHMUUZ.min.js @@ -0,0 +1,3 @@ +import{a as R,b as T,c as $}from"./chunk-QRBMAIWT.min.js";import{a as M}from"./chunk-5FWMXAFW.min.js";import"./chunk-N4EFGQ5G.min.js";import"./chunk-LXB37CFX.min.js";import"./chunk-RNO6SWHZ.min.js";import{A as I}from"./chunk-K2MRC2FE.min.js";import{F as S,Ga as d,J as V,Oa as L,Ta as _,Ua as N,ab as B,b as F,c as H,eb as G,h as g,nb as i}from"./chunk-YEACHCAA.min.js";import{d as k}from"./chunk-XUHMPXWX.min.js";var ot=k(F(),1),lt=k(H(),1),st=k(V(),1);var E=s=>L.sanitizeText(s,i()),D={dividerMargin:10,padding:5,textHeight:10,curve:void 0},W=function(s,e,y,a){let t=Object.keys(s);d.info("keys:",t),d.info(s),t.forEach(function(r){var o,c;let l=s[r],p={shape:"rect",id:l.id,domId:l.domId,labelText:E(l.id),labelStyle:"",style:"fill: none; stroke: black",padding:((o=i().flowchart)==null?void 0:o.padding)??((c=i().class)==null?void 0:c.padding)};e.setNode(l.id,p),P(l.classes,e,y,a,l.id),d.info("setNode",p)})},P=function(s,e,y,a,t){let r=Object.keys(s);d.info("keys:",r),d.info(s),r.filter(o=>s[o].parent==t).forEach(function(o){var c,l;let n=s[o],p=n.cssClasses.join(" "),f=N(n.styles),m=n.label??n.id,u=0,b={labelStyle:f.labelStyle,shape:"class_box",labelText:E(m),classData:n,rx:u,ry:u,class:p,style:f.style,id:n.id,domId:n.domId,tooltip:a.db.getTooltip(n.id,t)||"",haveCallback:n.haveCallback,link:n.link,width:n.type==="group"?500:void 0,type:n.type,padding:((c=i().flowchart)==null?void 0:c.padding)??((l=i().class)==null?void 0:l.padding)};e.setNode(n.id,b),t&&e.setParent(n.id,t),d.info("setNode",b)})},J=function(s,e,y,a){d.info(s),s.forEach(function(t,r){var o,c;let l=t,n="",p={labelStyle:"",style:""},f=l.text,m=0,h={labelStyle:p.labelStyle,shape:"note",labelText:E(f),noteData:l,rx:m,ry:m,class:n,style:p.style,id:l.id,domId:l.id,tooltip:"",type:"note",padding:((o=i().flowchart)==null?void 0:o.padding)??((c=i().class)==null?void 0:c.padding)};if(e.setNode(l.id,h),d.info("setNode",h),!l.class||!(l.class in a))return;let b=y+r,x={id:`edgeNote${b}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:_(D.curve,S)};e.setEdge(l.id,l.class,x,b)})},K=function(s,e){let y=i().flowchart,a=0;s.forEach(function(t){var r;a++;let o={classes:"relation",pattern:t.relation.lineType==1?"dashed":"solid",id:`id_${t.id1}_${t.id2}_${a}`,arrowhead:t.type==="arrow_open"?"none":"normal",startLabelRight:t.relationTitle1==="none"?"":t.relationTitle1,endLabelLeft:t.relationTitle2==="none"?"":t.relationTitle2,arrowTypeStart:z(t.relation.type1),arrowTypeEnd:z(t.relation.type2),style:"fill:none",labelStyle:"",curve:_(y?.curve,S)};if(d.info(o,t),t.style!==void 0){let c=N(t.style);o.style=c.style,o.labelStyle=c.labelStyle}t.text=t.title,t.text===void 0?t.style!==void 0&&(o.arrowheadStyle="fill: #333"):(o.arrowheadStyle="fill: #333",o.labelpos="c",((r=i().flowchart)==null?void 0:r.htmlLabels)??i().htmlLabels?(o.labelType="html",o.label=''+t.text+""):(o.labelType="text",o.label=t.text.replace(L.lineBreakRegex,` +`),t.style===void 0&&(o.style=o.style||"stroke: #333; stroke-width: 1.5px;fill:none"),o.labelStyle=o.labelStyle.replace("color:","fill:"))),e.setEdge(t.id1,t.id2,o,a)})},Q=function(s){D={...D,...s}},U=async function(s,e,y,a){d.info("Drawing class - ",e);let t=i().flowchart??i().class,r=i().securityLevel;d.info("config:",t);let o=t?.nodeSpacing??50,c=t?.rankSpacing??50,l=new I({multigraph:!0,compound:!0}).setGraph({rankdir:a.db.getDirection(),nodesep:o,ranksep:c,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=a.db.getNamespaces(),p=a.db.getClasses(),f=a.db.getRelations(),m=a.db.getNotes();d.info(f),W(n,l,e,a),P(p,l,e,a),K(f,l),J(m,l,f.length+1,p);let u;r==="sandbox"&&(u=g("#i"+e));let h=r==="sandbox"?g(u.nodes()[0].contentDocument.body):g("body"),b=h.select(`[id="${e}"]`),x=h.select("#"+e+" g");if(await M(x,l,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",e),B.insertTitle(b,"classTitleText",t?.titleTopMargin??5,a.db.getDiagramTitle()),G(l,b,t?.diagramPadding,t?.useMaxWidth),!t?.htmlLabels){let C=r==="sandbox"?u.nodes()[0].contentDocument:document,q=C.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(let w of q){let A=w.getBBox(),v=C.createElementNS("http://www.w3.org/2000/svg","rect");v.setAttribute("rx",0),v.setAttribute("ry",0),v.setAttribute("width",A.width),v.setAttribute("height",A.height),w.insertBefore(v,w.firstChild)}}};function z(s){let e;switch(s){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}var X={setConf:Q,draw:U},it={parser:R,db:T,renderer:X,styles:$,init:s=>{s.class||(s.class={}),s.class.arrowMarkerAbsolute=s.arrowMarkerAbsolute,T.clear()}};export{it as diagram}; +//# sourceMappingURL=classDiagram-v2-a2b738ad-P3OHMUUZ.min.js.map diff --git a/public/classDiagram-v2-a2b738ad-P3OHMUUZ.min.js.map b/public/classDiagram-v2-a2b738ad-P3OHMUUZ.min.js.map new file mode 100644 index 000000000..1dd77b8ed --- /dev/null +++ b/public/classDiagram-v2-a2b738ad-P3OHMUUZ.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/mermaid/dist/classDiagram-v2-a2b738ad.js"], + "sourcesContent": ["import { p as parser, d as db, s as styles } from \"./styles-b83b31c9.js\";\nimport { select, curveLinear } from \"d3\";\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nimport { l as log, c as getConfig, u as utils, o as setupGraphViewbox, k as getStylesFromArray, n as interpolateToCurve, e as common } from \"./mermaid-6dc72991.js\";\nimport { r as render } from \"./index-01f381cb.js\";\nimport \"ts-dedent\";\nimport \"dayjs\";\nimport \"@braintree/sanitize-url\";\nimport \"dompurify\";\nimport \"khroma\";\nimport \"lodash-es/memoize.js\";\nimport \"lodash-es/merge.js\";\nimport \"stylis\";\nimport \"lodash-es/isEmpty.js\";\nimport \"dagre-d3-es/src/dagre/index.js\";\nimport \"dagre-d3-es/src/graphlib/json.js\";\nimport \"./edges-066a5561.js\";\nimport \"./createText-ca0c5216.js\";\nimport \"mdast-util-from-markdown\";\nconst sanitizeText = (txt) => common.sanitizeText(txt, getConfig());\nlet conf = {\n dividerMargin: 10,\n padding: 5,\n textHeight: 10,\n curve: void 0\n};\nconst addNamespaces = function(namespaces, g, _id, diagObj) {\n const keys = Object.keys(namespaces);\n log.info(\"keys:\", keys);\n log.info(namespaces);\n keys.forEach(function(id) {\n var _a, _b;\n const vertex = namespaces[id];\n const shape = \"rect\";\n const node = {\n shape,\n id: vertex.id,\n domId: vertex.domId,\n labelText: sanitizeText(vertex.id),\n labelStyle: \"\",\n style: \"fill: none; stroke: black\",\n // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release\n padding: ((_a = getConfig().flowchart) == null ? void 0 : _a.padding) ?? ((_b = getConfig().class) == null ? void 0 : _b.padding)\n };\n g.setNode(vertex.id, node);\n addClasses(vertex.classes, g, _id, diagObj, vertex.id);\n log.info(\"setNode\", node);\n });\n};\nconst addClasses = function(classes, g, _id, diagObj, parent) {\n const keys = Object.keys(classes);\n log.info(\"keys:\", keys);\n log.info(classes);\n keys.filter((id) => classes[id].parent == parent).forEach(function(id) {\n var _a, _b;\n const vertex = classes[id];\n const cssClassStr = vertex.cssClasses.join(\" \");\n const styles2 = getStylesFromArray(vertex.styles);\n const vertexText = vertex.label ?? vertex.id;\n const radius = 0;\n const shape = \"class_box\";\n const node = {\n labelStyle: styles2.labelStyle,\n shape,\n labelText: sanitizeText(vertexText),\n classData: vertex,\n rx: radius,\n ry: radius,\n class: cssClassStr,\n style: styles2.style,\n id: vertex.id,\n domId: vertex.domId,\n tooltip: diagObj.db.getTooltip(vertex.id, parent) || \"\",\n haveCallback: vertex.haveCallback,\n link: vertex.link,\n width: vertex.type === \"group\" ? 500 : void 0,\n type: vertex.type,\n // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release\n padding: ((_a = getConfig().flowchart) == null ? void 0 : _a.padding) ?? ((_b = getConfig().class) == null ? void 0 : _b.padding)\n };\n g.setNode(vertex.id, node);\n if (parent) {\n g.setParent(vertex.id, parent);\n }\n log.info(\"setNode\", node);\n });\n};\nconst addNotes = function(notes, g, startEdgeId, classes) {\n log.info(notes);\n notes.forEach(function(note, i) {\n var _a, _b;\n const vertex = note;\n const cssNoteStr = \"\";\n const styles2 = { labelStyle: \"\", style: \"\" };\n const vertexText = vertex.text;\n const radius = 0;\n const shape = \"note\";\n const node = {\n labelStyle: styles2.labelStyle,\n shape,\n labelText: sanitizeText(vertexText),\n noteData: vertex,\n rx: radius,\n ry: radius,\n class: cssNoteStr,\n style: styles2.style,\n id: vertex.id,\n domId: vertex.id,\n tooltip: \"\",\n type: \"note\",\n // TODO V10: Flowchart ? Keeping flowchart for backwards compatibility. Remove in next major release\n padding: ((_a = getConfig().flowchart) == null ? void 0 : _a.padding) ?? ((_b = getConfig().class) == null ? void 0 : _b.padding)\n };\n g.setNode(vertex.id, node);\n log.info(\"setNode\", node);\n if (!vertex.class || !(vertex.class in classes)) {\n return;\n }\n const edgeId = startEdgeId + i;\n const edgeData = {\n id: `edgeNote${edgeId}`,\n //Set relationship style and line type\n classes: \"relation\",\n pattern: \"dotted\",\n // Set link type for rendering\n arrowhead: \"none\",\n //Set edge extra labels\n startLabelRight: \"\",\n endLabelLeft: \"\",\n //Set relation arrow types\n arrowTypeStart: \"none\",\n arrowTypeEnd: \"none\",\n style: \"fill:none\",\n labelStyle: \"\",\n curve: interpolateToCurve(conf.curve, curveLinear)\n };\n g.setEdge(vertex.id, vertex.class, edgeData, edgeId);\n });\n};\nconst addRelations = function(relations, g) {\n const conf2 = getConfig().flowchart;\n let cnt = 0;\n relations.forEach(function(edge) {\n var _a;\n cnt++;\n const edgeData = {\n //Set relationship style and line type\n classes: \"relation\",\n pattern: edge.relation.lineType == 1 ? \"dashed\" : \"solid\",\n id: `id_${edge.id1}_${edge.id2}_${cnt}`,\n // Set link type for rendering\n arrowhead: edge.type === \"arrow_open\" ? \"none\" : \"normal\",\n //Set edge extra labels\n startLabelRight: edge.relationTitle1 === \"none\" ? \"\" : edge.relationTitle1,\n endLabelLeft: edge.relationTitle2 === \"none\" ? \"\" : edge.relationTitle2,\n //Set relation arrow types\n arrowTypeStart: getArrowMarker(edge.relation.type1),\n arrowTypeEnd: getArrowMarker(edge.relation.type2),\n style: \"fill:none\",\n labelStyle: \"\",\n curve: interpolateToCurve(conf2 == null ? void 0 : conf2.curve, curveLinear)\n };\n log.info(edgeData, edge);\n if (edge.style !== void 0) {\n const styles2 = getStylesFromArray(edge.style);\n edgeData.style = styles2.style;\n edgeData.labelStyle = styles2.labelStyle;\n }\n edge.text = edge.title;\n if (edge.text === void 0) {\n if (edge.style !== void 0) {\n edgeData.arrowheadStyle = \"fill: #333\";\n }\n } else {\n edgeData.arrowheadStyle = \"fill: #333\";\n edgeData.labelpos = \"c\";\n if (((_a = getConfig().flowchart) == null ? void 0 : _a.htmlLabels) ?? getConfig().htmlLabels) {\n edgeData.labelType = \"html\";\n edgeData.label = '' + edge.text + \"\";\n } else {\n edgeData.labelType = \"text\";\n edgeData.label = edge.text.replace(common.lineBreakRegex, \"\\n\");\n if (edge.style === void 0) {\n edgeData.style = edgeData.style || \"stroke: #333; stroke-width: 1.5px;fill:none\";\n }\n edgeData.labelStyle = edgeData.labelStyle.replace(\"color:\", \"fill:\");\n }\n }\n g.setEdge(edge.id1, edge.id2, edgeData, cnt);\n });\n};\nconst setConf = function(cnf) {\n conf = {\n ...conf,\n ...cnf\n };\n};\nconst draw = async function(text, id, _version, diagObj) {\n log.info(\"Drawing class - \", id);\n const conf2 = getConfig().flowchart ?? getConfig().class;\n const securityLevel = getConfig().securityLevel;\n log.info(\"config:\", conf2);\n const nodeSpacing = (conf2 == null ? void 0 : conf2.nodeSpacing) ?? 50;\n const rankSpacing = (conf2 == null ? void 0 : conf2.rankSpacing) ?? 50;\n const g = new graphlib.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: diagObj.db.getDirection(),\n nodesep: nodeSpacing,\n ranksep: rankSpacing,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function() {\n return {};\n });\n const namespaces = diagObj.db.getNamespaces();\n const classes = diagObj.db.getClasses();\n const relations = diagObj.db.getRelations();\n const notes = diagObj.db.getNotes();\n log.info(relations);\n addNamespaces(namespaces, g, id, diagObj);\n addClasses(classes, g, id, diagObj);\n addRelations(relations, g);\n addNotes(notes, g, relations.length + 1, classes);\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const svg = root.select(`[id=\"${id}\"]`);\n const element = root.select(\"#\" + id + \" g\");\n await render(\n element,\n g,\n [\"aggregation\", \"extension\", \"composition\", \"dependency\", \"lollipop\"],\n \"classDiagram\",\n id\n );\n utils.insertTitle(svg, \"classTitleText\", (conf2 == null ? void 0 : conf2.titleTopMargin) ?? 5, diagObj.db.getDiagramTitle());\n setupGraphViewbox(g, svg, conf2 == null ? void 0 : conf2.diagramPadding, conf2 == null ? void 0 : conf2.useMaxWidth);\n if (!(conf2 == null ? void 0 : conf2.htmlLabels)) {\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n const labels = doc.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n for (const label of labels) {\n const dim = label.getBBox();\n const rect = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n rect.setAttribute(\"rx\", 0);\n rect.setAttribute(\"ry\", 0);\n rect.setAttribute(\"width\", dim.width);\n rect.setAttribute(\"height\", dim.height);\n label.insertBefore(rect, label.firstChild);\n }\n }\n};\nfunction getArrowMarker(type) {\n let marker;\n switch (type) {\n case 0:\n marker = \"aggregation\";\n break;\n case 1:\n marker = \"extension\";\n break;\n case 2:\n marker = \"composition\";\n break;\n case 3:\n marker = \"dependency\";\n break;\n case 4:\n marker = \"lollipop\";\n break;\n default:\n marker = \"none\";\n }\n return marker;\n}\nconst renderer = {\n setConf,\n draw\n};\nconst diagram = {\n parser,\n db,\n renderer,\n styles,\n init: (cnf) => {\n if (!cnf.class) {\n cnf.class = {};\n }\n cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n db.clear();\n }\n};\nexport {\n diagram\n};\n"], + "mappings": "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", + "names": ["import_dayjs", "import_sanitize_url", "import_dompurify", "sanitizeText", "txt", "common$1", "getConfig", "conf", "addNamespaces", "namespaces", "g", "_id", "diagObj", "keys", "log$1", "id", "_a", "_b", "vertex", "node", "addClasses", "classes", "parent", "cssClassStr", "styles2", "getStylesFromArray", "vertexText", "radius", "addNotes", "notes", "startEdgeId", "note", "i", "cssNoteStr", "edgeId", "edgeData", "interpolateToCurve", "linear_default", "addRelations", "relations", "conf2", "cnt", "edge", "getArrowMarker", "setConf", "cnf", "draw", "text", "_version", "securityLevel", "nodeSpacing", "rankSpacing", "Graph", "sandboxElement", "select_default", "root", "svg", "element", "render", "utils", "setupGraphViewbox$1", "doc", "labels", "label", "dim", "rect", "type", "marker", "renderer", "diagram", "parser$1", "db", "styles"] +} diff --git a/public/docfx.min.css b/public/docfx.min.css new file mode 100644 index 000000000..9f9509db8 --- /dev/null +++ b/public/docfx.min.css @@ -0,0 +1,16 @@ +@charset "UTF-8";@font-face{font-display:block;font-family:bootstrap-icons;src:url("./bootstrap-icons-X6UQXWUS.woff2?24e3eb84d0bcaf83d77f904c78ac1f47") format("woff2"),url("./bootstrap-icons-OCU552PF.woff?24e3eb84d0bcaf83d77f904c78ac1f47") format("woff")}.bi:before,[class^=bi-]:before,[class*=" bi-"]:before{display:inline-block;font-family:bootstrap-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;line-height:1;vertical-align:-.125em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.bi-123:before{content:"\f67f"}.bi-alarm-fill:before{content:"\f101"}.bi-alarm:before{content:"\f102"}.bi-align-bottom:before{content:"\f103"}.bi-align-center:before{content:"\f104"}.bi-align-end:before{content:"\f105"}.bi-align-middle:before{content:"\f106"}.bi-align-start:before{content:"\f107"}.bi-align-top:before{content:"\f108"}.bi-alt:before{content:"\f109"}.bi-app-indicator:before{content:"\f10a"}.bi-app:before{content:"\f10b"}.bi-archive-fill:before{content:"\f10c"}.bi-archive:before{content:"\f10d"}.bi-arrow-90deg-down:before{content:"\f10e"}.bi-arrow-90deg-left:before{content:"\f10f"}.bi-arrow-90deg-right:before{content:"\f110"}.bi-arrow-90deg-up:before{content:"\f111"}.bi-arrow-bar-down:before{content:"\f112"}.bi-arrow-bar-left:before{content:"\f113"}.bi-arrow-bar-right:before{content:"\f114"}.bi-arrow-bar-up:before{content:"\f115"}.bi-arrow-clockwise:before{content:"\f116"}.bi-arrow-counterclockwise:before{content:"\f117"}.bi-arrow-down-circle-fill:before{content:"\f118"}.bi-arrow-down-circle:before{content:"\f119"}.bi-arrow-down-left-circle-fill:before{content:"\f11a"}.bi-arrow-down-left-circle:before{content:"\f11b"}.bi-arrow-down-left-square-fill:before{content:"\f11c"}.bi-arrow-down-left-square:before{content:"\f11d"}.bi-arrow-down-left:before{content:"\f11e"}.bi-arrow-down-right-circle-fill:before{content:"\f11f"}.bi-arrow-down-right-circle:before{content:"\f120"}.bi-arrow-down-right-square-fill:before{content:"\f121"}.bi-arrow-down-right-square:before{content:"\f122"}.bi-arrow-down-right:before{content:"\f123"}.bi-arrow-down-short:before{content:"\f124"}.bi-arrow-down-square-fill:before{content:"\f125"}.bi-arrow-down-square:before{content:"\f126"}.bi-arrow-down-up:before{content:"\f127"}.bi-arrow-down:before{content:"\f128"}.bi-arrow-left-circle-fill:before{content:"\f129"}.bi-arrow-left-circle:before{content:"\f12a"}.bi-arrow-left-right:before{content:"\f12b"}.bi-arrow-left-short:before{content:"\f12c"}.bi-arrow-left-square-fill:before{content:"\f12d"}.bi-arrow-left-square:before{content:"\f12e"}.bi-arrow-left:before{content:"\f12f"}.bi-arrow-repeat:before{content:"\f130"}.bi-arrow-return-left:before{content:"\f131"}.bi-arrow-return-right:before{content:"\f132"}.bi-arrow-right-circle-fill:before{content:"\f133"}.bi-arrow-right-circle:before{content:"\f134"}.bi-arrow-right-short:before{content:"\f135"}.bi-arrow-right-square-fill:before{content:"\f136"}.bi-arrow-right-square:before{content:"\f137"}.bi-arrow-right:before{content:"\f138"}.bi-arrow-up-circle-fill:before{content:"\f139"}.bi-arrow-up-circle:before{content:"\f13a"}.bi-arrow-up-left-circle-fill:before{content:"\f13b"}.bi-arrow-up-left-circle:before{content:"\f13c"}.bi-arrow-up-left-square-fill:before{content:"\f13d"}.bi-arrow-up-left-square:before{content:"\f13e"}.bi-arrow-up-left:before{content:"\f13f"}.bi-arrow-up-right-circle-fill:before{content:"\f140"}.bi-arrow-up-right-circle:before{content:"\f141"}.bi-arrow-up-right-square-fill:before{content:"\f142"}.bi-arrow-up-right-square:before{content:"\f143"}.bi-arrow-up-right:before{content:"\f144"}.bi-arrow-up-short:before{content:"\f145"}.bi-arrow-up-square-fill:before{content:"\f146"}.bi-arrow-up-square:before{content:"\f147"}.bi-arrow-up:before{content:"\f148"}.bi-arrows-angle-contract:before{content:"\f149"}.bi-arrows-angle-expand:before{content:"\f14a"}.bi-arrows-collapse:before{content:"\f14b"}.bi-arrows-expand:before{content:"\f14c"}.bi-arrows-fullscreen:before{content:"\f14d"}.bi-arrows-move:before{content:"\f14e"}.bi-aspect-ratio-fill:before{content:"\f14f"}.bi-aspect-ratio:before{content:"\f150"}.bi-asterisk:before{content:"\f151"}.bi-at:before{content:"\f152"}.bi-award-fill:before{content:"\f153"}.bi-award:before{content:"\f154"}.bi-back:before{content:"\f155"}.bi-backspace-fill:before{content:"\f156"}.bi-backspace-reverse-fill:before{content:"\f157"}.bi-backspace-reverse:before{content:"\f158"}.bi-backspace:before{content:"\f159"}.bi-badge-3d-fill:before{content:"\f15a"}.bi-badge-3d:before{content:"\f15b"}.bi-badge-4k-fill:before{content:"\f15c"}.bi-badge-4k:before{content:"\f15d"}.bi-badge-8k-fill:before{content:"\f15e"}.bi-badge-8k:before{content:"\f15f"}.bi-badge-ad-fill:before{content:"\f160"}.bi-badge-ad:before{content:"\f161"}.bi-badge-ar-fill:before{content:"\f162"}.bi-badge-ar:before{content:"\f163"}.bi-badge-cc-fill:before{content:"\f164"}.bi-badge-cc:before{content:"\f165"}.bi-badge-hd-fill:before{content:"\f166"}.bi-badge-hd:before{content:"\f167"}.bi-badge-tm-fill:before{content:"\f168"}.bi-badge-tm:before{content:"\f169"}.bi-badge-vo-fill:before{content:"\f16a"}.bi-badge-vo:before{content:"\f16b"}.bi-badge-vr-fill:before{content:"\f16c"}.bi-badge-vr:before{content:"\f16d"}.bi-badge-wc-fill:before{content:"\f16e"}.bi-badge-wc:before{content:"\f16f"}.bi-bag-check-fill:before{content:"\f170"}.bi-bag-check:before{content:"\f171"}.bi-bag-dash-fill:before{content:"\f172"}.bi-bag-dash:before{content:"\f173"}.bi-bag-fill:before{content:"\f174"}.bi-bag-plus-fill:before{content:"\f175"}.bi-bag-plus:before{content:"\f176"}.bi-bag-x-fill:before{content:"\f177"}.bi-bag-x:before{content:"\f178"}.bi-bag:before{content:"\f179"}.bi-bar-chart-fill:before{content:"\f17a"}.bi-bar-chart-line-fill:before{content:"\f17b"}.bi-bar-chart-line:before{content:"\f17c"}.bi-bar-chart-steps:before{content:"\f17d"}.bi-bar-chart:before{content:"\f17e"}.bi-basket-fill:before{content:"\f17f"}.bi-basket:before{content:"\f180"}.bi-basket2-fill:before{content:"\f181"}.bi-basket2:before{content:"\f182"}.bi-basket3-fill:before{content:"\f183"}.bi-basket3:before{content:"\f184"}.bi-battery-charging:before{content:"\f185"}.bi-battery-full:before{content:"\f186"}.bi-battery-half:before{content:"\f187"}.bi-battery:before{content:"\f188"}.bi-bell-fill:before{content:"\f189"}.bi-bell:before{content:"\f18a"}.bi-bezier:before{content:"\f18b"}.bi-bezier2:before{content:"\f18c"}.bi-bicycle:before{content:"\f18d"}.bi-binoculars-fill:before{content:"\f18e"}.bi-binoculars:before{content:"\f18f"}.bi-blockquote-left:before{content:"\f190"}.bi-blockquote-right:before{content:"\f191"}.bi-book-fill:before{content:"\f192"}.bi-book-half:before{content:"\f193"}.bi-book:before{content:"\f194"}.bi-bookmark-check-fill:before{content:"\f195"}.bi-bookmark-check:before{content:"\f196"}.bi-bookmark-dash-fill:before{content:"\f197"}.bi-bookmark-dash:before{content:"\f198"}.bi-bookmark-fill:before{content:"\f199"}.bi-bookmark-heart-fill:before{content:"\f19a"}.bi-bookmark-heart:before{content:"\f19b"}.bi-bookmark-plus-fill:before{content:"\f19c"}.bi-bookmark-plus:before{content:"\f19d"}.bi-bookmark-star-fill:before{content:"\f19e"}.bi-bookmark-star:before{content:"\f19f"}.bi-bookmark-x-fill:before{content:"\f1a0"}.bi-bookmark-x:before{content:"\f1a1"}.bi-bookmark:before{content:"\f1a2"}.bi-bookmarks-fill:before{content:"\f1a3"}.bi-bookmarks:before{content:"\f1a4"}.bi-bookshelf:before{content:"\f1a5"}.bi-bootstrap-fill:before{content:"\f1a6"}.bi-bootstrap-reboot:before{content:"\f1a7"}.bi-bootstrap:before{content:"\f1a8"}.bi-border-all:before{content:"\f1a9"}.bi-border-bottom:before{content:"\f1aa"}.bi-border-center:before{content:"\f1ab"}.bi-border-inner:before{content:"\f1ac"}.bi-border-left:before{content:"\f1ad"}.bi-border-middle:before{content:"\f1ae"}.bi-border-outer:before{content:"\f1af"}.bi-border-right:before{content:"\f1b0"}.bi-border-style:before{content:"\f1b1"}.bi-border-top:before{content:"\f1b2"}.bi-border-width:before{content:"\f1b3"}.bi-border:before{content:"\f1b4"}.bi-bounding-box-circles:before{content:"\f1b5"}.bi-bounding-box:before{content:"\f1b6"}.bi-box-arrow-down-left:before{content:"\f1b7"}.bi-box-arrow-down-right:before{content:"\f1b8"}.bi-box-arrow-down:before{content:"\f1b9"}.bi-box-arrow-in-down-left:before{content:"\f1ba"}.bi-box-arrow-in-down-right:before{content:"\f1bb"}.bi-box-arrow-in-down:before{content:"\f1bc"}.bi-box-arrow-in-left:before{content:"\f1bd"}.bi-box-arrow-in-right:before{content:"\f1be"}.bi-box-arrow-in-up-left:before{content:"\f1bf"}.bi-box-arrow-in-up-right:before{content:"\f1c0"}.bi-box-arrow-in-up:before{content:"\f1c1"}.bi-box-arrow-left:before{content:"\f1c2"}.bi-box-arrow-right:before{content:"\f1c3"}.bi-box-arrow-up-left:before{content:"\f1c4"}.bi-box-arrow-up-right:before{content:"\f1c5"}.bi-box-arrow-up:before{content:"\f1c6"}.bi-box-seam:before{content:"\f1c7"}.bi-box:before{content:"\f1c8"}.bi-braces:before{content:"\f1c9"}.bi-bricks:before{content:"\f1ca"}.bi-briefcase-fill:before{content:"\f1cb"}.bi-briefcase:before{content:"\f1cc"}.bi-brightness-alt-high-fill:before{content:"\f1cd"}.bi-brightness-alt-high:before{content:"\f1ce"}.bi-brightness-alt-low-fill:before{content:"\f1cf"}.bi-brightness-alt-low:before{content:"\f1d0"}.bi-brightness-high-fill:before{content:"\f1d1"}.bi-brightness-high:before{content:"\f1d2"}.bi-brightness-low-fill:before{content:"\f1d3"}.bi-brightness-low:before{content:"\f1d4"}.bi-broadcast-pin:before{content:"\f1d5"}.bi-broadcast:before{content:"\f1d6"}.bi-brush-fill:before{content:"\f1d7"}.bi-brush:before{content:"\f1d8"}.bi-bucket-fill:before{content:"\f1d9"}.bi-bucket:before{content:"\f1da"}.bi-bug-fill:before{content:"\f1db"}.bi-bug:before{content:"\f1dc"}.bi-building:before{content:"\f1dd"}.bi-bullseye:before{content:"\f1de"}.bi-calculator-fill:before{content:"\f1df"}.bi-calculator:before{content:"\f1e0"}.bi-calendar-check-fill:before{content:"\f1e1"}.bi-calendar-check:before{content:"\f1e2"}.bi-calendar-date-fill:before{content:"\f1e3"}.bi-calendar-date:before{content:"\f1e4"}.bi-calendar-day-fill:before{content:"\f1e5"}.bi-calendar-day:before{content:"\f1e6"}.bi-calendar-event-fill:before{content:"\f1e7"}.bi-calendar-event:before{content:"\f1e8"}.bi-calendar-fill:before{content:"\f1e9"}.bi-calendar-minus-fill:before{content:"\f1ea"}.bi-calendar-minus:before{content:"\f1eb"}.bi-calendar-month-fill:before{content:"\f1ec"}.bi-calendar-month:before{content:"\f1ed"}.bi-calendar-plus-fill:before{content:"\f1ee"}.bi-calendar-plus:before{content:"\f1ef"}.bi-calendar-range-fill:before{content:"\f1f0"}.bi-calendar-range:before{content:"\f1f1"}.bi-calendar-week-fill:before{content:"\f1f2"}.bi-calendar-week:before{content:"\f1f3"}.bi-calendar-x-fill:before{content:"\f1f4"}.bi-calendar-x:before{content:"\f1f5"}.bi-calendar:before{content:"\f1f6"}.bi-calendar2-check-fill:before{content:"\f1f7"}.bi-calendar2-check:before{content:"\f1f8"}.bi-calendar2-date-fill:before{content:"\f1f9"}.bi-calendar2-date:before{content:"\f1fa"}.bi-calendar2-day-fill:before{content:"\f1fb"}.bi-calendar2-day:before{content:"\f1fc"}.bi-calendar2-event-fill:before{content:"\f1fd"}.bi-calendar2-event:before{content:"\f1fe"}.bi-calendar2-fill:before{content:"\f1ff"}.bi-calendar2-minus-fill:before{content:"\f200"}.bi-calendar2-minus:before{content:"\f201"}.bi-calendar2-month-fill:before{content:"\f202"}.bi-calendar2-month:before{content:"\f203"}.bi-calendar2-plus-fill:before{content:"\f204"}.bi-calendar2-plus:before{content:"\f205"}.bi-calendar2-range-fill:before{content:"\f206"}.bi-calendar2-range:before{content:"\f207"}.bi-calendar2-week-fill:before{content:"\f208"}.bi-calendar2-week:before{content:"\f209"}.bi-calendar2-x-fill:before{content:"\f20a"}.bi-calendar2-x:before{content:"\f20b"}.bi-calendar2:before{content:"\f20c"}.bi-calendar3-event-fill:before{content:"\f20d"}.bi-calendar3-event:before{content:"\f20e"}.bi-calendar3-fill:before{content:"\f20f"}.bi-calendar3-range-fill:before{content:"\f210"}.bi-calendar3-range:before{content:"\f211"}.bi-calendar3-week-fill:before{content:"\f212"}.bi-calendar3-week:before{content:"\f213"}.bi-calendar3:before{content:"\f214"}.bi-calendar4-event:before{content:"\f215"}.bi-calendar4-range:before{content:"\f216"}.bi-calendar4-week:before{content:"\f217"}.bi-calendar4:before{content:"\f218"}.bi-camera-fill:before{content:"\f219"}.bi-camera-reels-fill:before{content:"\f21a"}.bi-camera-reels:before{content:"\f21b"}.bi-camera-video-fill:before{content:"\f21c"}.bi-camera-video-off-fill:before{content:"\f21d"}.bi-camera-video-off:before{content:"\f21e"}.bi-camera-video:before{content:"\f21f"}.bi-camera:before{content:"\f220"}.bi-camera2:before{content:"\f221"}.bi-capslock-fill:before{content:"\f222"}.bi-capslock:before{content:"\f223"}.bi-card-checklist:before{content:"\f224"}.bi-card-heading:before{content:"\f225"}.bi-card-image:before{content:"\f226"}.bi-card-list:before{content:"\f227"}.bi-card-text:before{content:"\f228"}.bi-caret-down-fill:before{content:"\f229"}.bi-caret-down-square-fill:before{content:"\f22a"}.bi-caret-down-square:before{content:"\f22b"}.bi-caret-down:before{content:"\f22c"}.bi-caret-left-fill:before{content:"\f22d"}.bi-caret-left-square-fill:before{content:"\f22e"}.bi-caret-left-square:before{content:"\f22f"}.bi-caret-left:before{content:"\f230"}.bi-caret-right-fill:before{content:"\f231"}.bi-caret-right-square-fill:before{content:"\f232"}.bi-caret-right-square:before{content:"\f233"}.bi-caret-right:before{content:"\f234"}.bi-caret-up-fill:before{content:"\f235"}.bi-caret-up-square-fill:before{content:"\f236"}.bi-caret-up-square:before{content:"\f237"}.bi-caret-up:before{content:"\f238"}.bi-cart-check-fill:before{content:"\f239"}.bi-cart-check:before{content:"\f23a"}.bi-cart-dash-fill:before{content:"\f23b"}.bi-cart-dash:before{content:"\f23c"}.bi-cart-fill:before{content:"\f23d"}.bi-cart-plus-fill:before{content:"\f23e"}.bi-cart-plus:before{content:"\f23f"}.bi-cart-x-fill:before{content:"\f240"}.bi-cart-x:before{content:"\f241"}.bi-cart:before{content:"\f242"}.bi-cart2:before{content:"\f243"}.bi-cart3:before{content:"\f244"}.bi-cart4:before{content:"\f245"}.bi-cash-stack:before{content:"\f246"}.bi-cash:before{content:"\f247"}.bi-cast:before{content:"\f248"}.bi-chat-dots-fill:before{content:"\f249"}.bi-chat-dots:before{content:"\f24a"}.bi-chat-fill:before{content:"\f24b"}.bi-chat-left-dots-fill:before{content:"\f24c"}.bi-chat-left-dots:before{content:"\f24d"}.bi-chat-left-fill:before{content:"\f24e"}.bi-chat-left-quote-fill:before{content:"\f24f"}.bi-chat-left-quote:before{content:"\f250"}.bi-chat-left-text-fill:before{content:"\f251"}.bi-chat-left-text:before{content:"\f252"}.bi-chat-left:before{content:"\f253"}.bi-chat-quote-fill:before{content:"\f254"}.bi-chat-quote:before{content:"\f255"}.bi-chat-right-dots-fill:before{content:"\f256"}.bi-chat-right-dots:before{content:"\f257"}.bi-chat-right-fill:before{content:"\f258"}.bi-chat-right-quote-fill:before{content:"\f259"}.bi-chat-right-quote:before{content:"\f25a"}.bi-chat-right-text-fill:before{content:"\f25b"}.bi-chat-right-text:before{content:"\f25c"}.bi-chat-right:before{content:"\f25d"}.bi-chat-square-dots-fill:before{content:"\f25e"}.bi-chat-square-dots:before{content:"\f25f"}.bi-chat-square-fill:before{content:"\f260"}.bi-chat-square-quote-fill:before{content:"\f261"}.bi-chat-square-quote:before{content:"\f262"}.bi-chat-square-text-fill:before{content:"\f263"}.bi-chat-square-text:before{content:"\f264"}.bi-chat-square:before{content:"\f265"}.bi-chat-text-fill:before{content:"\f266"}.bi-chat-text:before{content:"\f267"}.bi-chat:before{content:"\f268"}.bi-check-all:before{content:"\f269"}.bi-check-circle-fill:before{content:"\f26a"}.bi-check-circle:before{content:"\f26b"}.bi-check-square-fill:before{content:"\f26c"}.bi-check-square:before{content:"\f26d"}.bi-check:before{content:"\f26e"}.bi-check2-all:before{content:"\f26f"}.bi-check2-circle:before{content:"\f270"}.bi-check2-square:before{content:"\f271"}.bi-check2:before{content:"\f272"}.bi-chevron-bar-contract:before{content:"\f273"}.bi-chevron-bar-down:before{content:"\f274"}.bi-chevron-bar-expand:before{content:"\f275"}.bi-chevron-bar-left:before{content:"\f276"}.bi-chevron-bar-right:before{content:"\f277"}.bi-chevron-bar-up:before{content:"\f278"}.bi-chevron-compact-down:before{content:"\f279"}.bi-chevron-compact-left:before{content:"\f27a"}.bi-chevron-compact-right:before{content:"\f27b"}.bi-chevron-compact-up:before{content:"\f27c"}.bi-chevron-contract:before{content:"\f27d"}.bi-chevron-double-down:before{content:"\f27e"}.bi-chevron-double-left:before{content:"\f27f"}.bi-chevron-double-right:before{content:"\f280"}.bi-chevron-double-up:before{content:"\f281"}.bi-chevron-down:before{content:"\f282"}.bi-chevron-expand:before{content:"\f283"}.bi-chevron-left:before{content:"\f284"}.bi-chevron-right:before{content:"\f285"}.bi-chevron-up:before{content:"\f286"}.bi-circle-fill:before{content:"\f287"}.bi-circle-half:before{content:"\f288"}.bi-circle-square:before{content:"\f289"}.bi-circle:before{content:"\f28a"}.bi-clipboard-check:before{content:"\f28b"}.bi-clipboard-data:before{content:"\f28c"}.bi-clipboard-minus:before{content:"\f28d"}.bi-clipboard-plus:before{content:"\f28e"}.bi-clipboard-x:before{content:"\f28f"}.bi-clipboard:before{content:"\f290"}.bi-clock-fill:before{content:"\f291"}.bi-clock-history:before{content:"\f292"}.bi-clock:before{content:"\f293"}.bi-cloud-arrow-down-fill:before{content:"\f294"}.bi-cloud-arrow-down:before{content:"\f295"}.bi-cloud-arrow-up-fill:before{content:"\f296"}.bi-cloud-arrow-up:before{content:"\f297"}.bi-cloud-check-fill:before{content:"\f298"}.bi-cloud-check:before{content:"\f299"}.bi-cloud-download-fill:before{content:"\f29a"}.bi-cloud-download:before{content:"\f29b"}.bi-cloud-drizzle-fill:before{content:"\f29c"}.bi-cloud-drizzle:before{content:"\f29d"}.bi-cloud-fill:before{content:"\f29e"}.bi-cloud-fog-fill:before{content:"\f29f"}.bi-cloud-fog:before{content:"\f2a0"}.bi-cloud-fog2-fill:before{content:"\f2a1"}.bi-cloud-fog2:before{content:"\f2a2"}.bi-cloud-hail-fill:before{content:"\f2a3"}.bi-cloud-hail:before{content:"\f2a4"}.bi-cloud-haze-fill:before{content:"\f2a6"}.bi-cloud-haze:before{content:"\f2a7"}.bi-cloud-haze2-fill:before{content:"\f2a8"}.bi-cloud-lightning-fill:before{content:"\f2a9"}.bi-cloud-lightning-rain-fill:before{content:"\f2aa"}.bi-cloud-lightning-rain:before{content:"\f2ab"}.bi-cloud-lightning:before{content:"\f2ac"}.bi-cloud-minus-fill:before{content:"\f2ad"}.bi-cloud-minus:before{content:"\f2ae"}.bi-cloud-moon-fill:before{content:"\f2af"}.bi-cloud-moon:before{content:"\f2b0"}.bi-cloud-plus-fill:before{content:"\f2b1"}.bi-cloud-plus:before{content:"\f2b2"}.bi-cloud-rain-fill:before{content:"\f2b3"}.bi-cloud-rain-heavy-fill:before{content:"\f2b4"}.bi-cloud-rain-heavy:before{content:"\f2b5"}.bi-cloud-rain:before{content:"\f2b6"}.bi-cloud-slash-fill:before{content:"\f2b7"}.bi-cloud-slash:before{content:"\f2b8"}.bi-cloud-sleet-fill:before{content:"\f2b9"}.bi-cloud-sleet:before{content:"\f2ba"}.bi-cloud-snow-fill:before{content:"\f2bb"}.bi-cloud-snow:before{content:"\f2bc"}.bi-cloud-sun-fill:before{content:"\f2bd"}.bi-cloud-sun:before{content:"\f2be"}.bi-cloud-upload-fill:before{content:"\f2bf"}.bi-cloud-upload:before{content:"\f2c0"}.bi-cloud:before{content:"\f2c1"}.bi-clouds-fill:before{content:"\f2c2"}.bi-clouds:before{content:"\f2c3"}.bi-cloudy-fill:before{content:"\f2c4"}.bi-cloudy:before{content:"\f2c5"}.bi-code-slash:before{content:"\f2c6"}.bi-code-square:before{content:"\f2c7"}.bi-code:before{content:"\f2c8"}.bi-collection-fill:before{content:"\f2c9"}.bi-collection-play-fill:before{content:"\f2ca"}.bi-collection-play:before{content:"\f2cb"}.bi-collection:before{content:"\f2cc"}.bi-columns-gap:before{content:"\f2cd"}.bi-columns:before{content:"\f2ce"}.bi-command:before{content:"\f2cf"}.bi-compass-fill:before{content:"\f2d0"}.bi-compass:before{content:"\f2d1"}.bi-cone-striped:before{content:"\f2d2"}.bi-cone:before{content:"\f2d3"}.bi-controller:before{content:"\f2d4"}.bi-cpu-fill:before{content:"\f2d5"}.bi-cpu:before{content:"\f2d6"}.bi-credit-card-2-back-fill:before{content:"\f2d7"}.bi-credit-card-2-back:before{content:"\f2d8"}.bi-credit-card-2-front-fill:before{content:"\f2d9"}.bi-credit-card-2-front:before{content:"\f2da"}.bi-credit-card-fill:before{content:"\f2db"}.bi-credit-card:before{content:"\f2dc"}.bi-crop:before{content:"\f2dd"}.bi-cup-fill:before{content:"\f2de"}.bi-cup-straw:before{content:"\f2df"}.bi-cup:before{content:"\f2e0"}.bi-cursor-fill:before{content:"\f2e1"}.bi-cursor-text:before{content:"\f2e2"}.bi-cursor:before{content:"\f2e3"}.bi-dash-circle-dotted:before{content:"\f2e4"}.bi-dash-circle-fill:before{content:"\f2e5"}.bi-dash-circle:before{content:"\f2e6"}.bi-dash-square-dotted:before{content:"\f2e7"}.bi-dash-square-fill:before{content:"\f2e8"}.bi-dash-square:before{content:"\f2e9"}.bi-dash:before{content:"\f2ea"}.bi-diagram-2-fill:before{content:"\f2eb"}.bi-diagram-2:before{content:"\f2ec"}.bi-diagram-3-fill:before{content:"\f2ed"}.bi-diagram-3:before{content:"\f2ee"}.bi-diamond-fill:before{content:"\f2ef"}.bi-diamond-half:before{content:"\f2f0"}.bi-diamond:before{content:"\f2f1"}.bi-dice-1-fill:before{content:"\f2f2"}.bi-dice-1:before{content:"\f2f3"}.bi-dice-2-fill:before{content:"\f2f4"}.bi-dice-2:before{content:"\f2f5"}.bi-dice-3-fill:before{content:"\f2f6"}.bi-dice-3:before{content:"\f2f7"}.bi-dice-4-fill:before{content:"\f2f8"}.bi-dice-4:before{content:"\f2f9"}.bi-dice-5-fill:before{content:"\f2fa"}.bi-dice-5:before{content:"\f2fb"}.bi-dice-6-fill:before{content:"\f2fc"}.bi-dice-6:before{content:"\f2fd"}.bi-disc-fill:before{content:"\f2fe"}.bi-disc:before{content:"\f2ff"}.bi-discord:before{content:"\f300"}.bi-display-fill:before{content:"\f301"}.bi-display:before{content:"\f302"}.bi-distribute-horizontal:before{content:"\f303"}.bi-distribute-vertical:before{content:"\f304"}.bi-door-closed-fill:before{content:"\f305"}.bi-door-closed:before{content:"\f306"}.bi-door-open-fill:before{content:"\f307"}.bi-door-open:before{content:"\f308"}.bi-dot:before{content:"\f309"}.bi-download:before{content:"\f30a"}.bi-droplet-fill:before{content:"\f30b"}.bi-droplet-half:before{content:"\f30c"}.bi-droplet:before{content:"\f30d"}.bi-earbuds:before{content:"\f30e"}.bi-easel-fill:before{content:"\f30f"}.bi-easel:before{content:"\f310"}.bi-egg-fill:before{content:"\f311"}.bi-egg-fried:before{content:"\f312"}.bi-egg:before{content:"\f313"}.bi-eject-fill:before{content:"\f314"}.bi-eject:before{content:"\f315"}.bi-emoji-angry-fill:before{content:"\f316"}.bi-emoji-angry:before{content:"\f317"}.bi-emoji-dizzy-fill:before{content:"\f318"}.bi-emoji-dizzy:before{content:"\f319"}.bi-emoji-expressionless-fill:before{content:"\f31a"}.bi-emoji-expressionless:before{content:"\f31b"}.bi-emoji-frown-fill:before{content:"\f31c"}.bi-emoji-frown:before{content:"\f31d"}.bi-emoji-heart-eyes-fill:before{content:"\f31e"}.bi-emoji-heart-eyes:before{content:"\f31f"}.bi-emoji-laughing-fill:before{content:"\f320"}.bi-emoji-laughing:before{content:"\f321"}.bi-emoji-neutral-fill:before{content:"\f322"}.bi-emoji-neutral:before{content:"\f323"}.bi-emoji-smile-fill:before{content:"\f324"}.bi-emoji-smile-upside-down-fill:before{content:"\f325"}.bi-emoji-smile-upside-down:before{content:"\f326"}.bi-emoji-smile:before{content:"\f327"}.bi-emoji-sunglasses-fill:before{content:"\f328"}.bi-emoji-sunglasses:before{content:"\f329"}.bi-emoji-wink-fill:before{content:"\f32a"}.bi-emoji-wink:before{content:"\f32b"}.bi-envelope-fill:before{content:"\f32c"}.bi-envelope-open-fill:before{content:"\f32d"}.bi-envelope-open:before{content:"\f32e"}.bi-envelope:before{content:"\f32f"}.bi-eraser-fill:before{content:"\f330"}.bi-eraser:before{content:"\f331"}.bi-exclamation-circle-fill:before{content:"\f332"}.bi-exclamation-circle:before{content:"\f333"}.bi-exclamation-diamond-fill:before{content:"\f334"}.bi-exclamation-diamond:before{content:"\f335"}.bi-exclamation-octagon-fill:before{content:"\f336"}.bi-exclamation-octagon:before{content:"\f337"}.bi-exclamation-square-fill:before{content:"\f338"}.bi-exclamation-square:before{content:"\f339"}.bi-exclamation-triangle-fill:before{content:"\f33a"}.bi-exclamation-triangle:before{content:"\f33b"}.bi-exclamation:before{content:"\f33c"}.bi-exclude:before{content:"\f33d"}.bi-eye-fill:before{content:"\f33e"}.bi-eye-slash-fill:before{content:"\f33f"}.bi-eye-slash:before{content:"\f340"}.bi-eye:before{content:"\f341"}.bi-eyedropper:before{content:"\f342"}.bi-eyeglasses:before{content:"\f343"}.bi-facebook:before{content:"\f344"}.bi-file-arrow-down-fill:before{content:"\f345"}.bi-file-arrow-down:before{content:"\f346"}.bi-file-arrow-up-fill:before{content:"\f347"}.bi-file-arrow-up:before{content:"\f348"}.bi-file-bar-graph-fill:before{content:"\f349"}.bi-file-bar-graph:before{content:"\f34a"}.bi-file-binary-fill:before{content:"\f34b"}.bi-file-binary:before{content:"\f34c"}.bi-file-break-fill:before{content:"\f34d"}.bi-file-break:before{content:"\f34e"}.bi-file-check-fill:before{content:"\f34f"}.bi-file-check:before{content:"\f350"}.bi-file-code-fill:before{content:"\f351"}.bi-file-code:before{content:"\f352"}.bi-file-diff-fill:before{content:"\f353"}.bi-file-diff:before{content:"\f354"}.bi-file-earmark-arrow-down-fill:before{content:"\f355"}.bi-file-earmark-arrow-down:before{content:"\f356"}.bi-file-earmark-arrow-up-fill:before{content:"\f357"}.bi-file-earmark-arrow-up:before{content:"\f358"}.bi-file-earmark-bar-graph-fill:before{content:"\f359"}.bi-file-earmark-bar-graph:before{content:"\f35a"}.bi-file-earmark-binary-fill:before{content:"\f35b"}.bi-file-earmark-binary:before{content:"\f35c"}.bi-file-earmark-break-fill:before{content:"\f35d"}.bi-file-earmark-break:before{content:"\f35e"}.bi-file-earmark-check-fill:before{content:"\f35f"}.bi-file-earmark-check:before{content:"\f360"}.bi-file-earmark-code-fill:before{content:"\f361"}.bi-file-earmark-code:before{content:"\f362"}.bi-file-earmark-diff-fill:before{content:"\f363"}.bi-file-earmark-diff:before{content:"\f364"}.bi-file-earmark-easel-fill:before{content:"\f365"}.bi-file-earmark-easel:before{content:"\f366"}.bi-file-earmark-excel-fill:before{content:"\f367"}.bi-file-earmark-excel:before{content:"\f368"}.bi-file-earmark-fill:before{content:"\f369"}.bi-file-earmark-font-fill:before{content:"\f36a"}.bi-file-earmark-font:before{content:"\f36b"}.bi-file-earmark-image-fill:before{content:"\f36c"}.bi-file-earmark-image:before{content:"\f36d"}.bi-file-earmark-lock-fill:before{content:"\f36e"}.bi-file-earmark-lock:before{content:"\f36f"}.bi-file-earmark-lock2-fill:before{content:"\f370"}.bi-file-earmark-lock2:before{content:"\f371"}.bi-file-earmark-medical-fill:before{content:"\f372"}.bi-file-earmark-medical:before{content:"\f373"}.bi-file-earmark-minus-fill:before{content:"\f374"}.bi-file-earmark-minus:before{content:"\f375"}.bi-file-earmark-music-fill:before{content:"\f376"}.bi-file-earmark-music:before{content:"\f377"}.bi-file-earmark-person-fill:before{content:"\f378"}.bi-file-earmark-person:before{content:"\f379"}.bi-file-earmark-play-fill:before{content:"\f37a"}.bi-file-earmark-play:before{content:"\f37b"}.bi-file-earmark-plus-fill:before{content:"\f37c"}.bi-file-earmark-plus:before{content:"\f37d"}.bi-file-earmark-post-fill:before{content:"\f37e"}.bi-file-earmark-post:before{content:"\f37f"}.bi-file-earmark-ppt-fill:before{content:"\f380"}.bi-file-earmark-ppt:before{content:"\f381"}.bi-file-earmark-richtext-fill:before{content:"\f382"}.bi-file-earmark-richtext:before{content:"\f383"}.bi-file-earmark-ruled-fill:before{content:"\f384"}.bi-file-earmark-ruled:before{content:"\f385"}.bi-file-earmark-slides-fill:before{content:"\f386"}.bi-file-earmark-slides:before{content:"\f387"}.bi-file-earmark-spreadsheet-fill:before{content:"\f388"}.bi-file-earmark-spreadsheet:before{content:"\f389"}.bi-file-earmark-text-fill:before{content:"\f38a"}.bi-file-earmark-text:before{content:"\f38b"}.bi-file-earmark-word-fill:before{content:"\f38c"}.bi-file-earmark-word:before{content:"\f38d"}.bi-file-earmark-x-fill:before{content:"\f38e"}.bi-file-earmark-x:before{content:"\f38f"}.bi-file-earmark-zip-fill:before{content:"\f390"}.bi-file-earmark-zip:before{content:"\f391"}.bi-file-earmark:before{content:"\f392"}.bi-file-easel-fill:before{content:"\f393"}.bi-file-easel:before{content:"\f394"}.bi-file-excel-fill:before{content:"\f395"}.bi-file-excel:before{content:"\f396"}.bi-file-fill:before{content:"\f397"}.bi-file-font-fill:before{content:"\f398"}.bi-file-font:before{content:"\f399"}.bi-file-image-fill:before{content:"\f39a"}.bi-file-image:before{content:"\f39b"}.bi-file-lock-fill:before{content:"\f39c"}.bi-file-lock:before{content:"\f39d"}.bi-file-lock2-fill:before{content:"\f39e"}.bi-file-lock2:before{content:"\f39f"}.bi-file-medical-fill:before{content:"\f3a0"}.bi-file-medical:before{content:"\f3a1"}.bi-file-minus-fill:before{content:"\f3a2"}.bi-file-minus:before{content:"\f3a3"}.bi-file-music-fill:before{content:"\f3a4"}.bi-file-music:before{content:"\f3a5"}.bi-file-person-fill:before{content:"\f3a6"}.bi-file-person:before{content:"\f3a7"}.bi-file-play-fill:before{content:"\f3a8"}.bi-file-play:before{content:"\f3a9"}.bi-file-plus-fill:before{content:"\f3aa"}.bi-file-plus:before{content:"\f3ab"}.bi-file-post-fill:before{content:"\f3ac"}.bi-file-post:before{content:"\f3ad"}.bi-file-ppt-fill:before{content:"\f3ae"}.bi-file-ppt:before{content:"\f3af"}.bi-file-richtext-fill:before{content:"\f3b0"}.bi-file-richtext:before{content:"\f3b1"}.bi-file-ruled-fill:before{content:"\f3b2"}.bi-file-ruled:before{content:"\f3b3"}.bi-file-slides-fill:before{content:"\f3b4"}.bi-file-slides:before{content:"\f3b5"}.bi-file-spreadsheet-fill:before{content:"\f3b6"}.bi-file-spreadsheet:before{content:"\f3b7"}.bi-file-text-fill:before{content:"\f3b8"}.bi-file-text:before{content:"\f3b9"}.bi-file-word-fill:before{content:"\f3ba"}.bi-file-word:before{content:"\f3bb"}.bi-file-x-fill:before{content:"\f3bc"}.bi-file-x:before{content:"\f3bd"}.bi-file-zip-fill:before{content:"\f3be"}.bi-file-zip:before{content:"\f3bf"}.bi-file:before{content:"\f3c0"}.bi-files-alt:before{content:"\f3c1"}.bi-files:before{content:"\f3c2"}.bi-film:before{content:"\f3c3"}.bi-filter-circle-fill:before{content:"\f3c4"}.bi-filter-circle:before{content:"\f3c5"}.bi-filter-left:before{content:"\f3c6"}.bi-filter-right:before{content:"\f3c7"}.bi-filter-square-fill:before{content:"\f3c8"}.bi-filter-square:before{content:"\f3c9"}.bi-filter:before{content:"\f3ca"}.bi-flag-fill:before{content:"\f3cb"}.bi-flag:before{content:"\f3cc"}.bi-flower1:before{content:"\f3cd"}.bi-flower2:before{content:"\f3ce"}.bi-flower3:before{content:"\f3cf"}.bi-folder-check:before{content:"\f3d0"}.bi-folder-fill:before{content:"\f3d1"}.bi-folder-minus:before{content:"\f3d2"}.bi-folder-plus:before{content:"\f3d3"}.bi-folder-symlink-fill:before{content:"\f3d4"}.bi-folder-symlink:before{content:"\f3d5"}.bi-folder-x:before{content:"\f3d6"}.bi-folder:before{content:"\f3d7"}.bi-folder2-open:before{content:"\f3d8"}.bi-folder2:before{content:"\f3d9"}.bi-fonts:before{content:"\f3da"}.bi-forward-fill:before{content:"\f3db"}.bi-forward:before{content:"\f3dc"}.bi-front:before{content:"\f3dd"}.bi-fullscreen-exit:before{content:"\f3de"}.bi-fullscreen:before{content:"\f3df"}.bi-funnel-fill:before{content:"\f3e0"}.bi-funnel:before{content:"\f3e1"}.bi-gear-fill:before{content:"\f3e2"}.bi-gear-wide-connected:before{content:"\f3e3"}.bi-gear-wide:before{content:"\f3e4"}.bi-gear:before{content:"\f3e5"}.bi-gem:before{content:"\f3e6"}.bi-geo-alt-fill:before{content:"\f3e7"}.bi-geo-alt:before{content:"\f3e8"}.bi-geo-fill:before{content:"\f3e9"}.bi-geo:before{content:"\f3ea"}.bi-gift-fill:before{content:"\f3eb"}.bi-gift:before{content:"\f3ec"}.bi-github:before{content:"\f3ed"}.bi-globe:before{content:"\f3ee"}.bi-globe2:before{content:"\f3ef"}.bi-google:before{content:"\f3f0"}.bi-graph-down:before{content:"\f3f1"}.bi-graph-up:before{content:"\f3f2"}.bi-grid-1x2-fill:before{content:"\f3f3"}.bi-grid-1x2:before{content:"\f3f4"}.bi-grid-3x2-gap-fill:before{content:"\f3f5"}.bi-grid-3x2-gap:before{content:"\f3f6"}.bi-grid-3x2:before{content:"\f3f7"}.bi-grid-3x3-gap-fill:before{content:"\f3f8"}.bi-grid-3x3-gap:before{content:"\f3f9"}.bi-grid-3x3:before{content:"\f3fa"}.bi-grid-fill:before{content:"\f3fb"}.bi-grid:before{content:"\f3fc"}.bi-grip-horizontal:before{content:"\f3fd"}.bi-grip-vertical:before{content:"\f3fe"}.bi-hammer:before{content:"\f3ff"}.bi-hand-index-fill:before{content:"\f400"}.bi-hand-index-thumb-fill:before{content:"\f401"}.bi-hand-index-thumb:before{content:"\f402"}.bi-hand-index:before{content:"\f403"}.bi-hand-thumbs-down-fill:before{content:"\f404"}.bi-hand-thumbs-down:before{content:"\f405"}.bi-hand-thumbs-up-fill:before{content:"\f406"}.bi-hand-thumbs-up:before{content:"\f407"}.bi-handbag-fill:before{content:"\f408"}.bi-handbag:before{content:"\f409"}.bi-hash:before{content:"\f40a"}.bi-hdd-fill:before{content:"\f40b"}.bi-hdd-network-fill:before{content:"\f40c"}.bi-hdd-network:before{content:"\f40d"}.bi-hdd-rack-fill:before{content:"\f40e"}.bi-hdd-rack:before{content:"\f40f"}.bi-hdd-stack-fill:before{content:"\f410"}.bi-hdd-stack:before{content:"\f411"}.bi-hdd:before{content:"\f412"}.bi-headphones:before{content:"\f413"}.bi-headset:before{content:"\f414"}.bi-heart-fill:before{content:"\f415"}.bi-heart-half:before{content:"\f416"}.bi-heart:before{content:"\f417"}.bi-heptagon-fill:before{content:"\f418"}.bi-heptagon-half:before{content:"\f419"}.bi-heptagon:before{content:"\f41a"}.bi-hexagon-fill:before{content:"\f41b"}.bi-hexagon-half:before{content:"\f41c"}.bi-hexagon:before{content:"\f41d"}.bi-hourglass-bottom:before{content:"\f41e"}.bi-hourglass-split:before{content:"\f41f"}.bi-hourglass-top:before{content:"\f420"}.bi-hourglass:before{content:"\f421"}.bi-house-door-fill:before{content:"\f422"}.bi-house-door:before{content:"\f423"}.bi-house-fill:before{content:"\f424"}.bi-house:before{content:"\f425"}.bi-hr:before{content:"\f426"}.bi-hurricane:before{content:"\f427"}.bi-image-alt:before{content:"\f428"}.bi-image-fill:before{content:"\f429"}.bi-image:before{content:"\f42a"}.bi-images:before{content:"\f42b"}.bi-inbox-fill:before{content:"\f42c"}.bi-inbox:before{content:"\f42d"}.bi-inboxes-fill:before{content:"\f42e"}.bi-inboxes:before{content:"\f42f"}.bi-info-circle-fill:before{content:"\f430"}.bi-info-circle:before{content:"\f431"}.bi-info-square-fill:before{content:"\f432"}.bi-info-square:before{content:"\f433"}.bi-info:before{content:"\f434"}.bi-input-cursor-text:before{content:"\f435"}.bi-input-cursor:before{content:"\f436"}.bi-instagram:before{content:"\f437"}.bi-intersect:before{content:"\f438"}.bi-journal-album:before{content:"\f439"}.bi-journal-arrow-down:before{content:"\f43a"}.bi-journal-arrow-up:before{content:"\f43b"}.bi-journal-bookmark-fill:before{content:"\f43c"}.bi-journal-bookmark:before{content:"\f43d"}.bi-journal-check:before{content:"\f43e"}.bi-journal-code:before{content:"\f43f"}.bi-journal-medical:before{content:"\f440"}.bi-journal-minus:before{content:"\f441"}.bi-journal-plus:before{content:"\f442"}.bi-journal-richtext:before{content:"\f443"}.bi-journal-text:before{content:"\f444"}.bi-journal-x:before{content:"\f445"}.bi-journal:before{content:"\f446"}.bi-journals:before{content:"\f447"}.bi-joystick:before{content:"\f448"}.bi-justify-left:before{content:"\f449"}.bi-justify-right:before{content:"\f44a"}.bi-justify:before{content:"\f44b"}.bi-kanban-fill:before{content:"\f44c"}.bi-kanban:before{content:"\f44d"}.bi-key-fill:before{content:"\f44e"}.bi-key:before{content:"\f44f"}.bi-keyboard-fill:before{content:"\f450"}.bi-keyboard:before{content:"\f451"}.bi-ladder:before{content:"\f452"}.bi-lamp-fill:before{content:"\f453"}.bi-lamp:before{content:"\f454"}.bi-laptop-fill:before{content:"\f455"}.bi-laptop:before{content:"\f456"}.bi-layer-backward:before{content:"\f457"}.bi-layer-forward:before{content:"\f458"}.bi-layers-fill:before{content:"\f459"}.bi-layers-half:before{content:"\f45a"}.bi-layers:before{content:"\f45b"}.bi-layout-sidebar-inset-reverse:before{content:"\f45c"}.bi-layout-sidebar-inset:before{content:"\f45d"}.bi-layout-sidebar-reverse:before{content:"\f45e"}.bi-layout-sidebar:before{content:"\f45f"}.bi-layout-split:before{content:"\f460"}.bi-layout-text-sidebar-reverse:before{content:"\f461"}.bi-layout-text-sidebar:before{content:"\f462"}.bi-layout-text-window-reverse:before{content:"\f463"}.bi-layout-text-window:before{content:"\f464"}.bi-layout-three-columns:before{content:"\f465"}.bi-layout-wtf:before{content:"\f466"}.bi-life-preserver:before{content:"\f467"}.bi-lightbulb-fill:before{content:"\f468"}.bi-lightbulb-off-fill:before{content:"\f469"}.bi-lightbulb-off:before{content:"\f46a"}.bi-lightbulb:before{content:"\f46b"}.bi-lightning-charge-fill:before{content:"\f46c"}.bi-lightning-charge:before{content:"\f46d"}.bi-lightning-fill:before{content:"\f46e"}.bi-lightning:before{content:"\f46f"}.bi-link-45deg:before{content:"\f470"}.bi-link:before{content:"\f471"}.bi-linkedin:before{content:"\f472"}.bi-list-check:before{content:"\f473"}.bi-list-nested:before{content:"\f474"}.bi-list-ol:before{content:"\f475"}.bi-list-stars:before{content:"\f476"}.bi-list-task:before{content:"\f477"}.bi-list-ul:before{content:"\f478"}.bi-list:before{content:"\f479"}.bi-lock-fill:before{content:"\f47a"}.bi-lock:before{content:"\f47b"}.bi-mailbox:before{content:"\f47c"}.bi-mailbox2:before{content:"\f47d"}.bi-map-fill:before{content:"\f47e"}.bi-map:before{content:"\f47f"}.bi-markdown-fill:before{content:"\f480"}.bi-markdown:before{content:"\f481"}.bi-mask:before{content:"\f482"}.bi-megaphone-fill:before{content:"\f483"}.bi-megaphone:before{content:"\f484"}.bi-menu-app-fill:before{content:"\f485"}.bi-menu-app:before{content:"\f486"}.bi-menu-button-fill:before{content:"\f487"}.bi-menu-button-wide-fill:before{content:"\f488"}.bi-menu-button-wide:before{content:"\f489"}.bi-menu-button:before{content:"\f48a"}.bi-menu-down:before{content:"\f48b"}.bi-menu-up:before{content:"\f48c"}.bi-mic-fill:before{content:"\f48d"}.bi-mic-mute-fill:before{content:"\f48e"}.bi-mic-mute:before{content:"\f48f"}.bi-mic:before{content:"\f490"}.bi-minecart-loaded:before{content:"\f491"}.bi-minecart:before{content:"\f492"}.bi-moisture:before{content:"\f493"}.bi-moon-fill:before{content:"\f494"}.bi-moon-stars-fill:before{content:"\f495"}.bi-moon-stars:before{content:"\f496"}.bi-moon:before{content:"\f497"}.bi-mouse-fill:before{content:"\f498"}.bi-mouse:before{content:"\f499"}.bi-mouse2-fill:before{content:"\f49a"}.bi-mouse2:before{content:"\f49b"}.bi-mouse3-fill:before{content:"\f49c"}.bi-mouse3:before{content:"\f49d"}.bi-music-note-beamed:before{content:"\f49e"}.bi-music-note-list:before{content:"\f49f"}.bi-music-note:before{content:"\f4a0"}.bi-music-player-fill:before{content:"\f4a1"}.bi-music-player:before{content:"\f4a2"}.bi-newspaper:before{content:"\f4a3"}.bi-node-minus-fill:before{content:"\f4a4"}.bi-node-minus:before{content:"\f4a5"}.bi-node-plus-fill:before{content:"\f4a6"}.bi-node-plus:before{content:"\f4a7"}.bi-nut-fill:before{content:"\f4a8"}.bi-nut:before{content:"\f4a9"}.bi-octagon-fill:before{content:"\f4aa"}.bi-octagon-half:before{content:"\f4ab"}.bi-octagon:before{content:"\f4ac"}.bi-option:before{content:"\f4ad"}.bi-outlet:before{content:"\f4ae"}.bi-paint-bucket:before{content:"\f4af"}.bi-palette-fill:before{content:"\f4b0"}.bi-palette:before{content:"\f4b1"}.bi-palette2:before{content:"\f4b2"}.bi-paperclip:before{content:"\f4b3"}.bi-paragraph:before{content:"\f4b4"}.bi-patch-check-fill:before{content:"\f4b5"}.bi-patch-check:before{content:"\f4b6"}.bi-patch-exclamation-fill:before{content:"\f4b7"}.bi-patch-exclamation:before{content:"\f4b8"}.bi-patch-minus-fill:before{content:"\f4b9"}.bi-patch-minus:before{content:"\f4ba"}.bi-patch-plus-fill:before{content:"\f4bb"}.bi-patch-plus:before{content:"\f4bc"}.bi-patch-question-fill:before{content:"\f4bd"}.bi-patch-question:before{content:"\f4be"}.bi-pause-btn-fill:before{content:"\f4bf"}.bi-pause-btn:before{content:"\f4c0"}.bi-pause-circle-fill:before{content:"\f4c1"}.bi-pause-circle:before{content:"\f4c2"}.bi-pause-fill:before{content:"\f4c3"}.bi-pause:before{content:"\f4c4"}.bi-peace-fill:before{content:"\f4c5"}.bi-peace:before{content:"\f4c6"}.bi-pen-fill:before{content:"\f4c7"}.bi-pen:before{content:"\f4c8"}.bi-pencil-fill:before{content:"\f4c9"}.bi-pencil-square:before{content:"\f4ca"}.bi-pencil:before{content:"\f4cb"}.bi-pentagon-fill:before{content:"\f4cc"}.bi-pentagon-half:before{content:"\f4cd"}.bi-pentagon:before{content:"\f4ce"}.bi-people-fill:before{content:"\f4cf"}.bi-people:before{content:"\f4d0"}.bi-percent:before{content:"\f4d1"}.bi-person-badge-fill:before{content:"\f4d2"}.bi-person-badge:before{content:"\f4d3"}.bi-person-bounding-box:before{content:"\f4d4"}.bi-person-check-fill:before{content:"\f4d5"}.bi-person-check:before{content:"\f4d6"}.bi-person-circle:before{content:"\f4d7"}.bi-person-dash-fill:before{content:"\f4d8"}.bi-person-dash:before{content:"\f4d9"}.bi-person-fill:before{content:"\f4da"}.bi-person-lines-fill:before{content:"\f4db"}.bi-person-plus-fill:before{content:"\f4dc"}.bi-person-plus:before{content:"\f4dd"}.bi-person-square:before{content:"\f4de"}.bi-person-x-fill:before{content:"\f4df"}.bi-person-x:before{content:"\f4e0"}.bi-person:before{content:"\f4e1"}.bi-phone-fill:before{content:"\f4e2"}.bi-phone-landscape-fill:before{content:"\f4e3"}.bi-phone-landscape:before{content:"\f4e4"}.bi-phone-vibrate-fill:before{content:"\f4e5"}.bi-phone-vibrate:before{content:"\f4e6"}.bi-phone:before{content:"\f4e7"}.bi-pie-chart-fill:before{content:"\f4e8"}.bi-pie-chart:before{content:"\f4e9"}.bi-pin-angle-fill:before{content:"\f4ea"}.bi-pin-angle:before{content:"\f4eb"}.bi-pin-fill:before{content:"\f4ec"}.bi-pin:before{content:"\f4ed"}.bi-pip-fill:before{content:"\f4ee"}.bi-pip:before{content:"\f4ef"}.bi-play-btn-fill:before{content:"\f4f0"}.bi-play-btn:before{content:"\f4f1"}.bi-play-circle-fill:before{content:"\f4f2"}.bi-play-circle:before{content:"\f4f3"}.bi-play-fill:before{content:"\f4f4"}.bi-play:before{content:"\f4f5"}.bi-plug-fill:before{content:"\f4f6"}.bi-plug:before{content:"\f4f7"}.bi-plus-circle-dotted:before{content:"\f4f8"}.bi-plus-circle-fill:before{content:"\f4f9"}.bi-plus-circle:before{content:"\f4fa"}.bi-plus-square-dotted:before{content:"\f4fb"}.bi-plus-square-fill:before{content:"\f4fc"}.bi-plus-square:before{content:"\f4fd"}.bi-plus:before{content:"\f4fe"}.bi-power:before{content:"\f4ff"}.bi-printer-fill:before{content:"\f500"}.bi-printer:before{content:"\f501"}.bi-puzzle-fill:before{content:"\f502"}.bi-puzzle:before{content:"\f503"}.bi-question-circle-fill:before{content:"\f504"}.bi-question-circle:before{content:"\f505"}.bi-question-diamond-fill:before{content:"\f506"}.bi-question-diamond:before{content:"\f507"}.bi-question-octagon-fill:before{content:"\f508"}.bi-question-octagon:before{content:"\f509"}.bi-question-square-fill:before{content:"\f50a"}.bi-question-square:before{content:"\f50b"}.bi-question:before{content:"\f50c"}.bi-rainbow:before{content:"\f50d"}.bi-receipt-cutoff:before{content:"\f50e"}.bi-receipt:before{content:"\f50f"}.bi-reception-0:before{content:"\f510"}.bi-reception-1:before{content:"\f511"}.bi-reception-2:before{content:"\f512"}.bi-reception-3:before{content:"\f513"}.bi-reception-4:before{content:"\f514"}.bi-record-btn-fill:before{content:"\f515"}.bi-record-btn:before{content:"\f516"}.bi-record-circle-fill:before{content:"\f517"}.bi-record-circle:before{content:"\f518"}.bi-record-fill:before{content:"\f519"}.bi-record:before{content:"\f51a"}.bi-record2-fill:before{content:"\f51b"}.bi-record2:before{content:"\f51c"}.bi-reply-all-fill:before{content:"\f51d"}.bi-reply-all:before{content:"\f51e"}.bi-reply-fill:before{content:"\f51f"}.bi-reply:before{content:"\f520"}.bi-rss-fill:before{content:"\f521"}.bi-rss:before{content:"\f522"}.bi-rulers:before{content:"\f523"}.bi-save-fill:before{content:"\f524"}.bi-save:before{content:"\f525"}.bi-save2-fill:before{content:"\f526"}.bi-save2:before{content:"\f527"}.bi-scissors:before{content:"\f528"}.bi-screwdriver:before{content:"\f529"}.bi-search:before{content:"\f52a"}.bi-segmented-nav:before{content:"\f52b"}.bi-server:before{content:"\f52c"}.bi-share-fill:before{content:"\f52d"}.bi-share:before{content:"\f52e"}.bi-shield-check:before{content:"\f52f"}.bi-shield-exclamation:before{content:"\f530"}.bi-shield-fill-check:before{content:"\f531"}.bi-shield-fill-exclamation:before{content:"\f532"}.bi-shield-fill-minus:before{content:"\f533"}.bi-shield-fill-plus:before{content:"\f534"}.bi-shield-fill-x:before{content:"\f535"}.bi-shield-fill:before{content:"\f536"}.bi-shield-lock-fill:before{content:"\f537"}.bi-shield-lock:before{content:"\f538"}.bi-shield-minus:before{content:"\f539"}.bi-shield-plus:before{content:"\f53a"}.bi-shield-shaded:before{content:"\f53b"}.bi-shield-slash-fill:before{content:"\f53c"}.bi-shield-slash:before{content:"\f53d"}.bi-shield-x:before{content:"\f53e"}.bi-shield:before{content:"\f53f"}.bi-shift-fill:before{content:"\f540"}.bi-shift:before{content:"\f541"}.bi-shop-window:before{content:"\f542"}.bi-shop:before{content:"\f543"}.bi-shuffle:before{content:"\f544"}.bi-signpost-2-fill:before{content:"\f545"}.bi-signpost-2:before{content:"\f546"}.bi-signpost-fill:before{content:"\f547"}.bi-signpost-split-fill:before{content:"\f548"}.bi-signpost-split:before{content:"\f549"}.bi-signpost:before{content:"\f54a"}.bi-sim-fill:before{content:"\f54b"}.bi-sim:before{content:"\f54c"}.bi-skip-backward-btn-fill:before{content:"\f54d"}.bi-skip-backward-btn:before{content:"\f54e"}.bi-skip-backward-circle-fill:before{content:"\f54f"}.bi-skip-backward-circle:before{content:"\f550"}.bi-skip-backward-fill:before{content:"\f551"}.bi-skip-backward:before{content:"\f552"}.bi-skip-end-btn-fill:before{content:"\f553"}.bi-skip-end-btn:before{content:"\f554"}.bi-skip-end-circle-fill:before{content:"\f555"}.bi-skip-end-circle:before{content:"\f556"}.bi-skip-end-fill:before{content:"\f557"}.bi-skip-end:before{content:"\f558"}.bi-skip-forward-btn-fill:before{content:"\f559"}.bi-skip-forward-btn:before{content:"\f55a"}.bi-skip-forward-circle-fill:before{content:"\f55b"}.bi-skip-forward-circle:before{content:"\f55c"}.bi-skip-forward-fill:before{content:"\f55d"}.bi-skip-forward:before{content:"\f55e"}.bi-skip-start-btn-fill:before{content:"\f55f"}.bi-skip-start-btn:before{content:"\f560"}.bi-skip-start-circle-fill:before{content:"\f561"}.bi-skip-start-circle:before{content:"\f562"}.bi-skip-start-fill:before{content:"\f563"}.bi-skip-start:before{content:"\f564"}.bi-slack:before{content:"\f565"}.bi-slash-circle-fill:before{content:"\f566"}.bi-slash-circle:before{content:"\f567"}.bi-slash-square-fill:before{content:"\f568"}.bi-slash-square:before{content:"\f569"}.bi-slash:before{content:"\f56a"}.bi-sliders:before{content:"\f56b"}.bi-smartwatch:before{content:"\f56c"}.bi-snow:before{content:"\f56d"}.bi-snow2:before{content:"\f56e"}.bi-snow3:before{content:"\f56f"}.bi-sort-alpha-down-alt:before{content:"\f570"}.bi-sort-alpha-down:before{content:"\f571"}.bi-sort-alpha-up-alt:before{content:"\f572"}.bi-sort-alpha-up:before{content:"\f573"}.bi-sort-down-alt:before{content:"\f574"}.bi-sort-down:before{content:"\f575"}.bi-sort-numeric-down-alt:before{content:"\f576"}.bi-sort-numeric-down:before{content:"\f577"}.bi-sort-numeric-up-alt:before{content:"\f578"}.bi-sort-numeric-up:before{content:"\f579"}.bi-sort-up-alt:before{content:"\f57a"}.bi-sort-up:before{content:"\f57b"}.bi-soundwave:before{content:"\f57c"}.bi-speaker-fill:before{content:"\f57d"}.bi-speaker:before{content:"\f57e"}.bi-speedometer:before{content:"\f57f"}.bi-speedometer2:before{content:"\f580"}.bi-spellcheck:before{content:"\f581"}.bi-square-fill:before{content:"\f582"}.bi-square-half:before{content:"\f583"}.bi-square:before{content:"\f584"}.bi-stack:before{content:"\f585"}.bi-star-fill:before{content:"\f586"}.bi-star-half:before{content:"\f587"}.bi-star:before{content:"\f588"}.bi-stars:before{content:"\f589"}.bi-stickies-fill:before{content:"\f58a"}.bi-stickies:before{content:"\f58b"}.bi-sticky-fill:before{content:"\f58c"}.bi-sticky:before{content:"\f58d"}.bi-stop-btn-fill:before{content:"\f58e"}.bi-stop-btn:before{content:"\f58f"}.bi-stop-circle-fill:before{content:"\f590"}.bi-stop-circle:before{content:"\f591"}.bi-stop-fill:before{content:"\f592"}.bi-stop:before{content:"\f593"}.bi-stoplights-fill:before{content:"\f594"}.bi-stoplights:before{content:"\f595"}.bi-stopwatch-fill:before{content:"\f596"}.bi-stopwatch:before{content:"\f597"}.bi-subtract:before{content:"\f598"}.bi-suit-club-fill:before{content:"\f599"}.bi-suit-club:before{content:"\f59a"}.bi-suit-diamond-fill:before{content:"\f59b"}.bi-suit-diamond:before{content:"\f59c"}.bi-suit-heart-fill:before{content:"\f59d"}.bi-suit-heart:before{content:"\f59e"}.bi-suit-spade-fill:before{content:"\f59f"}.bi-suit-spade:before{content:"\f5a0"}.bi-sun-fill:before{content:"\f5a1"}.bi-sun:before{content:"\f5a2"}.bi-sunglasses:before{content:"\f5a3"}.bi-sunrise-fill:before{content:"\f5a4"}.bi-sunrise:before{content:"\f5a5"}.bi-sunset-fill:before{content:"\f5a6"}.bi-sunset:before{content:"\f5a7"}.bi-symmetry-horizontal:before{content:"\f5a8"}.bi-symmetry-vertical:before{content:"\f5a9"}.bi-table:before{content:"\f5aa"}.bi-tablet-fill:before{content:"\f5ab"}.bi-tablet-landscape-fill:before{content:"\f5ac"}.bi-tablet-landscape:before{content:"\f5ad"}.bi-tablet:before{content:"\f5ae"}.bi-tag-fill:before{content:"\f5af"}.bi-tag:before{content:"\f5b0"}.bi-tags-fill:before{content:"\f5b1"}.bi-tags:before{content:"\f5b2"}.bi-telegram:before{content:"\f5b3"}.bi-telephone-fill:before{content:"\f5b4"}.bi-telephone-forward-fill:before{content:"\f5b5"}.bi-telephone-forward:before{content:"\f5b6"}.bi-telephone-inbound-fill:before{content:"\f5b7"}.bi-telephone-inbound:before{content:"\f5b8"}.bi-telephone-minus-fill:before{content:"\f5b9"}.bi-telephone-minus:before{content:"\f5ba"}.bi-telephone-outbound-fill:before{content:"\f5bb"}.bi-telephone-outbound:before{content:"\f5bc"}.bi-telephone-plus-fill:before{content:"\f5bd"}.bi-telephone-plus:before{content:"\f5be"}.bi-telephone-x-fill:before{content:"\f5bf"}.bi-telephone-x:before{content:"\f5c0"}.bi-telephone:before{content:"\f5c1"}.bi-terminal-fill:before{content:"\f5c2"}.bi-terminal:before{content:"\f5c3"}.bi-text-center:before{content:"\f5c4"}.bi-text-indent-left:before{content:"\f5c5"}.bi-text-indent-right:before{content:"\f5c6"}.bi-text-left:before{content:"\f5c7"}.bi-text-paragraph:before{content:"\f5c8"}.bi-text-right:before{content:"\f5c9"}.bi-textarea-resize:before{content:"\f5ca"}.bi-textarea-t:before{content:"\f5cb"}.bi-textarea:before{content:"\f5cc"}.bi-thermometer-half:before{content:"\f5cd"}.bi-thermometer-high:before{content:"\f5ce"}.bi-thermometer-low:before{content:"\f5cf"}.bi-thermometer-snow:before{content:"\f5d0"}.bi-thermometer-sun:before{content:"\f5d1"}.bi-thermometer:before{content:"\f5d2"}.bi-three-dots-vertical:before{content:"\f5d3"}.bi-three-dots:before{content:"\f5d4"}.bi-toggle-off:before{content:"\f5d5"}.bi-toggle-on:before{content:"\f5d6"}.bi-toggle2-off:before{content:"\f5d7"}.bi-toggle2-on:before{content:"\f5d8"}.bi-toggles:before{content:"\f5d9"}.bi-toggles2:before{content:"\f5da"}.bi-tools:before{content:"\f5db"}.bi-tornado:before{content:"\f5dc"}.bi-trash-fill:before{content:"\f5dd"}.bi-trash:before{content:"\f5de"}.bi-trash2-fill:before{content:"\f5df"}.bi-trash2:before{content:"\f5e0"}.bi-tree-fill:before{content:"\f5e1"}.bi-tree:before{content:"\f5e2"}.bi-triangle-fill:before{content:"\f5e3"}.bi-triangle-half:before{content:"\f5e4"}.bi-triangle:before{content:"\f5e5"}.bi-trophy-fill:before{content:"\f5e6"}.bi-trophy:before{content:"\f5e7"}.bi-tropical-storm:before{content:"\f5e8"}.bi-truck-flatbed:before{content:"\f5e9"}.bi-truck:before{content:"\f5ea"}.bi-tsunami:before{content:"\f5eb"}.bi-tv-fill:before{content:"\f5ec"}.bi-tv:before{content:"\f5ed"}.bi-twitch:before{content:"\f5ee"}.bi-twitter:before{content:"\f5ef"}.bi-type-bold:before{content:"\f5f0"}.bi-type-h1:before{content:"\f5f1"}.bi-type-h2:before{content:"\f5f2"}.bi-type-h3:before{content:"\f5f3"}.bi-type-italic:before{content:"\f5f4"}.bi-type-strikethrough:before{content:"\f5f5"}.bi-type-underline:before{content:"\f5f6"}.bi-type:before{content:"\f5f7"}.bi-ui-checks-grid:before{content:"\f5f8"}.bi-ui-checks:before{content:"\f5f9"}.bi-ui-radios-grid:before{content:"\f5fa"}.bi-ui-radios:before{content:"\f5fb"}.bi-umbrella-fill:before{content:"\f5fc"}.bi-umbrella:before{content:"\f5fd"}.bi-union:before{content:"\f5fe"}.bi-unlock-fill:before{content:"\f5ff"}.bi-unlock:before{content:"\f600"}.bi-upc-scan:before{content:"\f601"}.bi-upc:before{content:"\f602"}.bi-upload:before{content:"\f603"}.bi-vector-pen:before{content:"\f604"}.bi-view-list:before{content:"\f605"}.bi-view-stacked:before{content:"\f606"}.bi-vinyl-fill:before{content:"\f607"}.bi-vinyl:before{content:"\f608"}.bi-voicemail:before{content:"\f609"}.bi-volume-down-fill:before{content:"\f60a"}.bi-volume-down:before{content:"\f60b"}.bi-volume-mute-fill:before{content:"\f60c"}.bi-volume-mute:before{content:"\f60d"}.bi-volume-off-fill:before{content:"\f60e"}.bi-volume-off:before{content:"\f60f"}.bi-volume-up-fill:before{content:"\f610"}.bi-volume-up:before{content:"\f611"}.bi-vr:before{content:"\f612"}.bi-wallet-fill:before{content:"\f613"}.bi-wallet:before{content:"\f614"}.bi-wallet2:before{content:"\f615"}.bi-watch:before{content:"\f616"}.bi-water:before{content:"\f617"}.bi-whatsapp:before{content:"\f618"}.bi-wifi-1:before{content:"\f619"}.bi-wifi-2:before{content:"\f61a"}.bi-wifi-off:before{content:"\f61b"}.bi-wifi:before{content:"\f61c"}.bi-wind:before{content:"\f61d"}.bi-window-dock:before{content:"\f61e"}.bi-window-sidebar:before{content:"\f61f"}.bi-window:before{content:"\f620"}.bi-wrench:before{content:"\f621"}.bi-x-circle-fill:before{content:"\f622"}.bi-x-circle:before{content:"\f623"}.bi-x-diamond-fill:before{content:"\f624"}.bi-x-diamond:before{content:"\f625"}.bi-x-octagon-fill:before{content:"\f626"}.bi-x-octagon:before{content:"\f627"}.bi-x-square-fill:before{content:"\f628"}.bi-x-square:before{content:"\f629"}.bi-x:before{content:"\f62a"}.bi-youtube:before{content:"\f62b"}.bi-zoom-in:before{content:"\f62c"}.bi-zoom-out:before{content:"\f62d"}.bi-bank:before{content:"\f62e"}.bi-bank2:before{content:"\f62f"}.bi-bell-slash-fill:before{content:"\f630"}.bi-bell-slash:before{content:"\f631"}.bi-cash-coin:before{content:"\f632"}.bi-check-lg:before{content:"\f633"}.bi-coin:before{content:"\f634"}.bi-currency-bitcoin:before{content:"\f635"}.bi-currency-dollar:before{content:"\f636"}.bi-currency-euro:before{content:"\f637"}.bi-currency-exchange:before{content:"\f638"}.bi-currency-pound:before{content:"\f639"}.bi-currency-yen:before{content:"\f63a"}.bi-dash-lg:before{content:"\f63b"}.bi-exclamation-lg:before{content:"\f63c"}.bi-file-earmark-pdf-fill:before{content:"\f63d"}.bi-file-earmark-pdf:before{content:"\f63e"}.bi-file-pdf-fill:before{content:"\f63f"}.bi-file-pdf:before{content:"\f640"}.bi-gender-ambiguous:before{content:"\f641"}.bi-gender-female:before{content:"\f642"}.bi-gender-male:before{content:"\f643"}.bi-gender-trans:before{content:"\f644"}.bi-headset-vr:before{content:"\f645"}.bi-info-lg:before{content:"\f646"}.bi-mastodon:before{content:"\f647"}.bi-messenger:before{content:"\f648"}.bi-piggy-bank-fill:before{content:"\f649"}.bi-piggy-bank:before{content:"\f64a"}.bi-pin-map-fill:before{content:"\f64b"}.bi-pin-map:before{content:"\f64c"}.bi-plus-lg:before{content:"\f64d"}.bi-question-lg:before{content:"\f64e"}.bi-recycle:before{content:"\f64f"}.bi-reddit:before{content:"\f650"}.bi-safe-fill:before{content:"\f651"}.bi-safe2-fill:before{content:"\f652"}.bi-safe2:before{content:"\f653"}.bi-sd-card-fill:before{content:"\f654"}.bi-sd-card:before{content:"\f655"}.bi-skype:before{content:"\f656"}.bi-slash-lg:before{content:"\f657"}.bi-translate:before{content:"\f658"}.bi-x-lg:before{content:"\f659"}.bi-safe:before{content:"\f65a"}.bi-apple:before{content:"\f65b"}.bi-microsoft:before{content:"\f65d"}.bi-windows:before{content:"\f65e"}.bi-behance:before{content:"\f65c"}.bi-dribbble:before{content:"\f65f"}.bi-line:before{content:"\f660"}.bi-medium:before{content:"\f661"}.bi-paypal:before{content:"\f662"}.bi-pinterest:before{content:"\f663"}.bi-signal:before{content:"\f664"}.bi-snapchat:before{content:"\f665"}.bi-spotify:before{content:"\f666"}.bi-stack-overflow:before{content:"\f667"}.bi-strava:before{content:"\f668"}.bi-wordpress:before{content:"\f669"}.bi-vimeo:before{content:"\f66a"}.bi-activity:before{content:"\f66b"}.bi-easel2-fill:before{content:"\f66c"}.bi-easel2:before{content:"\f66d"}.bi-easel3-fill:before{content:"\f66e"}.bi-easel3:before{content:"\f66f"}.bi-fan:before{content:"\f670"}.bi-fingerprint:before{content:"\f671"}.bi-graph-down-arrow:before{content:"\f672"}.bi-graph-up-arrow:before{content:"\f673"}.bi-hypnotize:before{content:"\f674"}.bi-magic:before{content:"\f675"}.bi-person-rolodex:before{content:"\f676"}.bi-person-video:before{content:"\f677"}.bi-person-video2:before{content:"\f678"}.bi-person-video3:before{content:"\f679"}.bi-person-workspace:before{content:"\f67a"}.bi-radioactive:before{content:"\f67b"}.bi-webcam-fill:before{content:"\f67c"}.bi-webcam:before{content:"\f67d"}.bi-yin-yang:before{content:"\f67e"}.bi-bandaid-fill:before{content:"\f680"}.bi-bandaid:before{content:"\f681"}.bi-bluetooth:before{content:"\f682"}.bi-body-text:before{content:"\f683"}.bi-boombox:before{content:"\f684"}.bi-boxes:before{content:"\f685"}.bi-dpad-fill:before{content:"\f686"}.bi-dpad:before{content:"\f687"}.bi-ear-fill:before{content:"\f688"}.bi-ear:before{content:"\f689"}.bi-envelope-check-fill:before{content:"\f68b"}.bi-envelope-check:before{content:"\f68c"}.bi-envelope-dash-fill:before{content:"\f68e"}.bi-envelope-dash:before{content:"\f68f"}.bi-envelope-exclamation-fill:before{content:"\f691"}.bi-envelope-exclamation:before{content:"\f692"}.bi-envelope-plus-fill:before{content:"\f693"}.bi-envelope-plus:before{content:"\f694"}.bi-envelope-slash-fill:before{content:"\f696"}.bi-envelope-slash:before{content:"\f697"}.bi-envelope-x-fill:before{content:"\f699"}.bi-envelope-x:before{content:"\f69a"}.bi-explicit-fill:before{content:"\f69b"}.bi-explicit:before{content:"\f69c"}.bi-git:before{content:"\f69d"}.bi-infinity:before{content:"\f69e"}.bi-list-columns-reverse:before{content:"\f69f"}.bi-list-columns:before{content:"\f6a0"}.bi-meta:before{content:"\f6a1"}.bi-nintendo-switch:before{content:"\f6a4"}.bi-pc-display-horizontal:before{content:"\f6a5"}.bi-pc-display:before{content:"\f6a6"}.bi-pc-horizontal:before{content:"\f6a7"}.bi-pc:before{content:"\f6a8"}.bi-playstation:before{content:"\f6a9"}.bi-plus-slash-minus:before{content:"\f6aa"}.bi-projector-fill:before{content:"\f6ab"}.bi-projector:before{content:"\f6ac"}.bi-qr-code-scan:before{content:"\f6ad"}.bi-qr-code:before{content:"\f6ae"}.bi-quora:before{content:"\f6af"}.bi-quote:before{content:"\f6b0"}.bi-robot:before{content:"\f6b1"}.bi-send-check-fill:before{content:"\f6b2"}.bi-send-check:before{content:"\f6b3"}.bi-send-dash-fill:before{content:"\f6b4"}.bi-send-dash:before{content:"\f6b5"}.bi-send-exclamation-fill:before{content:"\f6b7"}.bi-send-exclamation:before{content:"\f6b8"}.bi-send-fill:before{content:"\f6b9"}.bi-send-plus-fill:before{content:"\f6ba"}.bi-send-plus:before{content:"\f6bb"}.bi-send-slash-fill:before{content:"\f6bc"}.bi-send-slash:before{content:"\f6bd"}.bi-send-x-fill:before{content:"\f6be"}.bi-send-x:before{content:"\f6bf"}.bi-send:before{content:"\f6c0"}.bi-steam:before{content:"\f6c1"}.bi-terminal-dash:before{content:"\f6c3"}.bi-terminal-plus:before{content:"\f6c4"}.bi-terminal-split:before{content:"\f6c5"}.bi-ticket-detailed-fill:before{content:"\f6c6"}.bi-ticket-detailed:before{content:"\f6c7"}.bi-ticket-fill:before{content:"\f6c8"}.bi-ticket-perforated-fill:before{content:"\f6c9"}.bi-ticket-perforated:before{content:"\f6ca"}.bi-ticket:before{content:"\f6cb"}.bi-tiktok:before{content:"\f6cc"}.bi-window-dash:before{content:"\f6cd"}.bi-window-desktop:before{content:"\f6ce"}.bi-window-fullscreen:before{content:"\f6cf"}.bi-window-plus:before{content:"\f6d0"}.bi-window-split:before{content:"\f6d1"}.bi-window-stack:before{content:"\f6d2"}.bi-window-x:before{content:"\f6d3"}.bi-xbox:before{content:"\f6d4"}.bi-ethernet:before{content:"\f6d5"}.bi-hdmi-fill:before{content:"\f6d6"}.bi-hdmi:before{content:"\f6d7"}.bi-usb-c-fill:before{content:"\f6d8"}.bi-usb-c:before{content:"\f6d9"}.bi-usb-fill:before{content:"\f6da"}.bi-usb-plug-fill:before{content:"\f6db"}.bi-usb-plug:before{content:"\f6dc"}.bi-usb-symbol:before{content:"\f6dd"}.bi-usb:before{content:"\f6de"}.bi-boombox-fill:before{content:"\f6df"}.bi-displayport:before{content:"\f6e1"}.bi-gpu-card:before{content:"\f6e2"}.bi-memory:before{content:"\f6e3"}.bi-modem-fill:before{content:"\f6e4"}.bi-modem:before{content:"\f6e5"}.bi-motherboard-fill:before{content:"\f6e6"}.bi-motherboard:before{content:"\f6e7"}.bi-optical-audio-fill:before{content:"\f6e8"}.bi-optical-audio:before{content:"\f6e9"}.bi-pci-card:before{content:"\f6ea"}.bi-router-fill:before{content:"\f6eb"}.bi-router:before{content:"\f6ec"}.bi-thunderbolt-fill:before{content:"\f6ef"}.bi-thunderbolt:before{content:"\f6f0"}.bi-usb-drive-fill:before{content:"\f6f1"}.bi-usb-drive:before{content:"\f6f2"}.bi-usb-micro-fill:before{content:"\f6f3"}.bi-usb-micro:before{content:"\f6f4"}.bi-usb-mini-fill:before{content:"\f6f5"}.bi-usb-mini:before{content:"\f6f6"}.bi-cloud-haze2:before{content:"\f6f7"}.bi-device-hdd-fill:before{content:"\f6f8"}.bi-device-hdd:before{content:"\f6f9"}.bi-device-ssd-fill:before{content:"\f6fa"}.bi-device-ssd:before{content:"\f6fb"}.bi-displayport-fill:before{content:"\f6fc"}.bi-mortarboard-fill:before{content:"\f6fd"}.bi-mortarboard:before{content:"\f6fe"}.bi-terminal-x:before{content:"\f6ff"}.bi-arrow-through-heart-fill:before{content:"\f700"}.bi-arrow-through-heart:before{content:"\f701"}.bi-badge-sd-fill:before{content:"\f702"}.bi-badge-sd:before{content:"\f703"}.bi-bag-heart-fill:before{content:"\f704"}.bi-bag-heart:before{content:"\f705"}.bi-balloon-fill:before{content:"\f706"}.bi-balloon-heart-fill:before{content:"\f707"}.bi-balloon-heart:before{content:"\f708"}.bi-balloon:before{content:"\f709"}.bi-box2-fill:before{content:"\f70a"}.bi-box2-heart-fill:before{content:"\f70b"}.bi-box2-heart:before{content:"\f70c"}.bi-box2:before{content:"\f70d"}.bi-braces-asterisk:before{content:"\f70e"}.bi-calendar-heart-fill:before{content:"\f70f"}.bi-calendar-heart:before{content:"\f710"}.bi-calendar2-heart-fill:before{content:"\f711"}.bi-calendar2-heart:before{content:"\f712"}.bi-chat-heart-fill:before{content:"\f713"}.bi-chat-heart:before{content:"\f714"}.bi-chat-left-heart-fill:before{content:"\f715"}.bi-chat-left-heart:before{content:"\f716"}.bi-chat-right-heart-fill:before{content:"\f717"}.bi-chat-right-heart:before{content:"\f718"}.bi-chat-square-heart-fill:before{content:"\f719"}.bi-chat-square-heart:before{content:"\f71a"}.bi-clipboard-check-fill:before{content:"\f71b"}.bi-clipboard-data-fill:before{content:"\f71c"}.bi-clipboard-fill:before{content:"\f71d"}.bi-clipboard-heart-fill:before{content:"\f71e"}.bi-clipboard-heart:before{content:"\f71f"}.bi-clipboard-minus-fill:before{content:"\f720"}.bi-clipboard-plus-fill:before{content:"\f721"}.bi-clipboard-pulse:before{content:"\f722"}.bi-clipboard-x-fill:before{content:"\f723"}.bi-clipboard2-check-fill:before{content:"\f724"}.bi-clipboard2-check:before{content:"\f725"}.bi-clipboard2-data-fill:before{content:"\f726"}.bi-clipboard2-data:before{content:"\f727"}.bi-clipboard2-fill:before{content:"\f728"}.bi-clipboard2-heart-fill:before{content:"\f729"}.bi-clipboard2-heart:before{content:"\f72a"}.bi-clipboard2-minus-fill:before{content:"\f72b"}.bi-clipboard2-minus:before{content:"\f72c"}.bi-clipboard2-plus-fill:before{content:"\f72d"}.bi-clipboard2-plus:before{content:"\f72e"}.bi-clipboard2-pulse-fill:before{content:"\f72f"}.bi-clipboard2-pulse:before{content:"\f730"}.bi-clipboard2-x-fill:before{content:"\f731"}.bi-clipboard2-x:before{content:"\f732"}.bi-clipboard2:before{content:"\f733"}.bi-emoji-kiss-fill:before{content:"\f734"}.bi-emoji-kiss:before{content:"\f735"}.bi-envelope-heart-fill:before{content:"\f736"}.bi-envelope-heart:before{content:"\f737"}.bi-envelope-open-heart-fill:before{content:"\f738"}.bi-envelope-open-heart:before{content:"\f739"}.bi-envelope-paper-fill:before{content:"\f73a"}.bi-envelope-paper-heart-fill:before{content:"\f73b"}.bi-envelope-paper-heart:before{content:"\f73c"}.bi-envelope-paper:before{content:"\f73d"}.bi-filetype-aac:before{content:"\f73e"}.bi-filetype-ai:before{content:"\f73f"}.bi-filetype-bmp:before{content:"\f740"}.bi-filetype-cs:before{content:"\f741"}.bi-filetype-css:before{content:"\f742"}.bi-filetype-csv:before{content:"\f743"}.bi-filetype-doc:before{content:"\f744"}.bi-filetype-docx:before{content:"\f745"}.bi-filetype-exe:before{content:"\f746"}.bi-filetype-gif:before{content:"\f747"}.bi-filetype-heic:before{content:"\f748"}.bi-filetype-html:before{content:"\f749"}.bi-filetype-java:before{content:"\f74a"}.bi-filetype-jpg:before{content:"\f74b"}.bi-filetype-js:before{content:"\f74c"}.bi-filetype-jsx:before{content:"\f74d"}.bi-filetype-key:before{content:"\f74e"}.bi-filetype-m4p:before{content:"\f74f"}.bi-filetype-md:before{content:"\f750"}.bi-filetype-mdx:before{content:"\f751"}.bi-filetype-mov:before{content:"\f752"}.bi-filetype-mp3:before{content:"\f753"}.bi-filetype-mp4:before{content:"\f754"}.bi-filetype-otf:before{content:"\f755"}.bi-filetype-pdf:before{content:"\f756"}.bi-filetype-php:before{content:"\f757"}.bi-filetype-png:before{content:"\f758"}.bi-filetype-ppt:before{content:"\f75a"}.bi-filetype-psd:before{content:"\f75b"}.bi-filetype-py:before{content:"\f75c"}.bi-filetype-raw:before{content:"\f75d"}.bi-filetype-rb:before{content:"\f75e"}.bi-filetype-sass:before{content:"\f75f"}.bi-filetype-scss:before{content:"\f760"}.bi-filetype-sh:before{content:"\f761"}.bi-filetype-svg:before{content:"\f762"}.bi-filetype-tiff:before{content:"\f763"}.bi-filetype-tsx:before{content:"\f764"}.bi-filetype-ttf:before{content:"\f765"}.bi-filetype-txt:before{content:"\f766"}.bi-filetype-wav:before{content:"\f767"}.bi-filetype-woff:before{content:"\f768"}.bi-filetype-xls:before{content:"\f76a"}.bi-filetype-xml:before{content:"\f76b"}.bi-filetype-yml:before{content:"\f76c"}.bi-heart-arrow:before{content:"\f76d"}.bi-heart-pulse-fill:before{content:"\f76e"}.bi-heart-pulse:before{content:"\f76f"}.bi-heartbreak-fill:before{content:"\f770"}.bi-heartbreak:before{content:"\f771"}.bi-hearts:before{content:"\f772"}.bi-hospital-fill:before{content:"\f773"}.bi-hospital:before{content:"\f774"}.bi-house-heart-fill:before{content:"\f775"}.bi-house-heart:before{content:"\f776"}.bi-incognito:before{content:"\f777"}.bi-magnet-fill:before{content:"\f778"}.bi-magnet:before{content:"\f779"}.bi-person-heart:before{content:"\f77a"}.bi-person-hearts:before{content:"\f77b"}.bi-phone-flip:before{content:"\f77c"}.bi-plugin:before{content:"\f77d"}.bi-postage-fill:before{content:"\f77e"}.bi-postage-heart-fill:before{content:"\f77f"}.bi-postage-heart:before{content:"\f780"}.bi-postage:before{content:"\f781"}.bi-postcard-fill:before{content:"\f782"}.bi-postcard-heart-fill:before{content:"\f783"}.bi-postcard-heart:before{content:"\f784"}.bi-postcard:before{content:"\f785"}.bi-search-heart-fill:before{content:"\f786"}.bi-search-heart:before{content:"\f787"}.bi-sliders2-vertical:before{content:"\f788"}.bi-sliders2:before{content:"\f789"}.bi-trash3-fill:before{content:"\f78a"}.bi-trash3:before{content:"\f78b"}.bi-valentine:before{content:"\f78c"}.bi-valentine2:before{content:"\f78d"}.bi-wrench-adjustable-circle-fill:before{content:"\f78e"}.bi-wrench-adjustable-circle:before{content:"\f78f"}.bi-wrench-adjustable:before{content:"\f790"}.bi-filetype-json:before{content:"\f791"}.bi-filetype-pptx:before{content:"\f792"}.bi-filetype-xlsx:before{content:"\f793"}.bi-1-circle-fill:before{content:"\f796"}.bi-1-circle:before{content:"\f797"}.bi-1-square-fill:before{content:"\f798"}.bi-1-square:before{content:"\f799"}.bi-2-circle-fill:before{content:"\f79c"}.bi-2-circle:before{content:"\f79d"}.bi-2-square-fill:before{content:"\f79e"}.bi-2-square:before{content:"\f79f"}.bi-3-circle-fill:before{content:"\f7a2"}.bi-3-circle:before{content:"\f7a3"}.bi-3-square-fill:before{content:"\f7a4"}.bi-3-square:before{content:"\f7a5"}.bi-4-circle-fill:before{content:"\f7a8"}.bi-4-circle:before{content:"\f7a9"}.bi-4-square-fill:before{content:"\f7aa"}.bi-4-square:before{content:"\f7ab"}.bi-5-circle-fill:before{content:"\f7ae"}.bi-5-circle:before{content:"\f7af"}.bi-5-square-fill:before{content:"\f7b0"}.bi-5-square:before{content:"\f7b1"}.bi-6-circle-fill:before{content:"\f7b4"}.bi-6-circle:before{content:"\f7b5"}.bi-6-square-fill:before{content:"\f7b6"}.bi-6-square:before{content:"\f7b7"}.bi-7-circle-fill:before{content:"\f7ba"}.bi-7-circle:before{content:"\f7bb"}.bi-7-square-fill:before{content:"\f7bc"}.bi-7-square:before{content:"\f7bd"}.bi-8-circle-fill:before{content:"\f7c0"}.bi-8-circle:before{content:"\f7c1"}.bi-8-square-fill:before{content:"\f7c2"}.bi-8-square:before{content:"\f7c3"}.bi-9-circle-fill:before{content:"\f7c6"}.bi-9-circle:before{content:"\f7c7"}.bi-9-square-fill:before{content:"\f7c8"}.bi-9-square:before{content:"\f7c9"}.bi-airplane-engines-fill:before{content:"\f7ca"}.bi-airplane-engines:before{content:"\f7cb"}.bi-airplane-fill:before{content:"\f7cc"}.bi-airplane:before{content:"\f7cd"}.bi-alexa:before{content:"\f7ce"}.bi-alipay:before{content:"\f7cf"}.bi-android:before{content:"\f7d0"}.bi-android2:before{content:"\f7d1"}.bi-box-fill:before{content:"\f7d2"}.bi-box-seam-fill:before{content:"\f7d3"}.bi-browser-chrome:before{content:"\f7d4"}.bi-browser-edge:before{content:"\f7d5"}.bi-browser-firefox:before{content:"\f7d6"}.bi-browser-safari:before{content:"\f7d7"}.bi-c-circle-fill:before{content:"\f7da"}.bi-c-circle:before{content:"\f7db"}.bi-c-square-fill:before{content:"\f7dc"}.bi-c-square:before{content:"\f7dd"}.bi-capsule-pill:before{content:"\f7de"}.bi-capsule:before{content:"\f7df"}.bi-car-front-fill:before{content:"\f7e0"}.bi-car-front:before{content:"\f7e1"}.bi-cassette-fill:before{content:"\f7e2"}.bi-cassette:before{content:"\f7e3"}.bi-cc-circle-fill:before{content:"\f7e6"}.bi-cc-circle:before{content:"\f7e7"}.bi-cc-square-fill:before{content:"\f7e8"}.bi-cc-square:before{content:"\f7e9"}.bi-cup-hot-fill:before{content:"\f7ea"}.bi-cup-hot:before{content:"\f7eb"}.bi-currency-rupee:before{content:"\f7ec"}.bi-dropbox:before{content:"\f7ed"}.bi-escape:before{content:"\f7ee"}.bi-fast-forward-btn-fill:before{content:"\f7ef"}.bi-fast-forward-btn:before{content:"\f7f0"}.bi-fast-forward-circle-fill:before{content:"\f7f1"}.bi-fast-forward-circle:before{content:"\f7f2"}.bi-fast-forward-fill:before{content:"\f7f3"}.bi-fast-forward:before{content:"\f7f4"}.bi-filetype-sql:before{content:"\f7f5"}.bi-fire:before{content:"\f7f6"}.bi-google-play:before{content:"\f7f7"}.bi-h-circle-fill:before{content:"\f7fa"}.bi-h-circle:before{content:"\f7fb"}.bi-h-square-fill:before{content:"\f7fc"}.bi-h-square:before{content:"\f7fd"}.bi-indent:before{content:"\f7fe"}.bi-lungs-fill:before{content:"\f7ff"}.bi-lungs:before{content:"\f800"}.bi-microsoft-teams:before{content:"\f801"}.bi-p-circle-fill:before{content:"\f804"}.bi-p-circle:before{content:"\f805"}.bi-p-square-fill:before{content:"\f806"}.bi-p-square:before{content:"\f807"}.bi-pass-fill:before{content:"\f808"}.bi-pass:before{content:"\f809"}.bi-prescription:before{content:"\f80a"}.bi-prescription2:before{content:"\f80b"}.bi-r-circle-fill:before{content:"\f80e"}.bi-r-circle:before{content:"\f80f"}.bi-r-square-fill:before{content:"\f810"}.bi-r-square:before{content:"\f811"}.bi-repeat-1:before{content:"\f812"}.bi-repeat:before{content:"\f813"}.bi-rewind-btn-fill:before{content:"\f814"}.bi-rewind-btn:before{content:"\f815"}.bi-rewind-circle-fill:before{content:"\f816"}.bi-rewind-circle:before{content:"\f817"}.bi-rewind-fill:before{content:"\f818"}.bi-rewind:before{content:"\f819"}.bi-train-freight-front-fill:before{content:"\f81a"}.bi-train-freight-front:before{content:"\f81b"}.bi-train-front-fill:before{content:"\f81c"}.bi-train-front:before{content:"\f81d"}.bi-train-lightrail-front-fill:before{content:"\f81e"}.bi-train-lightrail-front:before{content:"\f81f"}.bi-truck-front-fill:before{content:"\f820"}.bi-truck-front:before{content:"\f821"}.bi-ubuntu:before{content:"\f822"}.bi-unindent:before{content:"\f823"}.bi-unity:before{content:"\f824"}.bi-universal-access-circle:before{content:"\f825"}.bi-universal-access:before{content:"\f826"}.bi-virus:before{content:"\f827"}.bi-virus2:before{content:"\f828"}.bi-wechat:before{content:"\f829"}.bi-yelp:before{content:"\f82a"}.bi-sign-stop-fill:before{content:"\f82b"}.bi-sign-stop-lights-fill:before{content:"\f82c"}.bi-sign-stop-lights:before{content:"\f82d"}.bi-sign-stop:before{content:"\f82e"}.bi-sign-turn-left-fill:before{content:"\f82f"}.bi-sign-turn-left:before{content:"\f830"}.bi-sign-turn-right-fill:before{content:"\f831"}.bi-sign-turn-right:before{content:"\f832"}.bi-sign-turn-slight-left-fill:before{content:"\f833"}.bi-sign-turn-slight-left:before{content:"\f834"}.bi-sign-turn-slight-right-fill:before{content:"\f835"}.bi-sign-turn-slight-right:before{content:"\f836"}.bi-sign-yield-fill:before{content:"\f837"}.bi-sign-yield:before{content:"\f838"}.bi-ev-station-fill:before{content:"\f839"}.bi-ev-station:before{content:"\f83a"}.bi-fuel-pump-diesel-fill:before{content:"\f83b"}.bi-fuel-pump-diesel:before{content:"\f83c"}.bi-fuel-pump-fill:before{content:"\f83d"}.bi-fuel-pump:before{content:"\f83e"}.bi-0-circle-fill:before{content:"\f83f"}.bi-0-circle:before{content:"\f840"}.bi-0-square-fill:before{content:"\f841"}.bi-0-square:before{content:"\f842"}.bi-rocket-fill:before{content:"\f843"}.bi-rocket-takeoff-fill:before{content:"\f844"}.bi-rocket-takeoff:before{content:"\f845"}.bi-rocket:before{content:"\f846"}.bi-stripe:before{content:"\f847"}.bi-subscript:before{content:"\f848"}.bi-superscript:before{content:"\f849"}.bi-trello:before{content:"\f84a"}.bi-envelope-at-fill:before{content:"\f84b"}.bi-envelope-at:before{content:"\f84c"}.bi-regex:before{content:"\f84d"}.bi-text-wrap:before{content:"\f84e"}.bi-sign-dead-end-fill:before{content:"\f84f"}.bi-sign-dead-end:before{content:"\f850"}.bi-sign-do-not-enter-fill:before{content:"\f851"}.bi-sign-do-not-enter:before{content:"\f852"}.bi-sign-intersection-fill:before{content:"\f853"}.bi-sign-intersection-side-fill:before{content:"\f854"}.bi-sign-intersection-side:before{content:"\f855"}.bi-sign-intersection-t-fill:before{content:"\f856"}.bi-sign-intersection-t:before{content:"\f857"}.bi-sign-intersection-y-fill:before{content:"\f858"}.bi-sign-intersection-y:before{content:"\f859"}.bi-sign-intersection:before{content:"\f85a"}.bi-sign-merge-left-fill:before{content:"\f85b"}.bi-sign-merge-left:before{content:"\f85c"}.bi-sign-merge-right-fill:before{content:"\f85d"}.bi-sign-merge-right:before{content:"\f85e"}.bi-sign-no-left-turn-fill:before{content:"\f85f"}.bi-sign-no-left-turn:before{content:"\f860"}.bi-sign-no-parking-fill:before{content:"\f861"}.bi-sign-no-parking:before{content:"\f862"}.bi-sign-no-right-turn-fill:before{content:"\f863"}.bi-sign-no-right-turn:before{content:"\f864"}.bi-sign-railroad-fill:before{content:"\f865"}.bi-sign-railroad:before{content:"\f866"}.bi-building-add:before{content:"\f867"}.bi-building-check:before{content:"\f868"}.bi-building-dash:before{content:"\f869"}.bi-building-down:before{content:"\f86a"}.bi-building-exclamation:before{content:"\f86b"}.bi-building-fill-add:before{content:"\f86c"}.bi-building-fill-check:before{content:"\f86d"}.bi-building-fill-dash:before{content:"\f86e"}.bi-building-fill-down:before{content:"\f86f"}.bi-building-fill-exclamation:before{content:"\f870"}.bi-building-fill-gear:before{content:"\f871"}.bi-building-fill-lock:before{content:"\f872"}.bi-building-fill-slash:before{content:"\f873"}.bi-building-fill-up:before{content:"\f874"}.bi-building-fill-x:before{content:"\f875"}.bi-building-fill:before{content:"\f876"}.bi-building-gear:before{content:"\f877"}.bi-building-lock:before{content:"\f878"}.bi-building-slash:before{content:"\f879"}.bi-building-up:before{content:"\f87a"}.bi-building-x:before{content:"\f87b"}.bi-buildings-fill:before{content:"\f87c"}.bi-buildings:before{content:"\f87d"}.bi-bus-front-fill:before{content:"\f87e"}.bi-bus-front:before{content:"\f87f"}.bi-ev-front-fill:before{content:"\f880"}.bi-ev-front:before{content:"\f881"}.bi-globe-americas:before{content:"\f882"}.bi-globe-asia-australia:before{content:"\f883"}.bi-globe-central-south-asia:before{content:"\f884"}.bi-globe-europe-africa:before{content:"\f885"}.bi-house-add-fill:before{content:"\f886"}.bi-house-add:before{content:"\f887"}.bi-house-check-fill:before{content:"\f888"}.bi-house-check:before{content:"\f889"}.bi-house-dash-fill:before{content:"\f88a"}.bi-house-dash:before{content:"\f88b"}.bi-house-down-fill:before{content:"\f88c"}.bi-house-down:before{content:"\f88d"}.bi-house-exclamation-fill:before{content:"\f88e"}.bi-house-exclamation:before{content:"\f88f"}.bi-house-gear-fill:before{content:"\f890"}.bi-house-gear:before{content:"\f891"}.bi-house-lock-fill:before{content:"\f892"}.bi-house-lock:before{content:"\f893"}.bi-house-slash-fill:before{content:"\f894"}.bi-house-slash:before{content:"\f895"}.bi-house-up-fill:before{content:"\f896"}.bi-house-up:before{content:"\f897"}.bi-house-x-fill:before{content:"\f898"}.bi-house-x:before{content:"\f899"}.bi-person-add:before{content:"\f89a"}.bi-person-down:before{content:"\f89b"}.bi-person-exclamation:before{content:"\f89c"}.bi-person-fill-add:before{content:"\f89d"}.bi-person-fill-check:before{content:"\f89e"}.bi-person-fill-dash:before{content:"\f89f"}.bi-person-fill-down:before{content:"\f8a0"}.bi-person-fill-exclamation:before{content:"\f8a1"}.bi-person-fill-gear:before{content:"\f8a2"}.bi-person-fill-lock:before{content:"\f8a3"}.bi-person-fill-slash:before{content:"\f8a4"}.bi-person-fill-up:before{content:"\f8a5"}.bi-person-fill-x:before{content:"\f8a6"}.bi-person-gear:before{content:"\f8a7"}.bi-person-lock:before{content:"\f8a8"}.bi-person-slash:before{content:"\f8a9"}.bi-person-up:before{content:"\f8aa"}.bi-scooter:before{content:"\f8ab"}.bi-taxi-front-fill:before{content:"\f8ac"}.bi-taxi-front:before{content:"\f8ad"}.bi-amd:before{content:"\f8ae"}.bi-database-add:before{content:"\f8af"}.bi-database-check:before{content:"\f8b0"}.bi-database-dash:before{content:"\f8b1"}.bi-database-down:before{content:"\f8b2"}.bi-database-exclamation:before{content:"\f8b3"}.bi-database-fill-add:before{content:"\f8b4"}.bi-database-fill-check:before{content:"\f8b5"}.bi-database-fill-dash:before{content:"\f8b6"}.bi-database-fill-down:before{content:"\f8b7"}.bi-database-fill-exclamation:before{content:"\f8b8"}.bi-database-fill-gear:before{content:"\f8b9"}.bi-database-fill-lock:before{content:"\f8ba"}.bi-database-fill-slash:before{content:"\f8bb"}.bi-database-fill-up:before{content:"\f8bc"}.bi-database-fill-x:before{content:"\f8bd"}.bi-database-fill:before{content:"\f8be"}.bi-database-gear:before{content:"\f8bf"}.bi-database-lock:before{content:"\f8c0"}.bi-database-slash:before{content:"\f8c1"}.bi-database-up:before{content:"\f8c2"}.bi-database-x:before{content:"\f8c3"}.bi-database:before{content:"\f8c4"}.bi-houses-fill:before{content:"\f8c5"}.bi-houses:before{content:"\f8c6"}.bi-nvidia:before{content:"\f8c7"}.bi-person-vcard-fill:before{content:"\f8c8"}.bi-person-vcard:before{content:"\f8c9"}.bi-sina-weibo:before{content:"\f8ca"}.bi-tencent-qq:before{content:"\f8cb"}.bi-wikipedia:before{content:"\f8cc"}.bi-alphabet-uppercase:before{content:"\f2a5"}.bi-alphabet:before{content:"\f68a"}.bi-amazon:before{content:"\f68d"}.bi-arrows-collapse-vertical:before{content:"\f690"}.bi-arrows-expand-vertical:before{content:"\f695"}.bi-arrows-vertical:before{content:"\f698"}.bi-arrows:before{content:"\f6a2"}.bi-ban-fill:before{content:"\f6a3"}.bi-ban:before{content:"\f6b6"}.bi-bing:before{content:"\f6c2"}.bi-cake:before{content:"\f6e0"}.bi-cake2:before{content:"\f6ed"}.bi-cookie:before{content:"\f6ee"}.bi-copy:before{content:"\f759"}.bi-crosshair:before{content:"\f769"}.bi-crosshair2:before{content:"\f794"}.bi-emoji-astonished-fill:before{content:"\f795"}.bi-emoji-astonished:before{content:"\f79a"}.bi-emoji-grimace-fill:before{content:"\f79b"}.bi-emoji-grimace:before{content:"\f7a0"}.bi-emoji-grin-fill:before{content:"\f7a1"}.bi-emoji-grin:before{content:"\f7a6"}.bi-emoji-surprise-fill:before{content:"\f7a7"}.bi-emoji-surprise:before{content:"\f7ac"}.bi-emoji-tear-fill:before{content:"\f7ad"}.bi-emoji-tear:before{content:"\f7b2"}.bi-envelope-arrow-down-fill:before{content:"\f7b3"}.bi-envelope-arrow-down:before{content:"\f7b8"}.bi-envelope-arrow-up-fill:before{content:"\f7b9"}.bi-envelope-arrow-up:before{content:"\f7be"}.bi-feather:before{content:"\f7bf"}.bi-feather2:before{content:"\f7c4"}.bi-floppy-fill:before{content:"\f7c5"}.bi-floppy:before{content:"\f7d8"}.bi-floppy2-fill:before{content:"\f7d9"}.bi-floppy2:before{content:"\f7e4"}.bi-gitlab:before{content:"\f7e5"}.bi-highlighter:before{content:"\f7f8"}.bi-marker-tip:before{content:"\f802"}.bi-nvme-fill:before{content:"\f803"}.bi-nvme:before{content:"\f80c"}.bi-opencollective:before{content:"\f80d"}.bi-pci-card-network:before{content:"\f8cd"}.bi-pci-card-sound:before{content:"\f8ce"}.bi-radar:before{content:"\f8cf"}.bi-send-arrow-down-fill:before{content:"\f8d0"}.bi-send-arrow-down:before{content:"\f8d1"}.bi-send-arrow-up-fill:before{content:"\f8d2"}.bi-send-arrow-up:before{content:"\f8d3"}.bi-sim-slash-fill:before{content:"\f8d4"}.bi-sim-slash:before{content:"\f8d5"}.bi-sourceforge:before{content:"\f8d6"}.bi-substack:before{content:"\f8d7"}.bi-threads-fill:before{content:"\f8d8"}.bi-threads:before{content:"\f8d9"}.bi-transparency:before{content:"\f8da"}.bi-twitter-x:before{content:"\f8db"}.bi-type-h4:before{content:"\f8dc"}.bi-type-h5:before{content:"\f8dd"}.bi-type-h6:before{content:"\f8de"}.bi-backpack-fill:before{content:"\f8df"}.bi-backpack:before{content:"\f8e0"}.bi-backpack2-fill:before{content:"\f8e1"}.bi-backpack2:before{content:"\f8e2"}.bi-backpack3-fill:before{content:"\f8e3"}.bi-backpack3:before{content:"\f8e4"}.bi-backpack4-fill:before{content:"\f8e5"}.bi-backpack4:before{content:"\f8e6"}.bi-brilliance:before{content:"\f8e7"}.bi-cake-fill:before{content:"\f8e8"}.bi-cake2-fill:before{content:"\f8e9"}.bi-duffle-fill:before{content:"\f8ea"}.bi-duffle:before{content:"\f8eb"}.bi-exposure:before{content:"\f8ec"}.bi-gender-neuter:before{content:"\f8ed"}.bi-highlights:before{content:"\f8ee"}.bi-luggage-fill:before{content:"\f8ef"}.bi-luggage:before{content:"\f8f0"}.bi-mailbox-flag:before{content:"\f8f1"}.bi-mailbox2-flag:before{content:"\f8f2"}.bi-noise-reduction:before{content:"\f8f3"}.bi-passport-fill:before{content:"\f8f4"}.bi-passport:before{content:"\f8f5"}.bi-person-arms-up:before{content:"\f8f6"}.bi-person-raised-hand:before{content:"\f8f7"}.bi-person-standing-dress:before{content:"\f8f8"}.bi-person-standing:before{content:"\f8f9"}.bi-person-walking:before{content:"\f8fa"}.bi-person-wheelchair:before{content:"\f8fb"}.bi-shadows:before{content:"\f8fc"}.bi-suitcase-fill:before{content:"\f8fd"}.bi-suitcase-lg-fill:before{content:"\f8fe"}.bi-suitcase-lg:before{content:"\f8ff"}.bi-suitcase:before{content:"\f900"}.bi-suitcase2-fill:before{content:"\f901"}.bi-suitcase2:before{content:"\f902"}.bi-vignette:before{content:"\f903"}:root,[data-bs-theme=light]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: #052c65;--bs-secondary-text-emphasis: #2b2f32;--bs-success-text-emphasis: #0a3622;--bs-info-text-emphasis: #055160;--bs-warning-text-emphasis: #664d03;--bs-danger-text-emphasis: #58151c;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #cfe2ff;--bs-secondary-bg-subtle: #e2e3e5;--bs-success-bg-subtle: #d1e7dd;--bs-info-bg-subtle: #cff4fc;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #f8d7da;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #9ec5fe;--bs-secondary-border-subtle: #c4c8cb;--bs-success-border-subtle: #a3cfbb;--bs-info-border-subtle: #9eeaf9;--bs-warning-border-subtle: #ffe69c;--bs-danger-border-subtle: #f1aeb5;--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, .15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size: 1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(33, 37, 41, .75);--bs-secondary-color-rgb: 33, 37, 41;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(33, 37, 41, .5);--bs-tertiary-color-rgb: 33, 37, 41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #0d6efd;--bs-link-color-rgb: 13, 110, 253;--bs-link-decoration: underline;--bs-link-hover-color: #0a58ca;--bs-link-hover-color-rgb: 10, 88, 202;--bs-code-color: #d63384;--bs-highlight-color: #212529;--bs-highlight-bg: #fff3cd;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, .175);--bs-border-radius: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);--bs-box-shadow-sm: 0 .125rem .25rem rgba(0, 0, 0, .075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, .175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, .075);--bs-focus-ring-width: .25rem;--bs-focus-ring-opacity: .25;--bs-focus-ring-color: rgba(13, 110, 253, .25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, .75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, .5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: #6ea8fe;--bs-secondary-text-emphasis: #a7acb1;--bs-success-text-emphasis: #75b798;--bs-info-text-emphasis: #6edff6;--bs-warning-text-emphasis: #ffda6a;--bs-danger-text-emphasis: #ea868f;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #031633;--bs-secondary-bg-subtle: #161719;--bs-success-bg-subtle: #051b11;--bs-info-bg-subtle: #032830;--bs-warning-bg-subtle: #332701;--bs-danger-bg-subtle: #2c0b0e;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #084298;--bs-secondary-border-subtle: #41464b;--bs-success-border-subtle: #0f5132;--bs-info-border-subtle: #087990;--bs-warning-border-subtle: #997404;--bs-danger-border-subtle: #842029;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #6ea8fe;--bs-link-hover-color: #8bb9fe;--bs-link-color-rgb: 110, 168, 254;--bs-link-hover-color-rgb: 139, 185, 254;--bs-code-color: #e685b5;--bs-highlight-color: #dee2e6;--bs-highlight-bg: #664d03;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, .15);--bs-form-valid-color: #75b798;--bs-form-valid-border-color: #75b798;--bs-form-invalid-color: #ea868f;--bs-form-invalid-border-color: #ea868f}*,*:before,*:after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity, 1));text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled,.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer:before{content:"\2014\a0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1768px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-emphasis-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: transparent;--bs-table-striped-color: var(--bs-emphasis-color);--bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), .05);--bs-table-active-color: var(--bs-emphasis-color);--bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), .1);--bs-table-hover-color: var(--bs-emphasis-color);--bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), .075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: #cfe2ff;--bs-table-border-color: #a6b5cc;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #b5b6b7;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #a7b9b1;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #a6c3ca;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #ccc2a4;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #c6acae;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #c6c7c8;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: #4d5154;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #0d6efd40}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #0d6efd40}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control:focus~label:after,.form-floating>.form-control:not(:placeholder-shown)~label:after,.form-floating>.form-control-plaintext~label:after,.form-floating>.form-select~label:after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label:after,.form-floating>.form-control:disabled~label:after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3.75rem + 1.5em)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3.75rem + 1.5em)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130, 138, 145;--bs-btn-active-color: #fff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60, 153, 110;--bs-btn-active-color: #fff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11, 172, 204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217, 164, 6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225, 83, 97;--bs-btn-active-color: #fff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66, 70, 73;--bs-btn-active-color: #fff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-primary{--bs-btn-color: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0d6efd;--bs-btn-hover-border-color: #0d6efd;--bs-btn-focus-shadow-rgb: 13, 110, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0d6efd;--bs-btn-active-border-color: #0d6efd;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #0d6efd;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0d6efd;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108, 117, 125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25, 135, 84;--bs-btn-active-color: #fff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13, 202, 240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255, 193, 7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220, 53, 69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33, 37, 41;--bs-btn-active-color: #fff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 49, 132, 253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size: 1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .125rem;--bs-dropdown-font-size: 1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: .5rem;--bs-dropdown-box-shadow: var(--bs-box-shadow);--bs-dropdown-link-color: var(--bs-body-color);--bs-dropdown-link-hover-color: var(--bs-body-color);--bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: .25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle:after{display:none}.dropstart .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, .15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem #0d6efd40}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: var(--bs-border-color);--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: .125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: .5rem;--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), .65);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), .8);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), .3);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y: .3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), .15);--bs-navbar-toggler-border-radius: var(--bs-border-radius);--bs-navbar-toggler-focus-width: .25rem;--bs-navbar-toggler-transition: box-shadow .15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: rgba(255, 255, 255, .55);--bs-navbar-hover-color: rgba(255, 255, 255, .75);--bs-navbar-disabled-color: rgba(255, 255, 255, .25);--bs-navbar-active-color: #fff;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(255, 255, 255, .1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;inset:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, border-radius .15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform .2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--bs-accordion-btn-focus-box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed):after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button:after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}.accordion-flush>.accordion-item>.accordion-collapse{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: .5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: .75rem;--bs-pagination-padding-y: .375rem;--bs-pagination-font-size: 1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: var(--bs-body-bg);--bs-pagination-border-width: var(--bs-border-width);--bs-pagination-border-color: var(--bs-border-color);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: var(--bs-tertiary-bg);--bs-pagination-hover-border-color: var(--bs-border-color);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #0d6efd;--bs-pagination-active-border-color: #0d6efd;--bs-pagination-disabled-color: var(--bs-secondary-color);--bs-pagination-disabled-bg: var(--bs-secondary-bg);--bs-pagination-disabled-border-color: var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: .75rem;--bs-pagination-font-size: 1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size: .875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size: .75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size: .75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width .6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: .5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-tertiary-bg);--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: var(--bs-body-bg);--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #0d6efd;--bs-list-group-active-border-color: #0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: .5;--bs-btn-close-hover-opacity: .75;--bs-btn-close-focus-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: .25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white,[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size: .875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), .85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), .85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: .5rem;--bs-modal-color: ;--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: var(--bs-box-shadow-sm);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: .5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: .5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size: .875rem;--bs-tooltip-color: var(--bs-body-bg);--bs-tooltip-bg: var(--bs-emphasis-color);--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: .9;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size: .875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: var(--bs-box-shadow);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .5rem;--bs-popover-header-font-size: 1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: .5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow:before,.popover .popover-arrow:after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header:before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translate(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translate(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);--bs-offcanvas-transition: transform .3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media (max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 575.98px) and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 767.98px) and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 991.98px) and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media (max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin:calc(-.5 * var(--bs-offcanvas-padding-y)) calc(-.5 * var(--bs-offcanvas-padding-x)) calc(-.5 * var(--bs-offcanvas-padding-y)) auto}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn:before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg,#000 55%,#000c,#000 95%);mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{to{mask-position:-200% 0%}}.clearfix:after{display:block;clear:both;content:""}.text-bg-primary{color:#fff;background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity, 1))}.text-bg-secondary{color:#fff;background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity, 1))}.text-bg-success{color:#fff;background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity, 1))}.text-bg-info{color:#000;background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity, 1))}.text-bg-warning{color:#000;background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity, 1))}.text-bg-danger{color:#fff;background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity, 1))}.text-bg-light{color:#000;background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity, 1))}.text-bg-dark{color:#fff;background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity, 1))}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity, 1));text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity, 1))}.link-primary:hover,.link-primary:focus{color:RGBA(10,88,202,var(--bs-link-opacity, 1));text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity, 1))}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity, 1));text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity, 1))}.link-secondary:hover,.link-secondary:focus{color:RGBA(86,94,100,var(--bs-link-opacity, 1));text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity, 1))}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity, 1));text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity, 1))}.link-success:hover,.link-success:focus{color:RGBA(20,108,67,var(--bs-link-opacity, 1));text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity, 1))}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity, 1));text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity, 1))}.link-info:hover,.link-info:focus{color:RGBA(61,213,243,var(--bs-link-opacity, 1));text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity, 1))}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity, 1));text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity, 1))}.link-warning:hover,.link-warning:focus{color:RGBA(255,205,57,var(--bs-link-opacity, 1));text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity, 1))}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity, 1));text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity, 1))}.link-danger:hover,.link-danger:focus{color:RGBA(176,42,55,var(--bs-link-opacity, 1));text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity, 1))}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity, 1));text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity, 1))}.link-light:hover,.link-light:focus{color:RGBA(249,250,251,var(--bs-link-opacity, 1));text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity, 1))}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity, 1));text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity, 1))}.link-dark:hover,.link-dark:focus{color:RGBA(26,30,33,var(--bs-link-opacity, 1));text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity, 1))}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity, 1));text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity, 1))}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity, .75));text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity, .75))}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity, .5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media (prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio:before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute!important}.stretched-link:after{position:absolute;inset:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.align-text-bottom{vertical-align:text-bottom}.align-text-top{vertical-align:text-top}.float-start{float:left}.float-end{float:right}.float-none{float:none}.object-fit-contain{object-fit:contain}.object-fit-cover{object-fit:cover}.object-fit-fill{object-fit:fill}.object-fit-scale{object-fit:scale-down}.object-fit-none{object-fit:none}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-100{opacity:1}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-visible{overflow-x:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.overflow-y-visible{overflow-y:visible}.overflow-y-scroll{overflow-y:scroll}.d-inline{display:inline}.d-inline-block{display:inline-block}.d-block{display:block}.d-grid{display:grid}.d-inline-grid{display:inline-grid}.d-table{display:table}.d-table-row{display:table-row}.d-table-cell{display:table-cell}.d-flex{display:flex}.d-inline-flex{display:inline-flex}.d-none{display:none}.shadow{box-shadow:var(--bs-box-shadow)}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)}.shadow-none{box-shadow:none}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static}.position-relative{position:relative}.position-absolute{position:absolute}.position-fixed{position:fixed}.position-sticky{position:sticky}.top-0{top:0}.top-50{top:50%}.top-100{top:100%}.bottom-0{bottom:0}.bottom-50{bottom:50%}.bottom-100{bottom:100%}.start-0{left:0}.start-50{left:50%}.start-100{left:100%}.end-0{right:0}.end-50{right:50%}.end-100{right:100%}.translate-middle{transform:translate(-50%,-50%)}.translate-middle-x{transform:translate(-50%)}.translate-middle-y{transform:translateY(-50%)}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)}.border-0{border:0}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)}.border-top-0{border-top:0}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)}.border-end-0{border-right:0}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)}.border-bottom-0{border-bottom:0}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)}.border-start-0{border-left:0}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)}.border-success-subtle{border-color:var(--bs-success-border-subtle)}.border-info-subtle{border-color:var(--bs-info-border-subtle)}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)}.border-light-subtle{border-color:var(--bs-light-border-subtle)}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)}.border-1{border-width:1px}.border-2{border-width:2px}.border-3{border-width:3px}.border-4{border-width:4px}.border-5{border-width:5px}.border-opacity-10{--bs-border-opacity: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25%}.w-50{width:50%}.w-75{width:75%}.w-100{width:100%}.w-auto{width:auto}.mw-100{max-width:100%}.vw-100{width:100vw}.min-vw-100{min-width:100vw}.h-25{height:25%}.h-50{height:50%}.h-75{height:75%}.h-100{height:100%}.h-auto{height:auto}.mh-100{max-height:100%}.vh-100{height:100vh}.min-vh-100{min-height:100vh}.flex-fill{flex:1 1 auto}.flex-row{flex-direction:row}.flex-column{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-column-reverse{flex-direction:column-reverse}.flex-grow-0{flex-grow:0}.flex-grow-1{flex-grow:1}.flex-shrink-0{flex-shrink:0}.flex-shrink-1{flex-shrink:1}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.justify-content-start{justify-content:flex-start}.justify-content-end{justify-content:flex-end}.justify-content-center{justify-content:center}.justify-content-between{justify-content:space-between}.justify-content-around{justify-content:space-around}.justify-content-evenly{justify-content:space-evenly}.align-items-start{align-items:flex-start}.align-items-end{align-items:flex-end}.align-items-center{align-items:center}.align-items-baseline{align-items:baseline}.align-items-stretch{align-items:stretch}.align-content-start{align-content:flex-start}.align-content-end{align-content:flex-end}.align-content-center{align-content:center}.align-content-between{align-content:space-between}.align-content-around{align-content:space-around}.align-content-stretch{align-content:stretch}.align-self-auto{align-self:auto}.align-self-start{align-self:flex-start}.align-self-end{align-self:flex-end}.align-self-center{align-self:center}.align-self-baseline{align-self:baseline}.align-self-stretch{align-self:stretch}.order-first{order:-1}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-last{order:6}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:1rem}.m-4{margin:1.5rem}.m-5{margin:3rem}.m-auto{margin:auto}.mx-0{margin-right:0;margin-left:0}.mx-1{margin-right:.25rem;margin-left:.25rem}.mx-2{margin-right:.5rem;margin-left:.5rem}.mx-3{margin-right:1rem;margin-left:1rem}.mx-4{margin-right:1.5rem;margin-left:1.5rem}.mx-5{margin-right:3rem;margin-left:3rem}.mx-auto{margin-right:auto;margin-left:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:1rem;margin-bottom:1rem}.my-4{margin-top:1.5rem;margin-bottom:1.5rem}.my-5{margin-top:3rem;margin-bottom:3rem}.my-auto{margin-top:auto;margin-bottom:auto}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:1rem}.mt-4{margin-top:1.5rem}.mt-5{margin-top:3rem}.mt-auto{margin-top:auto}.me-0{margin-right:0}.me-1{margin-right:.25rem}.me-2{margin-right:.5rem}.me-3{margin-right:1rem}.me-4{margin-right:1.5rem}.me-5{margin-right:3rem}.me-auto{margin-right:auto}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:1rem}.mb-4{margin-bottom:1.5rem}.mb-5{margin-bottom:3rem}.mb-auto{margin-bottom:auto}.ms-0{margin-left:0}.ms-1{margin-left:.25rem}.ms-2{margin-left:.5rem}.ms-3{margin-left:1rem}.ms-4{margin-left:1.5rem}.ms-5{margin-left:3rem}.ms-auto{margin-left:auto}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:1rem}.p-4{padding:1.5rem}.p-5{padding:3rem}.px-0{padding-right:0;padding-left:0}.px-1{padding-right:.25rem;padding-left:.25rem}.px-2{padding-right:.5rem;padding-left:.5rem}.px-3{padding-right:1rem;padding-left:1rem}.px-4{padding-right:1.5rem;padding-left:1.5rem}.px-5{padding-right:3rem;padding-left:3rem}.py-0{padding-top:0;padding-bottom:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:1rem;padding-bottom:1rem}.py-4{padding-top:1.5rem;padding-bottom:1.5rem}.py-5{padding-top:3rem;padding-bottom:3rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:1rem}.pt-4{padding-top:1.5rem}.pt-5{padding-top:3rem}.pe-0{padding-right:0}.pe-1{padding-right:.25rem}.pe-2{padding-right:.5rem}.pe-3{padding-right:1rem}.pe-4{padding-right:1.5rem}.pe-5{padding-right:3rem}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:1rem}.pb-4{padding-bottom:1.5rem}.pb-5{padding-bottom:3rem}.ps-0{padding-left:0}.ps-1{padding-left:.25rem}.ps-2{padding-left:.5rem}.ps-3{padding-left:1rem}.ps-4{padding-left:1.5rem}.ps-5{padding-left:3rem}.gap-0{gap:0}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:1rem}.gap-4{gap:1.5rem}.gap-5{gap:3rem}.row-gap-0{row-gap:0}.row-gap-1{row-gap:.25rem}.row-gap-2{row-gap:.5rem}.row-gap-3{row-gap:1rem}.row-gap-4{row-gap:1.5rem}.row-gap-5{row-gap:3rem}.column-gap-0{column-gap:0}.column-gap-1{column-gap:.25rem}.column-gap-2{column-gap:.5rem}.column-gap-3{column-gap:1rem}.column-gap-4{column-gap:1.5rem}.column-gap-5{column-gap:3rem}.font-monospace{font-family:var(--bs-font-monospace)}.fs-1{font-size:calc(1.375rem + 1.5vw)}.fs-2{font-size:calc(1.325rem + .9vw)}.fs-3{font-size:calc(1.3rem + .6vw)}.fs-4{font-size:calc(1.275rem + .3vw)}.fs-5{font-size:1.25rem}.fs-6{font-size:1rem}.fst-italic{font-style:italic}.fst-normal{font-style:normal}.fw-lighter{font-weight:lighter}.fw-light{font-weight:300}.fw-normal{font-weight:400}.fw-medium{font-weight:500}.fw-semibold{font-weight:600}.fw-bold{font-weight:700}.fw-bolder{font-weight:bolder}.lh-1{line-height:1}.lh-sm{line-height:1.25}.lh-base{line-height:1.5}.lh-lg{line-height:2}.text-start{text-align:left}.text-end{text-align:right}.text-center{text-align:center}.text-decoration-none{text-decoration:none}.text-decoration-underline{text-decoration:underline}.text-decoration-line-through{text-decoration:line-through}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-wrap{white-space:normal}.text-nowrap{white-space:nowrap}.text-break{word-wrap:break-word;word-break:break-word}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color)}.text-black-50{--bs-text-opacity: 1;color:#00000080}.text-white-50{--bs-text-opacity: 1;color:#ffffff80}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color)}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color)}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color)}.text-reset{--bs-text-opacity: 1;color:inherit}.text-opacity-25{--bs-text-opacity: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)}.text-success-emphasis{color:var(--bs-success-text-emphasis)}.text-info-emphasis{color:var(--bs-info-text-emphasis)}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)}.text-light-emphasis{color:var(--bs-light-text-emphasis)}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)}.link-opacity-10,.link-opacity-10-hover:hover{--bs-link-opacity: .1}.link-opacity-25,.link-opacity-25-hover:hover{--bs-link-opacity: .25}.link-opacity-50,.link-opacity-50-hover:hover{--bs-link-opacity: .5}.link-opacity-75,.link-opacity-75-hover:hover{--bs-link-opacity: .75}.link-opacity-100,.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity, 1))}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: .1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: .25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: .5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: .75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))}.bg-transparent{--bs-bg-opacity: 1;background-color:transparent}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))}.bg-opacity-10{--bs-bg-opacity: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)}.bg-gradient{background-image:var(--bs-gradient)}.user-select-all{user-select:all}.user-select-auto{user-select:auto}.user-select-none{user-select:none}.pe-none{pointer-events:none}.pe-auto{pointer-events:auto}.rounded{border-radius:var(--bs-border-radius)}.rounded-0{border-radius:0}.rounded-1{border-radius:var(--bs-border-radius-sm)}.rounded-2{border-radius:var(--bs-border-radius)}.rounded-3{border-radius:var(--bs-border-radius-lg)}.rounded-4{border-radius:var(--bs-border-radius-xl)}.rounded-5{border-radius:var(--bs-border-radius-xxl)}.rounded-circle{border-radius:50%}.rounded-pill{border-radius:var(--bs-border-radius-pill)}.rounded-top{border-top-left-radius:var(--bs-border-radius);border-top-right-radius:var(--bs-border-radius)}.rounded-top-0{border-top-left-radius:0;border-top-right-radius:0}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm);border-top-right-radius:var(--bs-border-radius-sm)}.rounded-top-2{border-top-left-radius:var(--bs-border-radius);border-top-right-radius:var(--bs-border-radius)}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg);border-top-right-radius:var(--bs-border-radius-lg)}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl);border-top-right-radius:var(--bs-border-radius-xl)}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl);border-top-right-radius:var(--bs-border-radius-xxl)}.rounded-top-circle{border-top-left-radius:50%;border-top-right-radius:50%}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill);border-top-right-radius:var(--bs-border-radius-pill)}.rounded-end{border-top-right-radius:var(--bs-border-radius);border-bottom-right-radius:var(--bs-border-radius)}.rounded-end-0{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm);border-bottom-right-radius:var(--bs-border-radius-sm)}.rounded-end-2{border-top-right-radius:var(--bs-border-radius);border-bottom-right-radius:var(--bs-border-radius)}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg);border-bottom-right-radius:var(--bs-border-radius-lg)}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl);border-bottom-right-radius:var(--bs-border-radius-xl)}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl);border-bottom-right-radius:var(--bs-border-radius-xxl)}.rounded-end-circle{border-top-right-radius:50%;border-bottom-right-radius:50%}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill);border-bottom-right-radius:var(--bs-border-radius-pill)}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius);border-bottom-left-radius:var(--bs-border-radius)}.rounded-bottom-0{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm);border-bottom-left-radius:var(--bs-border-radius-sm)}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius);border-bottom-left-radius:var(--bs-border-radius)}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg);border-bottom-left-radius:var(--bs-border-radius-lg)}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl);border-bottom-left-radius:var(--bs-border-radius-xl)}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl);border-bottom-left-radius:var(--bs-border-radius-xxl)}.rounded-bottom-circle{border-bottom-right-radius:50%;border-bottom-left-radius:50%}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill);border-bottom-left-radius:var(--bs-border-radius-pill)}.rounded-start{border-bottom-left-radius:var(--bs-border-radius);border-top-left-radius:var(--bs-border-radius)}.rounded-start-0{border-bottom-left-radius:0;border-top-left-radius:0}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm);border-top-left-radius:var(--bs-border-radius-sm)}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius);border-top-left-radius:var(--bs-border-radius)}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg);border-top-left-radius:var(--bs-border-radius-lg)}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl);border-top-left-radius:var(--bs-border-radius-xl)}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl);border-top-left-radius:var(--bs-border-radius-xxl)}.rounded-start-circle{border-bottom-left-radius:50%;border-top-left-radius:50%}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill);border-top-left-radius:var(--bs-border-radius-pill)}.visible{visibility:visible}.invisible{visibility:hidden}.z-n1{z-index:-1}.z-0{z-index:0}.z-1{z-index:1}.z-2{z-index:2}.z-3{z-index:3}@media (min-width: 576px){.float-sm-start{float:left}.float-sm-end{float:right}.float-sm-none{float:none}.object-fit-sm-contain{object-fit:contain}.object-fit-sm-cover{object-fit:cover}.object-fit-sm-fill{object-fit:fill}.object-fit-sm-scale{object-fit:scale-down}.object-fit-sm-none{object-fit:none}.d-sm-inline{display:inline}.d-sm-inline-block{display:inline-block}.d-sm-block{display:block}.d-sm-grid{display:grid}.d-sm-inline-grid{display:inline-grid}.d-sm-table{display:table}.d-sm-table-row{display:table-row}.d-sm-table-cell{display:table-cell}.d-sm-flex{display:flex}.d-sm-inline-flex{display:inline-flex}.d-sm-none{display:none}.flex-sm-fill{flex:1 1 auto}.flex-sm-row{flex-direction:row}.flex-sm-column{flex-direction:column}.flex-sm-row-reverse{flex-direction:row-reverse}.flex-sm-column-reverse{flex-direction:column-reverse}.flex-sm-grow-0{flex-grow:0}.flex-sm-grow-1{flex-grow:1}.flex-sm-shrink-0{flex-shrink:0}.flex-sm-shrink-1{flex-shrink:1}.flex-sm-wrap{flex-wrap:wrap}.flex-sm-nowrap{flex-wrap:nowrap}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse}.justify-content-sm-start{justify-content:flex-start}.justify-content-sm-end{justify-content:flex-end}.justify-content-sm-center{justify-content:center}.justify-content-sm-between{justify-content:space-between}.justify-content-sm-around{justify-content:space-around}.justify-content-sm-evenly{justify-content:space-evenly}.align-items-sm-start{align-items:flex-start}.align-items-sm-end{align-items:flex-end}.align-items-sm-center{align-items:center}.align-items-sm-baseline{align-items:baseline}.align-items-sm-stretch{align-items:stretch}.align-content-sm-start{align-content:flex-start}.align-content-sm-end{align-content:flex-end}.align-content-sm-center{align-content:center}.align-content-sm-between{align-content:space-between}.align-content-sm-around{align-content:space-around}.align-content-sm-stretch{align-content:stretch}.align-self-sm-auto{align-self:auto}.align-self-sm-start{align-self:flex-start}.align-self-sm-end{align-self:flex-end}.align-self-sm-center{align-self:center}.align-self-sm-baseline{align-self:baseline}.align-self-sm-stretch{align-self:stretch}.order-sm-first{order:-1}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-last{order:6}.m-sm-0{margin:0}.m-sm-1{margin:.25rem}.m-sm-2{margin:.5rem}.m-sm-3{margin:1rem}.m-sm-4{margin:1.5rem}.m-sm-5{margin:3rem}.m-sm-auto{margin:auto}.mx-sm-0{margin-right:0;margin-left:0}.mx-sm-1{margin-right:.25rem;margin-left:.25rem}.mx-sm-2{margin-right:.5rem;margin-left:.5rem}.mx-sm-3{margin-right:1rem;margin-left:1rem}.mx-sm-4{margin-right:1.5rem;margin-left:1.5rem}.mx-sm-5{margin-right:3rem;margin-left:3rem}.mx-sm-auto{margin-right:auto;margin-left:auto}.my-sm-0{margin-top:0;margin-bottom:0}.my-sm-1{margin-top:.25rem;margin-bottom:.25rem}.my-sm-2{margin-top:.5rem;margin-bottom:.5rem}.my-sm-3{margin-top:1rem;margin-bottom:1rem}.my-sm-4{margin-top:1.5rem;margin-bottom:1.5rem}.my-sm-5{margin-top:3rem;margin-bottom:3rem}.my-sm-auto{margin-top:auto;margin-bottom:auto}.mt-sm-0{margin-top:0}.mt-sm-1{margin-top:.25rem}.mt-sm-2{margin-top:.5rem}.mt-sm-3{margin-top:1rem}.mt-sm-4{margin-top:1.5rem}.mt-sm-5{margin-top:3rem}.mt-sm-auto{margin-top:auto}.me-sm-0{margin-right:0}.me-sm-1{margin-right:.25rem}.me-sm-2{margin-right:.5rem}.me-sm-3{margin-right:1rem}.me-sm-4{margin-right:1.5rem}.me-sm-5{margin-right:3rem}.me-sm-auto{margin-right:auto}.mb-sm-0{margin-bottom:0}.mb-sm-1{margin-bottom:.25rem}.mb-sm-2{margin-bottom:.5rem}.mb-sm-3{margin-bottom:1rem}.mb-sm-4{margin-bottom:1.5rem}.mb-sm-5{margin-bottom:3rem}.mb-sm-auto{margin-bottom:auto}.ms-sm-0{margin-left:0}.ms-sm-1{margin-left:.25rem}.ms-sm-2{margin-left:.5rem}.ms-sm-3{margin-left:1rem}.ms-sm-4{margin-left:1.5rem}.ms-sm-5{margin-left:3rem}.ms-sm-auto{margin-left:auto}.p-sm-0{padding:0}.p-sm-1{padding:.25rem}.p-sm-2{padding:.5rem}.p-sm-3{padding:1rem}.p-sm-4{padding:1.5rem}.p-sm-5{padding:3rem}.px-sm-0{padding-right:0;padding-left:0}.px-sm-1{padding-right:.25rem;padding-left:.25rem}.px-sm-2{padding-right:.5rem;padding-left:.5rem}.px-sm-3{padding-right:1rem;padding-left:1rem}.px-sm-4{padding-right:1.5rem;padding-left:1.5rem}.px-sm-5{padding-right:3rem;padding-left:3rem}.py-sm-0{padding-top:0;padding-bottom:0}.py-sm-1{padding-top:.25rem;padding-bottom:.25rem}.py-sm-2{padding-top:.5rem;padding-bottom:.5rem}.py-sm-3{padding-top:1rem;padding-bottom:1rem}.py-sm-4{padding-top:1.5rem;padding-bottom:1.5rem}.py-sm-5{padding-top:3rem;padding-bottom:3rem}.pt-sm-0{padding-top:0}.pt-sm-1{padding-top:.25rem}.pt-sm-2{padding-top:.5rem}.pt-sm-3{padding-top:1rem}.pt-sm-4{padding-top:1.5rem}.pt-sm-5{padding-top:3rem}.pe-sm-0{padding-right:0}.pe-sm-1{padding-right:.25rem}.pe-sm-2{padding-right:.5rem}.pe-sm-3{padding-right:1rem}.pe-sm-4{padding-right:1.5rem}.pe-sm-5{padding-right:3rem}.pb-sm-0{padding-bottom:0}.pb-sm-1{padding-bottom:.25rem}.pb-sm-2{padding-bottom:.5rem}.pb-sm-3{padding-bottom:1rem}.pb-sm-4{padding-bottom:1.5rem}.pb-sm-5{padding-bottom:3rem}.ps-sm-0{padding-left:0}.ps-sm-1{padding-left:.25rem}.ps-sm-2{padding-left:.5rem}.ps-sm-3{padding-left:1rem}.ps-sm-4{padding-left:1.5rem}.ps-sm-5{padding-left:3rem}.gap-sm-0{gap:0}.gap-sm-1{gap:.25rem}.gap-sm-2{gap:.5rem}.gap-sm-3{gap:1rem}.gap-sm-4{gap:1.5rem}.gap-sm-5{gap:3rem}.row-gap-sm-0{row-gap:0}.row-gap-sm-1{row-gap:.25rem}.row-gap-sm-2{row-gap:.5rem}.row-gap-sm-3{row-gap:1rem}.row-gap-sm-4{row-gap:1.5rem}.row-gap-sm-5{row-gap:3rem}.column-gap-sm-0{column-gap:0}.column-gap-sm-1{column-gap:.25rem}.column-gap-sm-2{column-gap:.5rem}.column-gap-sm-3{column-gap:1rem}.column-gap-sm-4{column-gap:1.5rem}.column-gap-sm-5{column-gap:3rem}.text-sm-start{text-align:left}.text-sm-end{text-align:right}.text-sm-center{text-align:center}}@media (min-width: 768px){.float-md-start{float:left}.float-md-end{float:right}.float-md-none{float:none}.object-fit-md-contain{object-fit:contain}.object-fit-md-cover{object-fit:cover}.object-fit-md-fill{object-fit:fill}.object-fit-md-scale{object-fit:scale-down}.object-fit-md-none{object-fit:none}.d-md-inline{display:inline}.d-md-inline-block{display:inline-block}.d-md-block{display:block}.d-md-grid{display:grid}.d-md-inline-grid{display:inline-grid}.d-md-table{display:table}.d-md-table-row{display:table-row}.d-md-table-cell{display:table-cell}.d-md-flex{display:flex}.d-md-inline-flex{display:inline-flex}.d-md-none{display:none}.flex-md-fill{flex:1 1 auto}.flex-md-row{flex-direction:row}.flex-md-column{flex-direction:column}.flex-md-row-reverse{flex-direction:row-reverse}.flex-md-column-reverse{flex-direction:column-reverse}.flex-md-grow-0{flex-grow:0}.flex-md-grow-1{flex-grow:1}.flex-md-shrink-0{flex-shrink:0}.flex-md-shrink-1{flex-shrink:1}.flex-md-wrap{flex-wrap:wrap}.flex-md-nowrap{flex-wrap:nowrap}.flex-md-wrap-reverse{flex-wrap:wrap-reverse}.justify-content-md-start{justify-content:flex-start}.justify-content-md-end{justify-content:flex-end}.justify-content-md-center{justify-content:center}.justify-content-md-between{justify-content:space-between}.justify-content-md-around{justify-content:space-around}.justify-content-md-evenly{justify-content:space-evenly}.align-items-md-start{align-items:flex-start}.align-items-md-end{align-items:flex-end}.align-items-md-center{align-items:center}.align-items-md-baseline{align-items:baseline}.align-items-md-stretch{align-items:stretch}.align-content-md-start{align-content:flex-start}.align-content-md-end{align-content:flex-end}.align-content-md-center{align-content:center}.align-content-md-between{align-content:space-between}.align-content-md-around{align-content:space-around}.align-content-md-stretch{align-content:stretch}.align-self-md-auto{align-self:auto}.align-self-md-start{align-self:flex-start}.align-self-md-end{align-self:flex-end}.align-self-md-center{align-self:center}.align-self-md-baseline{align-self:baseline}.align-self-md-stretch{align-self:stretch}.order-md-first{order:-1}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-last{order:6}.m-md-0{margin:0}.m-md-1{margin:.25rem}.m-md-2{margin:.5rem}.m-md-3{margin:1rem}.m-md-4{margin:1.5rem}.m-md-5{margin:3rem}.m-md-auto{margin:auto}.mx-md-0{margin-right:0;margin-left:0}.mx-md-1{margin-right:.25rem;margin-left:.25rem}.mx-md-2{margin-right:.5rem;margin-left:.5rem}.mx-md-3{margin-right:1rem;margin-left:1rem}.mx-md-4{margin-right:1.5rem;margin-left:1.5rem}.mx-md-5{margin-right:3rem;margin-left:3rem}.mx-md-auto{margin-right:auto;margin-left:auto}.my-md-0{margin-top:0;margin-bottom:0}.my-md-1{margin-top:.25rem;margin-bottom:.25rem}.my-md-2{margin-top:.5rem;margin-bottom:.5rem}.my-md-3{margin-top:1rem;margin-bottom:1rem}.my-md-4{margin-top:1.5rem;margin-bottom:1.5rem}.my-md-5{margin-top:3rem;margin-bottom:3rem}.my-md-auto{margin-top:auto;margin-bottom:auto}.mt-md-0{margin-top:0}.mt-md-1{margin-top:.25rem}.mt-md-2{margin-top:.5rem}.mt-md-3{margin-top:1rem}.mt-md-4{margin-top:1.5rem}.mt-md-5{margin-top:3rem}.mt-md-auto{margin-top:auto}.me-md-0{margin-right:0}.me-md-1{margin-right:.25rem}.me-md-2{margin-right:.5rem}.me-md-3{margin-right:1rem}.me-md-4{margin-right:1.5rem}.me-md-5{margin-right:3rem}.me-md-auto{margin-right:auto}.mb-md-0{margin-bottom:0}.mb-md-1{margin-bottom:.25rem}.mb-md-2{margin-bottom:.5rem}.mb-md-3{margin-bottom:1rem}.mb-md-4{margin-bottom:1.5rem}.mb-md-5{margin-bottom:3rem}.mb-md-auto{margin-bottom:auto}.ms-md-0{margin-left:0}.ms-md-1{margin-left:.25rem}.ms-md-2{margin-left:.5rem}.ms-md-3{margin-left:1rem}.ms-md-4{margin-left:1.5rem}.ms-md-5{margin-left:3rem}.ms-md-auto{margin-left:auto}.p-md-0{padding:0}.p-md-1{padding:.25rem}.p-md-2{padding:.5rem}.p-md-3{padding:1rem}.p-md-4{padding:1.5rem}.p-md-5{padding:3rem}.px-md-0{padding-right:0;padding-left:0}.px-md-1{padding-right:.25rem;padding-left:.25rem}.px-md-2{padding-right:.5rem;padding-left:.5rem}.px-md-3{padding-right:1rem;padding-left:1rem}.px-md-4{padding-right:1.5rem;padding-left:1.5rem}.px-md-5{padding-right:3rem;padding-left:3rem}.py-md-0{padding-top:0;padding-bottom:0}.py-md-1{padding-top:.25rem;padding-bottom:.25rem}.py-md-2{padding-top:.5rem;padding-bottom:.5rem}.py-md-3{padding-top:1rem;padding-bottom:1rem}.py-md-4{padding-top:1.5rem;padding-bottom:1.5rem}.py-md-5{padding-top:3rem;padding-bottom:3rem}.pt-md-0{padding-top:0}.pt-md-1{padding-top:.25rem}.pt-md-2{padding-top:.5rem}.pt-md-3{padding-top:1rem}.pt-md-4{padding-top:1.5rem}.pt-md-5{padding-top:3rem}.pe-md-0{padding-right:0}.pe-md-1{padding-right:.25rem}.pe-md-2{padding-right:.5rem}.pe-md-3{padding-right:1rem}.pe-md-4{padding-right:1.5rem}.pe-md-5{padding-right:3rem}.pb-md-0{padding-bottom:0}.pb-md-1{padding-bottom:.25rem}.pb-md-2{padding-bottom:.5rem}.pb-md-3{padding-bottom:1rem}.pb-md-4{padding-bottom:1.5rem}.pb-md-5{padding-bottom:3rem}.ps-md-0{padding-left:0}.ps-md-1{padding-left:.25rem}.ps-md-2{padding-left:.5rem}.ps-md-3{padding-left:1rem}.ps-md-4{padding-left:1.5rem}.ps-md-5{padding-left:3rem}.gap-md-0{gap:0}.gap-md-1{gap:.25rem}.gap-md-2{gap:.5rem}.gap-md-3{gap:1rem}.gap-md-4{gap:1.5rem}.gap-md-5{gap:3rem}.row-gap-md-0{row-gap:0}.row-gap-md-1{row-gap:.25rem}.row-gap-md-2{row-gap:.5rem}.row-gap-md-3{row-gap:1rem}.row-gap-md-4{row-gap:1.5rem}.row-gap-md-5{row-gap:3rem}.column-gap-md-0{column-gap:0}.column-gap-md-1{column-gap:.25rem}.column-gap-md-2{column-gap:.5rem}.column-gap-md-3{column-gap:1rem}.column-gap-md-4{column-gap:1.5rem}.column-gap-md-5{column-gap:3rem}.text-md-start{text-align:left}.text-md-end{text-align:right}.text-md-center{text-align:center}}@media (min-width: 992px){.float-lg-start{float:left}.float-lg-end{float:right}.float-lg-none{float:none}.object-fit-lg-contain{object-fit:contain}.object-fit-lg-cover{object-fit:cover}.object-fit-lg-fill{object-fit:fill}.object-fit-lg-scale{object-fit:scale-down}.object-fit-lg-none{object-fit:none}.d-lg-inline{display:inline}.d-lg-inline-block{display:inline-block}.d-lg-block{display:block}.d-lg-grid{display:grid}.d-lg-inline-grid{display:inline-grid}.d-lg-table{display:table}.d-lg-table-row{display:table-row}.d-lg-table-cell{display:table-cell}.d-lg-flex{display:flex}.d-lg-inline-flex{display:inline-flex}.d-lg-none{display:none}.flex-lg-fill{flex:1 1 auto}.flex-lg-row{flex-direction:row}.flex-lg-column{flex-direction:column}.flex-lg-row-reverse{flex-direction:row-reverse}.flex-lg-column-reverse{flex-direction:column-reverse}.flex-lg-grow-0{flex-grow:0}.flex-lg-grow-1{flex-grow:1}.flex-lg-shrink-0{flex-shrink:0}.flex-lg-shrink-1{flex-shrink:1}.flex-lg-wrap{flex-wrap:wrap}.flex-lg-nowrap{flex-wrap:nowrap}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse}.justify-content-lg-start{justify-content:flex-start}.justify-content-lg-end{justify-content:flex-end}.justify-content-lg-center{justify-content:center}.justify-content-lg-between{justify-content:space-between}.justify-content-lg-around{justify-content:space-around}.justify-content-lg-evenly{justify-content:space-evenly}.align-items-lg-start{align-items:flex-start}.align-items-lg-end{align-items:flex-end}.align-items-lg-center{align-items:center}.align-items-lg-baseline{align-items:baseline}.align-items-lg-stretch{align-items:stretch}.align-content-lg-start{align-content:flex-start}.align-content-lg-end{align-content:flex-end}.align-content-lg-center{align-content:center}.align-content-lg-between{align-content:space-between}.align-content-lg-around{align-content:space-around}.align-content-lg-stretch{align-content:stretch}.align-self-lg-auto{align-self:auto}.align-self-lg-start{align-self:flex-start}.align-self-lg-end{align-self:flex-end}.align-self-lg-center{align-self:center}.align-self-lg-baseline{align-self:baseline}.align-self-lg-stretch{align-self:stretch}.order-lg-first{order:-1}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-last{order:6}.m-lg-0{margin:0}.m-lg-1{margin:.25rem}.m-lg-2{margin:.5rem}.m-lg-3{margin:1rem}.m-lg-4{margin:1.5rem}.m-lg-5{margin:3rem}.m-lg-auto{margin:auto}.mx-lg-0{margin-right:0;margin-left:0}.mx-lg-1{margin-right:.25rem;margin-left:.25rem}.mx-lg-2{margin-right:.5rem;margin-left:.5rem}.mx-lg-3{margin-right:1rem;margin-left:1rem}.mx-lg-4{margin-right:1.5rem;margin-left:1.5rem}.mx-lg-5{margin-right:3rem;margin-left:3rem}.mx-lg-auto{margin-right:auto;margin-left:auto}.my-lg-0{margin-top:0;margin-bottom:0}.my-lg-1{margin-top:.25rem;margin-bottom:.25rem}.my-lg-2{margin-top:.5rem;margin-bottom:.5rem}.my-lg-3{margin-top:1rem;margin-bottom:1rem}.my-lg-4{margin-top:1.5rem;margin-bottom:1.5rem}.my-lg-5{margin-top:3rem;margin-bottom:3rem}.my-lg-auto{margin-top:auto;margin-bottom:auto}.mt-lg-0{margin-top:0}.mt-lg-1{margin-top:.25rem}.mt-lg-2{margin-top:.5rem}.mt-lg-3{margin-top:1rem}.mt-lg-4{margin-top:1.5rem}.mt-lg-5{margin-top:3rem}.mt-lg-auto{margin-top:auto}.me-lg-0{margin-right:0}.me-lg-1{margin-right:.25rem}.me-lg-2{margin-right:.5rem}.me-lg-3{margin-right:1rem}.me-lg-4{margin-right:1.5rem}.me-lg-5{margin-right:3rem}.me-lg-auto{margin-right:auto}.mb-lg-0{margin-bottom:0}.mb-lg-1{margin-bottom:.25rem}.mb-lg-2{margin-bottom:.5rem}.mb-lg-3{margin-bottom:1rem}.mb-lg-4{margin-bottom:1.5rem}.mb-lg-5{margin-bottom:3rem}.mb-lg-auto{margin-bottom:auto}.ms-lg-0{margin-left:0}.ms-lg-1{margin-left:.25rem}.ms-lg-2{margin-left:.5rem}.ms-lg-3{margin-left:1rem}.ms-lg-4{margin-left:1.5rem}.ms-lg-5{margin-left:3rem}.ms-lg-auto{margin-left:auto}.p-lg-0{padding:0}.p-lg-1{padding:.25rem}.p-lg-2{padding:.5rem}.p-lg-3{padding:1rem}.p-lg-4{padding:1.5rem}.p-lg-5{padding:3rem}.px-lg-0{padding-right:0;padding-left:0}.px-lg-1{padding-right:.25rem;padding-left:.25rem}.px-lg-2{padding-right:.5rem;padding-left:.5rem}.px-lg-3{padding-right:1rem;padding-left:1rem}.px-lg-4{padding-right:1.5rem;padding-left:1.5rem}.px-lg-5{padding-right:3rem;padding-left:3rem}.py-lg-0{padding-top:0;padding-bottom:0}.py-lg-1{padding-top:.25rem;padding-bottom:.25rem}.py-lg-2{padding-top:.5rem;padding-bottom:.5rem}.py-lg-3{padding-top:1rem;padding-bottom:1rem}.py-lg-4{padding-top:1.5rem;padding-bottom:1.5rem}.py-lg-5{padding-top:3rem;padding-bottom:3rem}.pt-lg-0{padding-top:0}.pt-lg-1{padding-top:.25rem}.pt-lg-2{padding-top:.5rem}.pt-lg-3{padding-top:1rem}.pt-lg-4{padding-top:1.5rem}.pt-lg-5{padding-top:3rem}.pe-lg-0{padding-right:0}.pe-lg-1{padding-right:.25rem}.pe-lg-2{padding-right:.5rem}.pe-lg-3{padding-right:1rem}.pe-lg-4{padding-right:1.5rem}.pe-lg-5{padding-right:3rem}.pb-lg-0{padding-bottom:0}.pb-lg-1{padding-bottom:.25rem}.pb-lg-2{padding-bottom:.5rem}.pb-lg-3{padding-bottom:1rem}.pb-lg-4{padding-bottom:1.5rem}.pb-lg-5{padding-bottom:3rem}.ps-lg-0{padding-left:0}.ps-lg-1{padding-left:.25rem}.ps-lg-2{padding-left:.5rem}.ps-lg-3{padding-left:1rem}.ps-lg-4{padding-left:1.5rem}.ps-lg-5{padding-left:3rem}.gap-lg-0{gap:0}.gap-lg-1{gap:.25rem}.gap-lg-2{gap:.5rem}.gap-lg-3{gap:1rem}.gap-lg-4{gap:1.5rem}.gap-lg-5{gap:3rem}.row-gap-lg-0{row-gap:0}.row-gap-lg-1{row-gap:.25rem}.row-gap-lg-2{row-gap:.5rem}.row-gap-lg-3{row-gap:1rem}.row-gap-lg-4{row-gap:1.5rem}.row-gap-lg-5{row-gap:3rem}.column-gap-lg-0{column-gap:0}.column-gap-lg-1{column-gap:.25rem}.column-gap-lg-2{column-gap:.5rem}.column-gap-lg-3{column-gap:1rem}.column-gap-lg-4{column-gap:1.5rem}.column-gap-lg-5{column-gap:3rem}.text-lg-start{text-align:left}.text-lg-end{text-align:right}.text-lg-center{text-align:center}}@media (min-width: 1200px){.float-xl-start{float:left}.float-xl-end{float:right}.float-xl-none{float:none}.object-fit-xl-contain{object-fit:contain}.object-fit-xl-cover{object-fit:cover}.object-fit-xl-fill{object-fit:fill}.object-fit-xl-scale{object-fit:scale-down}.object-fit-xl-none{object-fit:none}.d-xl-inline{display:inline}.d-xl-inline-block{display:inline-block}.d-xl-block{display:block}.d-xl-grid{display:grid}.d-xl-inline-grid{display:inline-grid}.d-xl-table{display:table}.d-xl-table-row{display:table-row}.d-xl-table-cell{display:table-cell}.d-xl-flex{display:flex}.d-xl-inline-flex{display:inline-flex}.d-xl-none{display:none}.flex-xl-fill{flex:1 1 auto}.flex-xl-row{flex-direction:row}.flex-xl-column{flex-direction:column}.flex-xl-row-reverse{flex-direction:row-reverse}.flex-xl-column-reverse{flex-direction:column-reverse}.flex-xl-grow-0{flex-grow:0}.flex-xl-grow-1{flex-grow:1}.flex-xl-shrink-0{flex-shrink:0}.flex-xl-shrink-1{flex-shrink:1}.flex-xl-wrap{flex-wrap:wrap}.flex-xl-nowrap{flex-wrap:nowrap}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse}.justify-content-xl-start{justify-content:flex-start}.justify-content-xl-end{justify-content:flex-end}.justify-content-xl-center{justify-content:center}.justify-content-xl-between{justify-content:space-between}.justify-content-xl-around{justify-content:space-around}.justify-content-xl-evenly{justify-content:space-evenly}.align-items-xl-start{align-items:flex-start}.align-items-xl-end{align-items:flex-end}.align-items-xl-center{align-items:center}.align-items-xl-baseline{align-items:baseline}.align-items-xl-stretch{align-items:stretch}.align-content-xl-start{align-content:flex-start}.align-content-xl-end{align-content:flex-end}.align-content-xl-center{align-content:center}.align-content-xl-between{align-content:space-between}.align-content-xl-around{align-content:space-around}.align-content-xl-stretch{align-content:stretch}.align-self-xl-auto{align-self:auto}.align-self-xl-start{align-self:flex-start}.align-self-xl-end{align-self:flex-end}.align-self-xl-center{align-self:center}.align-self-xl-baseline{align-self:baseline}.align-self-xl-stretch{align-self:stretch}.order-xl-first{order:-1}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-last{order:6}.m-xl-0{margin:0}.m-xl-1{margin:.25rem}.m-xl-2{margin:.5rem}.m-xl-3{margin:1rem}.m-xl-4{margin:1.5rem}.m-xl-5{margin:3rem}.m-xl-auto{margin:auto}.mx-xl-0{margin-right:0;margin-left:0}.mx-xl-1{margin-right:.25rem;margin-left:.25rem}.mx-xl-2{margin-right:.5rem;margin-left:.5rem}.mx-xl-3{margin-right:1rem;margin-left:1rem}.mx-xl-4{margin-right:1.5rem;margin-left:1.5rem}.mx-xl-5{margin-right:3rem;margin-left:3rem}.mx-xl-auto{margin-right:auto;margin-left:auto}.my-xl-0{margin-top:0;margin-bottom:0}.my-xl-1{margin-top:.25rem;margin-bottom:.25rem}.my-xl-2{margin-top:.5rem;margin-bottom:.5rem}.my-xl-3{margin-top:1rem;margin-bottom:1rem}.my-xl-4{margin-top:1.5rem;margin-bottom:1.5rem}.my-xl-5{margin-top:3rem;margin-bottom:3rem}.my-xl-auto{margin-top:auto;margin-bottom:auto}.mt-xl-0{margin-top:0}.mt-xl-1{margin-top:.25rem}.mt-xl-2{margin-top:.5rem}.mt-xl-3{margin-top:1rem}.mt-xl-4{margin-top:1.5rem}.mt-xl-5{margin-top:3rem}.mt-xl-auto{margin-top:auto}.me-xl-0{margin-right:0}.me-xl-1{margin-right:.25rem}.me-xl-2{margin-right:.5rem}.me-xl-3{margin-right:1rem}.me-xl-4{margin-right:1.5rem}.me-xl-5{margin-right:3rem}.me-xl-auto{margin-right:auto}.mb-xl-0{margin-bottom:0}.mb-xl-1{margin-bottom:.25rem}.mb-xl-2{margin-bottom:.5rem}.mb-xl-3{margin-bottom:1rem}.mb-xl-4{margin-bottom:1.5rem}.mb-xl-5{margin-bottom:3rem}.mb-xl-auto{margin-bottom:auto}.ms-xl-0{margin-left:0}.ms-xl-1{margin-left:.25rem}.ms-xl-2{margin-left:.5rem}.ms-xl-3{margin-left:1rem}.ms-xl-4{margin-left:1.5rem}.ms-xl-5{margin-left:3rem}.ms-xl-auto{margin-left:auto}.p-xl-0{padding:0}.p-xl-1{padding:.25rem}.p-xl-2{padding:.5rem}.p-xl-3{padding:1rem}.p-xl-4{padding:1.5rem}.p-xl-5{padding:3rem}.px-xl-0{padding-right:0;padding-left:0}.px-xl-1{padding-right:.25rem;padding-left:.25rem}.px-xl-2{padding-right:.5rem;padding-left:.5rem}.px-xl-3{padding-right:1rem;padding-left:1rem}.px-xl-4{padding-right:1.5rem;padding-left:1.5rem}.px-xl-5{padding-right:3rem;padding-left:3rem}.py-xl-0{padding-top:0;padding-bottom:0}.py-xl-1{padding-top:.25rem;padding-bottom:.25rem}.py-xl-2{padding-top:.5rem;padding-bottom:.5rem}.py-xl-3{padding-top:1rem;padding-bottom:1rem}.py-xl-4{padding-top:1.5rem;padding-bottom:1.5rem}.py-xl-5{padding-top:3rem;padding-bottom:3rem}.pt-xl-0{padding-top:0}.pt-xl-1{padding-top:.25rem}.pt-xl-2{padding-top:.5rem}.pt-xl-3{padding-top:1rem}.pt-xl-4{padding-top:1.5rem}.pt-xl-5{padding-top:3rem}.pe-xl-0{padding-right:0}.pe-xl-1{padding-right:.25rem}.pe-xl-2{padding-right:.5rem}.pe-xl-3{padding-right:1rem}.pe-xl-4{padding-right:1.5rem}.pe-xl-5{padding-right:3rem}.pb-xl-0{padding-bottom:0}.pb-xl-1{padding-bottom:.25rem}.pb-xl-2{padding-bottom:.5rem}.pb-xl-3{padding-bottom:1rem}.pb-xl-4{padding-bottom:1.5rem}.pb-xl-5{padding-bottom:3rem}.ps-xl-0{padding-left:0}.ps-xl-1{padding-left:.25rem}.ps-xl-2{padding-left:.5rem}.ps-xl-3{padding-left:1rem}.ps-xl-4{padding-left:1.5rem}.ps-xl-5{padding-left:3rem}.gap-xl-0{gap:0}.gap-xl-1{gap:.25rem}.gap-xl-2{gap:.5rem}.gap-xl-3{gap:1rem}.gap-xl-4{gap:1.5rem}.gap-xl-5{gap:3rem}.row-gap-xl-0{row-gap:0}.row-gap-xl-1{row-gap:.25rem}.row-gap-xl-2{row-gap:.5rem}.row-gap-xl-3{row-gap:1rem}.row-gap-xl-4{row-gap:1.5rem}.row-gap-xl-5{row-gap:3rem}.column-gap-xl-0{column-gap:0}.column-gap-xl-1{column-gap:.25rem}.column-gap-xl-2{column-gap:.5rem}.column-gap-xl-3{column-gap:1rem}.column-gap-xl-4{column-gap:1.5rem}.column-gap-xl-5{column-gap:3rem}.text-xl-start{text-align:left}.text-xl-end{text-align:right}.text-xl-center{text-align:center}}@media (min-width: 1400px){.float-xxl-start{float:left}.float-xxl-end{float:right}.float-xxl-none{float:none}.object-fit-xxl-contain{object-fit:contain}.object-fit-xxl-cover{object-fit:cover}.object-fit-xxl-fill{object-fit:fill}.object-fit-xxl-scale{object-fit:scale-down}.object-fit-xxl-none{object-fit:none}.d-xxl-inline{display:inline}.d-xxl-inline-block{display:inline-block}.d-xxl-block{display:block}.d-xxl-grid{display:grid}.d-xxl-inline-grid{display:inline-grid}.d-xxl-table{display:table}.d-xxl-table-row{display:table-row}.d-xxl-table-cell{display:table-cell}.d-xxl-flex{display:flex}.d-xxl-inline-flex{display:inline-flex}.d-xxl-none{display:none}.flex-xxl-fill{flex:1 1 auto}.flex-xxl-row{flex-direction:row}.flex-xxl-column{flex-direction:column}.flex-xxl-row-reverse{flex-direction:row-reverse}.flex-xxl-column-reverse{flex-direction:column-reverse}.flex-xxl-grow-0{flex-grow:0}.flex-xxl-grow-1{flex-grow:1}.flex-xxl-shrink-0{flex-shrink:0}.flex-xxl-shrink-1{flex-shrink:1}.flex-xxl-wrap{flex-wrap:wrap}.flex-xxl-nowrap{flex-wrap:nowrap}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse}.justify-content-xxl-start{justify-content:flex-start}.justify-content-xxl-end{justify-content:flex-end}.justify-content-xxl-center{justify-content:center}.justify-content-xxl-between{justify-content:space-between}.justify-content-xxl-around{justify-content:space-around}.justify-content-xxl-evenly{justify-content:space-evenly}.align-items-xxl-start{align-items:flex-start}.align-items-xxl-end{align-items:flex-end}.align-items-xxl-center{align-items:center}.align-items-xxl-baseline{align-items:baseline}.align-items-xxl-stretch{align-items:stretch}.align-content-xxl-start{align-content:flex-start}.align-content-xxl-end{align-content:flex-end}.align-content-xxl-center{align-content:center}.align-content-xxl-between{align-content:space-between}.align-content-xxl-around{align-content:space-around}.align-content-xxl-stretch{align-content:stretch}.align-self-xxl-auto{align-self:auto}.align-self-xxl-start{align-self:flex-start}.align-self-xxl-end{align-self:flex-end}.align-self-xxl-center{align-self:center}.align-self-xxl-baseline{align-self:baseline}.align-self-xxl-stretch{align-self:stretch}.order-xxl-first{order:-1}.order-xxl-0{order:0}.order-xxl-1{order:1}.order-xxl-2{order:2}.order-xxl-3{order:3}.order-xxl-4{order:4}.order-xxl-5{order:5}.order-xxl-last{order:6}.m-xxl-0{margin:0}.m-xxl-1{margin:.25rem}.m-xxl-2{margin:.5rem}.m-xxl-3{margin:1rem}.m-xxl-4{margin:1.5rem}.m-xxl-5{margin:3rem}.m-xxl-auto{margin:auto}.mx-xxl-0{margin-right:0;margin-left:0}.mx-xxl-1{margin-right:.25rem;margin-left:.25rem}.mx-xxl-2{margin-right:.5rem;margin-left:.5rem}.mx-xxl-3{margin-right:1rem;margin-left:1rem}.mx-xxl-4{margin-right:1.5rem;margin-left:1.5rem}.mx-xxl-5{margin-right:3rem;margin-left:3rem}.mx-xxl-auto{margin-right:auto;margin-left:auto}.my-xxl-0{margin-top:0;margin-bottom:0}.my-xxl-1{margin-top:.25rem;margin-bottom:.25rem}.my-xxl-2{margin-top:.5rem;margin-bottom:.5rem}.my-xxl-3{margin-top:1rem;margin-bottom:1rem}.my-xxl-4{margin-top:1.5rem;margin-bottom:1.5rem}.my-xxl-5{margin-top:3rem;margin-bottom:3rem}.my-xxl-auto{margin-top:auto;margin-bottom:auto}.mt-xxl-0{margin-top:0}.mt-xxl-1{margin-top:.25rem}.mt-xxl-2{margin-top:.5rem}.mt-xxl-3{margin-top:1rem}.mt-xxl-4{margin-top:1.5rem}.mt-xxl-5{margin-top:3rem}.mt-xxl-auto{margin-top:auto}.me-xxl-0{margin-right:0}.me-xxl-1{margin-right:.25rem}.me-xxl-2{margin-right:.5rem}.me-xxl-3{margin-right:1rem}.me-xxl-4{margin-right:1.5rem}.me-xxl-5{margin-right:3rem}.me-xxl-auto{margin-right:auto}.mb-xxl-0{margin-bottom:0}.mb-xxl-1{margin-bottom:.25rem}.mb-xxl-2{margin-bottom:.5rem}.mb-xxl-3{margin-bottom:1rem}.mb-xxl-4{margin-bottom:1.5rem}.mb-xxl-5{margin-bottom:3rem}.mb-xxl-auto{margin-bottom:auto}.ms-xxl-0{margin-left:0}.ms-xxl-1{margin-left:.25rem}.ms-xxl-2{margin-left:.5rem}.ms-xxl-3{margin-left:1rem}.ms-xxl-4{margin-left:1.5rem}.ms-xxl-5{margin-left:3rem}.ms-xxl-auto{margin-left:auto}.p-xxl-0{padding:0}.p-xxl-1{padding:.25rem}.p-xxl-2{padding:.5rem}.p-xxl-3{padding:1rem}.p-xxl-4{padding:1.5rem}.p-xxl-5{padding:3rem}.px-xxl-0{padding-right:0;padding-left:0}.px-xxl-1{padding-right:.25rem;padding-left:.25rem}.px-xxl-2{padding-right:.5rem;padding-left:.5rem}.px-xxl-3{padding-right:1rem;padding-left:1rem}.px-xxl-4{padding-right:1.5rem;padding-left:1.5rem}.px-xxl-5{padding-right:3rem;padding-left:3rem}.py-xxl-0{padding-top:0;padding-bottom:0}.py-xxl-1{padding-top:.25rem;padding-bottom:.25rem}.py-xxl-2{padding-top:.5rem;padding-bottom:.5rem}.py-xxl-3{padding-top:1rem;padding-bottom:1rem}.py-xxl-4{padding-top:1.5rem;padding-bottom:1.5rem}.py-xxl-5{padding-top:3rem;padding-bottom:3rem}.pt-xxl-0{padding-top:0}.pt-xxl-1{padding-top:.25rem}.pt-xxl-2{padding-top:.5rem}.pt-xxl-3{padding-top:1rem}.pt-xxl-4{padding-top:1.5rem}.pt-xxl-5{padding-top:3rem}.pe-xxl-0{padding-right:0}.pe-xxl-1{padding-right:.25rem}.pe-xxl-2{padding-right:.5rem}.pe-xxl-3{padding-right:1rem}.pe-xxl-4{padding-right:1.5rem}.pe-xxl-5{padding-right:3rem}.pb-xxl-0{padding-bottom:0}.pb-xxl-1{padding-bottom:.25rem}.pb-xxl-2{padding-bottom:.5rem}.pb-xxl-3{padding-bottom:1rem}.pb-xxl-4{padding-bottom:1.5rem}.pb-xxl-5{padding-bottom:3rem}.ps-xxl-0{padding-left:0}.ps-xxl-1{padding-left:.25rem}.ps-xxl-2{padding-left:.5rem}.ps-xxl-3{padding-left:1rem}.ps-xxl-4{padding-left:1.5rem}.ps-xxl-5{padding-left:3rem}.gap-xxl-0{gap:0}.gap-xxl-1{gap:.25rem}.gap-xxl-2{gap:.5rem}.gap-xxl-3{gap:1rem}.gap-xxl-4{gap:1.5rem}.gap-xxl-5{gap:3rem}.row-gap-xxl-0{row-gap:0}.row-gap-xxl-1{row-gap:.25rem}.row-gap-xxl-2{row-gap:.5rem}.row-gap-xxl-3{row-gap:1rem}.row-gap-xxl-4{row-gap:1.5rem}.row-gap-xxl-5{row-gap:3rem}.column-gap-xxl-0{column-gap:0}.column-gap-xxl-1{column-gap:.25rem}.column-gap-xxl-2{column-gap:.5rem}.column-gap-xxl-3{column-gap:1rem}.column-gap-xxl-4{column-gap:1.5rem}.column-gap-xxl-5{column-gap:3rem}.text-xxl-start{text-align:left}.text-xxl-end{text-align:right}.text-xxl-center{text-align:center}}@media (min-width: 1200px){.fs-1{font-size:2.5rem}.fs-2{font-size:2rem}.fs-3{font-size:1.75rem}.fs-4{font-size:1.5rem}}@media print{.d-print-inline{display:inline}.d-print-inline-block{display:inline-block}.d-print-block{display:block}.d-print-grid{display:grid}.d-print-inline-grid{display:inline-grid}.d-print-table{display:table}.d-print-table-row{display:table-row}.d-print-table-cell{display:table-cell}.d-print-flex{display:flex}.d-print-inline-flex{display:inline-flex}.d-print-none{display:none}}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-comment,.hljs-quote,.hljs-variable{color:green}.hljs-keyword,.hljs-selector-tag,.hljs-built_in,.hljs-name,.hljs-tag{color:#00f}.hljs-string,.hljs-title,.hljs-section,.hljs-attribute,.hljs-literal,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-addition{color:#a31515}.hljs-deletion,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-meta{color:#2b91af}.hljs-doctag{color:gray}.hljs-attr{color:red}.hljs-symbol,.hljs-bullet,.hljs-link{color:#00b0e8}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}[data-bs-theme=dark] pre code.hljs{display:block;overflow-x:auto;padding:1em}[data-bs-theme=dark] code.hljs{padding:3px 5px}[data-bs-theme=dark] .hljs{background:#1e1e1e;color:#dcdcdc}[data-bs-theme=dark] .hljs-keyword,[data-bs-theme=dark] .hljs-literal,[data-bs-theme=dark] .hljs-symbol,[data-bs-theme=dark] .hljs-name{color:#569cd6}[data-bs-theme=dark] .hljs-link{color:#569cd6;text-decoration:underline}[data-bs-theme=dark] .hljs-built_in,[data-bs-theme=dark] .hljs-type{color:#4ec9b0}[data-bs-theme=dark] .hljs-number,[data-bs-theme=dark] .hljs-class{color:#b8d7a3}[data-bs-theme=dark] .hljs-string,[data-bs-theme=dark] .hljs-meta .hljs-string{color:#d69d85}[data-bs-theme=dark] .hljs-regexp,[data-bs-theme=dark] .hljs-template-tag{color:#9a5334}[data-bs-theme=dark] .hljs-subst,[data-bs-theme=dark] .hljs-function,[data-bs-theme=dark] .hljs-title,[data-bs-theme=dark] .hljs-params,[data-bs-theme=dark] .hljs-formula{color:#dcdcdc}[data-bs-theme=dark] .hljs-comment,[data-bs-theme=dark] .hljs-quote{color:#57a64a;font-style:italic}[data-bs-theme=dark] .hljs-doctag{color:#608b4e}[data-bs-theme=dark] .hljs-meta,[data-bs-theme=dark] .hljs-meta .hljs-keyword,[data-bs-theme=dark] .hljs-tag{color:#9b9b9b}[data-bs-theme=dark] .hljs-variable,[data-bs-theme=dark] .hljs-template-variable{color:#bd63c5}[data-bs-theme=dark] .hljs-attr,[data-bs-theme=dark] .hljs-attribute{color:#9cdcfe}[data-bs-theme=dark] .hljs-section{color:gold}[data-bs-theme=dark] .hljs-emphasis{font-style:italic}[data-bs-theme=dark] .hljs-strong{font-weight:700}[data-bs-theme=dark] .hljs-bullet,[data-bs-theme=dark] .hljs-selector-tag,[data-bs-theme=dark] .hljs-selector-id,[data-bs-theme=dark] .hljs-selector-class,[data-bs-theme=dark] .hljs-selector-attr,[data-bs-theme=dark] .hljs-selector-pseudo{color:#d7ba7d}[data-bs-theme=dark] .hljs-addition{background-color:#144212;display:inline-block;width:100%}[data-bs-theme=dark] .hljs-deletion{background-color:#600;display:inline-block;width:100%}.hljs{background-color:#f5f5f5}@media print{.hljs{overflow-x:hidden;text-wrap:pretty}}pre>code .line-highlight{background-color:#ff0}[data-bs-theme=dark] pre>code .line-highlight{background-color:#4a4a00}html{width:calc(100vw - var(--scrollbar-width));min-height:100vh;overflow-x:hidden}body,body[data-layout=landing]{width:calc(100vw - var(--scrollbar-width));min-height:100vh;display:flex;flex-direction:column}body>header,body[data-layout=landing]>header{display:flex;align-items:stretch}@media (min-width: 768px){body>header,body[data-layout=landing]>header{position:sticky;top:0;z-index:1030}}@media (min-width: 768px){body>header,body[data-layout=landing]>header{height:60px}}body>header>nav,body[data-layout=landing]>header>nav{flex:1}body>footer,body[data-layout=landing]>footer{font-size:14px;padding:1rem 0;height:60px}body>footer>div,body[data-layout=landing]>footer>div{display:flex;align-items:center}body>main,body[data-layout=landing]>main{display:flex;flex:1;padding-top:1.6rem;padding-bottom:2rem}body>main>.content,body[data-layout=landing]>main>.content{display:flex;flex-direction:column;width:100%}body>main>.content>:not(article),body[data-layout=landing]>main>.content>:not(article){display:none}body>main>.content>article,body[data-layout=landing]>main>.content>article{flex:1}@media (min-width: 768px){body>main>.content>article [id],body[data-layout=landing]>main>.content>article [id]{scroll-margin-top:60px}}body>main>:not(.content),body[data-layout=landing]>main>:not(.content){display:none}@media print{body>main,body[data-layout=landing]>main{padding:0!important}body>header,body>footer,body[data-layout=landing]>header,body[data-layout=landing]>footer{display:none}}@media not print{body[data-search]>main{display:none}body[data-search]>.search-results{display:block;flex:1;padding-top:1.6rem;padding-bottom:2rem}body:not([data-search])>.search-results{display:none}body:not([data-search])[data-layout=""]>main,body:not([data-search])[data-layout=conceptual]>main{padding-bottom:0}body:not([data-search])[data-layout=""]>main>.toc-offcanvas,body:not([data-search])[data-layout=conceptual]>main>.toc-offcanvas{flex:.35;display:block;overflow:hidden;max-width:360px;max-height:calc(100vh - 60px - 1.6rem)}@media (min-width: 768px){body:not([data-search])[data-layout=""]>main>.toc-offcanvas,body:not([data-search])[data-layout=conceptual]>main>.toc-offcanvas{position:sticky;top:calc(60px + 1.6rem)}}@media (max-width: 767.98px){body:not([data-search])[data-layout=""]>main>.toc-offcanvas,body:not([data-search])[data-layout=conceptual]>main>.toc-offcanvas{flex:0}}body:not([data-search])[data-layout=""]>main>.toc-offcanvas .offcanvas-start,body:not([data-search])[data-layout=""]>main>.toc-offcanvas .offcanvas-body,body:not([data-search])[data-layout=conceptual]>main>.toc-offcanvas .offcanvas-start,body:not([data-search])[data-layout=conceptual]>main>.toc-offcanvas .offcanvas-body{height:100%}body:not([data-search])[data-layout=""]>main>.content,body:not([data-search])[data-layout=conceptual]>main>.content{display:flex;flex-direction:column;flex:1;min-width:0;margin:0 3rem;padding-bottom:2rem}body:not([data-search])[data-layout=""]>main>.content>.actionbar,body:not([data-search])[data-layout=conceptual]>main>.content>.actionbar{display:flex;align-items:flex-start;margin-top:.5rem}body:not([data-search])[data-layout=""]>main>.content>.actionbar>button,body:not([data-search])[data-layout=conceptual]>main>.content>.actionbar>button{margin-top:-.65em;margin-left:-.8em}body:not([data-search])[data-layout=""]>main>.content article,body:not([data-search])[data-layout=conceptual]>main>.content article{flex:1}body:not([data-search])[data-layout=""]>main>.content>.contribution,body:not([data-search])[data-layout=""]>main>.content>.next-article,body:not([data-search])[data-layout=conceptual]>main>.content>.contribution,body:not([data-search])[data-layout=conceptual]>main>.content>.next-article{display:flex}@media (max-width: 991.98px){body:not([data-search])[data-layout=""]>main>.content,body:not([data-search])[data-layout=conceptual]>main>.content{margin:0 1rem}}@media (max-width: 767.98px){body:not([data-search])[data-layout=""]>main>.content,body:not([data-search])[data-layout=conceptual]>main>.content{margin:0}}body:not([data-search])[data-layout=""]>main>.affix,body:not([data-search])[data-layout=conceptual]>main>.affix{display:block;width:230px;max-height:calc(100vh - 60px - 1.6rem);overflow-x:hidden;overflow-y:auto}@media (min-width: 768px){body:not([data-search])[data-layout=""]>main>.affix,body:not([data-search])[data-layout=conceptual]>main>.affix{position:sticky;top:calc(60px + 1.6rem)}}}@media only screen and (max-width: 1140px){body:not([data-search])[data-layout=""]>main>.affix,body:not([data-search])[data-layout=conceptual]>main>.affix{display:none}}@media not print{body:not([data-search])[data-layout=chromeless]>header,body:not([data-search])[data-layout=chromeless]>footer{display:none}}.breadcrumb{font-size:14px}.breadcrumb a{text-decoration:none}.breadcrumb a:hover,.breadcrumb a:focus{text-decoration:underline}.next-article{display:flex}.next-article:not(:has(div)){border-top-width:0}.next-article:has(div){margin-top:3rem;padding-top:1rem}.next-article>div{flex:1}.next-article>div.next{text-align:right}.next-article>div>span{opacity:.66;font-size:14px}.next-article>div>a{display:block}.navbar{padding:0}.navbar .navbar-brand{display:flex;align-items:center}.navbar .navbar-nav{display:flex;flex-wrap:nowrap}.navbar #navbar{display:flex;flex:1;justify-content:flex-end}.navbar #navbar form{display:flex;position:relative;align-items:center}.navbar #navbar form>i.bi{position:absolute;left:.8rem;opacity:.5}.navbar #navbar form>input{padding-left:2.5rem}.navbar #navbar form.search{order:50}.navbar #navbar form.icons{margin-left:auto}@media (max-width: 767.98px){.navbar #navbar{flex-direction:column;align-items:flex-start}.navbar #navbar form{margin:1rem 0 0}.navbar #navbar form.search{align-self:stretch;order:30}.navbar #navbar form.icons{align-self:center;order:40;margin:1rem 0}}.affix{font-size:14px}.affix h5,.affix .h5{display:inline-block;font-weight:300;text-transform:uppercase;padding:1em 0 .5em;font-size:14px;letter-spacing:2px}.affix h6,.affix .h6{font-size:14px}.affix ul{flex-direction:column;list-style-type:none;padding-left:0;margin-left:0}.affix ul h6,.affix ul .h6{margin-top:1rem}.affix ul li{margin:.4rem 0}.affix ul li a{text-decoration:none}.affix ul li a:hover,.affix ul li a:focus{text-decoration:underline}.contribution{margin-top:2rem}.contribution a.edit-link{text-decoration:none}.contribution a.edit-link:hover,.contribution a.edit-link:focus{text-decoration:underline}.contribution a.edit-link:before{content:"\f4ca";display:inline-block;font-family:bootstrap-icons;position:relative;margin-right:.5em;top:.2em;font-size:1.25em;font-weight:400}.toc{min-width:0;width:100%;height:100%;display:flex;flex-direction:column}.toc ul{font-size:14px;flex-direction:column;list-style-type:none;padding-left:0;overflow-wrap:break-word}.toc li{font-weight:400;margin:.6em 0;padding-left:.85rem;position:relative}.toc li>a{display:inline;text-decoration:none}.toc li>a:hover,.toc li>a:focus{text-decoration:underline}.toc li>ul{display:none}.toc li.expanded>ul{display:block}.toc .expand-stub:before{display:inline-block;width:.85rem;cursor:pointer;font-family:bootstrap-icons;font-size:.8em;content:"\f285";position:absolute;margin-top:.2em;margin-left:-.85rem;transition:transform .35s ease;transform-origin:.5em 50%}@media (prefers-reduced-motion){.toc .expand-stub:before{transition:none}}.toc li.expanded>.expand-stub:before{transform:rotate(90deg)}.toc span.name-only{font-weight:600;display:inline-block;margin:.4rem 0}.toc form.filter{display:flex;position:relative;align-items:center;margin-bottom:.5rem}.toc form.filter>i.bi{position:absolute;left:.6rem;opacity:.5}.toc form.filter>input{padding-left:2rem}.toc>.no-result{font-size:.9em;color:#6c757d}.toc a.pdf-link{text-decoration:none}.toc a.pdf-link:hover,.toc a.pdf-link:focus{text-decoration:underline}.toc a.pdf-link:before{content:"\f756";display:inline-block;font-family:bootstrap-icons;position:relative;margin-right:.5em;top:.2em;font-size:1.25em;font-weight:400}a.external[href]:after{font-family:bootstrap-icons;content:"\f1c5";font-size:.6rem;margin:0 .2em;display:inline-block}blockquote{border-style:solid;border-width:0 0 0 3px;border-color:#c4c8cb;margin:1.2em 0 2em;padding:0 .8em;display:block}[data-bs-theme=dark] blockquote{border-color:#41464b}.alert{break-inside:avoid}.alert h5,.alert .h5{text-transform:uppercase;font-weight:700;font-size:1rem}.alert h5:before,.alert .h5:before{font-family:bootstrap-icons;position:relative;margin-right:.5em;top:.2em;font-size:1.25em;font-weight:400}.alert:not(:has(h5))>p:last-child{margin-block-end:0}.alert-info h5:before,.alert-info .h5:before{content:"\f431"}.alert-warning h5:before,.alert-warning .h5:before{content:"\f333"}.alert-danger h5:before,.alert-danger .h5:before{content:"\f623"}div.embeddedvideo{padding-top:56.25%;position:relative;width:100%;margin-bottom:1em}div.embeddedvideo iframe{position:absolute;inset:0;width:100%;height:100%}pre{position:relative}pre>.code-action{display:none;position:absolute;top:.25rem;right:.2rem}pre>.code-action .bi-check-lg{font-size:1.2rem}pre:hover>.code-action{display:block}.tabGroup{margin-bottom:1rem}.tabGroup>section{margin:0;padding:1rem;border-top:0;border-top-left-radius:0;border-top-right-radius:0}#search-results{line-height:1.8}#search-results>.search-list{font-size:.9em;color:#6c757d}#search-results>.sr-items{flex:1}#search-results>.sr-items .sr-item{margin-bottom:1.5em}#search-results>.sr-items .sr-item>.item-title{font-size:x-large}#search-results>.sr-items .sr-item>.item-href{color:#093;font-size:small}#search-results>.sr-items .sr-item>.item-brief{font-size:small}body[data-yaml-mime=ManagedReference] article h1[data-uid],body[data-yaml-mime=ManagedReference] article [data-uid].h1,body[data-yaml-mime=ApiPage] article h1[data-uid],body[data-yaml-mime=ApiPage] article [data-uid].h1{position:relative;padding-right:1.6rem}body[data-yaml-mime=ManagedReference] article h3[data-uid],body[data-yaml-mime=ManagedReference] article [data-uid].h3,body[data-yaml-mime=ApiPage] article h3[data-uid],body[data-yaml-mime=ApiPage] article [data-uid].h3{position:relative;font-weight:400;margin-top:3rem;padding-bottom:5px;padding-right:1.6rem}body[data-yaml-mime=ManagedReference] article h2.section,body[data-yaml-mime=ManagedReference] article .section.h2,body[data-yaml-mime=ApiPage] article h2.section,body[data-yaml-mime=ApiPage] article .section.h2{margin-top:3rem}body[data-yaml-mime=ManagedReference] article h2.section+h3[data-uid],body[data-yaml-mime=ManagedReference] article .section.h2+h3[data-uid],body[data-yaml-mime=ManagedReference] article h2.section+[data-uid].h3,body[data-yaml-mime=ManagedReference] article .section.h2+[data-uid].h3,body[data-yaml-mime=ManagedReference] article h2.section+a+h3[data-uid],body[data-yaml-mime=ManagedReference] article .section.h2+a+h3[data-uid],body[data-yaml-mime=ManagedReference] article h2.section+a+[data-uid].h3,body[data-yaml-mime=ManagedReference] article .section.h2+a+[data-uid].h3,body[data-yaml-mime=ApiPage] article h2.section+h3[data-uid],body[data-yaml-mime=ApiPage] article .section.h2+h3[data-uid],body[data-yaml-mime=ApiPage] article h2.section+[data-uid].h3,body[data-yaml-mime=ApiPage] article .section.h2+[data-uid].h3,body[data-yaml-mime=ApiPage] article h2.section+a+h3[data-uid],body[data-yaml-mime=ApiPage] article .section.h2+a+h3[data-uid],body[data-yaml-mime=ApiPage] article h2.section+a+[data-uid].h3,body[data-yaml-mime=ApiPage] article .section.h2+a+[data-uid].h3{margin-top:1rem}body[data-yaml-mime=ManagedReference] article h4.section,body[data-yaml-mime=ManagedReference] article .section.h4,body[data-yaml-mime=ApiPage] article h4.section,body[data-yaml-mime=ApiPage] article .section.h4{font-weight:300;margin-top:1.6rem}body[data-yaml-mime=ManagedReference] article dl>dt,body[data-yaml-mime=ApiPage] article dl>dt{font-weight:400}body[data-yaml-mime=ManagedReference] article dl>dd,body[data-yaml-mime=ApiPage] article dl>dd{margin-left:1rem}body[data-yaml-mime=ManagedReference] article dl.typelist>dt,body[data-yaml-mime=ApiPage] article dl.typelist>dt{font-weight:600}body[data-yaml-mime=ManagedReference] article dl.typelist>dd,body[data-yaml-mime=ApiPage] article dl.typelist>dd{margin-left:0}body[data-yaml-mime=ManagedReference] article dl.typelist>dd>div,body[data-yaml-mime=ApiPage] article dl.typelist>dd>div{display:inline-block}body[data-yaml-mime=ManagedReference] article dl.typelist>dd>div:not(:last-child):after,body[data-yaml-mime=ApiPage] article dl.typelist>dd>div:not(:last-child):after{content:", "}body[data-yaml-mime=ManagedReference] article dl.typelist.inheritance>dd>div:not(:last-child):after,body[data-yaml-mime=ApiPage] article dl.typelist.inheritance>dd>div:not(:last-child):after{font-family:bootstrap-icons;content:"\f12c";position:relative;top:.2em;opacity:.8}body[data-yaml-mime=ManagedReference] article dl.parameters>dt,body[data-yaml-mime=ApiPage] article dl.parameters>dt{margin:1em 0}body[data-yaml-mime=ManagedReference] article dl.parameters>dt>code,body[data-yaml-mime=ApiPage] article dl.parameters>dt>code{margin-right:.2em;font-size:1em}body[data-yaml-mime=ManagedReference] article div.facts,body[data-yaml-mime=ApiPage] article div.facts{font-size:14px;margin:2rem 0 1rem}body[data-yaml-mime=ManagedReference] article div.facts>dl,body[data-yaml-mime=ApiPage] article div.facts>dl{margin:0}body[data-yaml-mime=ManagedReference] article div.facts>dl>dd,body[data-yaml-mime=ApiPage] article div.facts>dl>dd{margin-left:.25rem;display:inline-block}body[data-yaml-mime=ManagedReference] article div.facts>dl>dt,body[data-yaml-mime=ApiPage] article div.facts>dl>dt{display:inline-block}body[data-yaml-mime=ManagedReference] article div.facts>dl>dt:after,body[data-yaml-mime=ApiPage] article div.facts>dl>dt:after{content:":"}body[data-yaml-mime=ManagedReference] article .header-action,body[data-yaml-mime=ApiPage] article .header-action{position:absolute;right:0;bottom:.2rem;font-size:1.2rem}@media print{body[data-yaml-mime=ManagedReference] article .header-action,body[data-yaml-mime=ApiPage] article .header-action{display:none}}body[data-yaml-mime=ManagedReference] article td.term,body[data-yaml-mime=ApiPage] article td.term{font-weight:600}body[data-yaml-mime=ManagedReference] article summary,body[data-yaml-mime=ApiPage] article summary{display:block;cursor:inherit}body[data-yaml-mime=ManagedReference] article li>span.term,body[data-yaml-mime=ApiPage] article li>span.term{font-weight:600}body[data-yaml-mime=ManagedReference] article li>span.term:after,body[data-yaml-mime=ApiPage] article li>span.term:after{content:"-";margin:0 .5em}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6,.xref,.text-break{word-wrap:break-word;word-break:break-word}.divider{margin:0 5px;color:#ccc}article span.small.pull-right{float:right}article img{max-width:100%;height:auto}.codewrapper{position:relative}.sample-response .response-content{max-height:200px}@media (width <= 768px){#mobile-indicator{display:block}.mobile-hide{display:none}h1:before,.h1:before,h2:before,.h2:before,h3:before,.h3:before,h4:before,.h4:before{content:"";display:none}}@media print{@page{margin:.4in}}.pdftoc ul{list-style:none}.pdftoc a{display:flex;text-decoration:none;color:var(--bs-body-color)}.pdftoc a .spacer{flex:1;border-bottom:1px dashed var(--bs-body-color);margin:.4em}@view-transition{navigation: auto;}@media (prefers-reduced-motion){@view-transition{navigation: none;}} +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +/*! Bundled license information: + +bootstrap-icons/font/bootstrap-icons.scss: + (*! + * Bootstrap Icons v1.11.3 (https://icons.getbootstrap.com/) + * Copyright 2019-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) + *) +*/ +/*# sourceMappingURL=docfx.min.css.map */ diff --git a/public/docfx.min.css.map b/public/docfx.min.css.map new file mode 100644 index 000000000..b8e4043a2 --- /dev/null +++ b/public/docfx.min.css.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../node_modules/bootstrap-icons/font/bootstrap-icons.scss", "../src/docfx.scss", "../src/mixins.scss", "../../node_modules/bootstrap/scss/mixins/_banner.scss", "../../node_modules/bootstrap/scss/_root.scss", "../../node_modules/bootstrap/scss/vendor/_rfs.scss", "../../node_modules/bootstrap/scss/mixins/_color-mode.scss", "../../node_modules/bootstrap/scss/_reboot.scss", "../../node_modules/bootstrap/scss/_variables.scss", "../../node_modules/bootstrap/scss/mixins/_border-radius.scss", "../../node_modules/bootstrap/scss/_type.scss", "../../node_modules/bootstrap/scss/mixins/_lists.scss", "../../node_modules/bootstrap/scss/_images.scss", "../../node_modules/bootstrap/scss/mixins/_image.scss", "../../node_modules/bootstrap/scss/_containers.scss", "../../node_modules/bootstrap/scss/mixins/_container.scss", "../../node_modules/bootstrap/scss/mixins/_breakpoints.scss", "../../node_modules/bootstrap/scss/_grid.scss", "../../node_modules/bootstrap/scss/mixins/_grid.scss", "../../node_modules/bootstrap/scss/_tables.scss", "../../node_modules/bootstrap/scss/mixins/_table-variants.scss", "../../node_modules/bootstrap/scss/forms/_labels.scss", "../../node_modules/bootstrap/scss/forms/_form-text.scss", "../../node_modules/bootstrap/scss/forms/_form-control.scss", "../../node_modules/bootstrap/scss/mixins/_transition.scss", "../../node_modules/bootstrap/scss/mixins/_gradients.scss", "../../node_modules/bootstrap/scss/forms/_form-select.scss", "../../node_modules/bootstrap/scss/forms/_form-check.scss", "../../node_modules/bootstrap/scss/forms/_form-range.scss", "../../node_modules/bootstrap/scss/forms/_floating-labels.scss", "../../node_modules/bootstrap/scss/forms/_input-group.scss", "../../node_modules/bootstrap/scss/mixins/_forms.scss", "../../node_modules/bootstrap/scss/_buttons.scss", "../../node_modules/bootstrap/scss/mixins/_buttons.scss", "../../node_modules/bootstrap/scss/_transitions.scss", "../../node_modules/bootstrap/scss/_dropdown.scss", "../../node_modules/bootstrap/scss/mixins/_caret.scss", "../../node_modules/bootstrap/scss/_button-group.scss", "../../node_modules/bootstrap/scss/_nav.scss", "../../node_modules/bootstrap/scss/_navbar.scss", "../../node_modules/bootstrap/scss/_card.scss", "../../node_modules/bootstrap/scss/_accordion.scss", "../../node_modules/bootstrap/scss/_breadcrumb.scss", "../../node_modules/bootstrap/scss/_pagination.scss", "../../node_modules/bootstrap/scss/mixins/_pagination.scss", "../../node_modules/bootstrap/scss/_badge.scss", "../../node_modules/bootstrap/scss/_alert.scss", "../../node_modules/bootstrap/scss/_progress.scss", "../../node_modules/bootstrap/scss/_list-group.scss", "../../node_modules/bootstrap/scss/_close.scss", "../../node_modules/bootstrap/scss/_toasts.scss", "../../node_modules/bootstrap/scss/_modal.scss", "../../node_modules/bootstrap/scss/mixins/_backdrop.scss", "../../node_modules/bootstrap/scss/_tooltip.scss", "../../node_modules/bootstrap/scss/mixins/_reset-text.scss", "../../node_modules/bootstrap/scss/_popover.scss", "../../node_modules/bootstrap/scss/_carousel.scss", "../../node_modules/bootstrap/scss/mixins/_clearfix.scss", "../../node_modules/bootstrap/scss/_spinners.scss", "../../node_modules/bootstrap/scss/_offcanvas.scss", "../../node_modules/bootstrap/scss/_placeholders.scss", "../../node_modules/bootstrap/scss/helpers/_color-bg.scss", "../../node_modules/bootstrap/scss/helpers/_colored-links.scss", "../../node_modules/bootstrap/scss/helpers/_focus-ring.scss", "../../node_modules/bootstrap/scss/helpers/_icon-link.scss", "../../node_modules/bootstrap/scss/helpers/_ratio.scss", "../../node_modules/bootstrap/scss/helpers/_position.scss", "../../node_modules/bootstrap/scss/helpers/_stacks.scss", "../../node_modules/bootstrap/scss/helpers/_visually-hidden.scss", "../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss", "../../node_modules/bootstrap/scss/helpers/_stretched-link.scss", "../../node_modules/bootstrap/scss/helpers/_text-truncation.scss", "../../node_modules/bootstrap/scss/mixins/_text-truncate.scss", "../../node_modules/bootstrap/scss/helpers/_vr.scss", "../../node_modules/bootstrap/scss/mixins/_utilities.scss", "../../node_modules/bootstrap/scss/utilities/_api.scss", "../src/highlight.scss", "../../node_modules/highlight.js/scss/vs.scss", "../../node_modules/highlight.js/scss/vs2015.scss", "../src/layout.scss", "../src/nav.scss", "../src/toc.scss", "../src/markdown.scss", "../../node_modules/bootstrap/scss/_variables-dark.scss", "../src/search.scss", "../src/dotnet.scss"], + "sourcesContent": ["/*!\n * Bootstrap Icons v1.11.3 (https://icons.getbootstrap.com/)\n * Copyright 2019-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE)\n */\n\n$bootstrap-icons-font: \"bootstrap-icons\" !default;\n$bootstrap-icons-font-dir: \"./fonts\" !default;\n$bootstrap-icons-font-file: \"#{$bootstrap-icons-font-dir}/#{$bootstrap-icons-font}\" !default;\n$bootstrap-icons-font-hash: \"24e3eb84d0bcaf83d77f904c78ac1f47\" !default;\n$bootstrap-icons-font-src: url(\"#{$bootstrap-icons-font-file}.woff2?#{$bootstrap-icons-font-hash}\") format(\"woff2\"),\n url(\"#{$bootstrap-icons-font-file}.woff?#{$bootstrap-icons-font-hash}\") format(\"woff\") !default;\n\n@font-face {\n font-display: block;\n font-family: $bootstrap-icons-font;\n src: $bootstrap-icons-font-src;\n}\n\n.bi::before,\n[class^=\"bi-\"]::before,\n[class*=\" bi-\"]::before {\n display: inline-block;\n font-family: $bootstrap-icons-font !important;\n font-style: normal;\n font-weight: normal !important;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n vertical-align: -.125em;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n$bootstrap-icons-map: (\n \"123\": \"\\f67f\",\n \"alarm-fill\": \"\\f101\",\n \"alarm\": \"\\f102\",\n \"align-bottom\": \"\\f103\",\n \"align-center\": \"\\f104\",\n \"align-end\": \"\\f105\",\n \"align-middle\": \"\\f106\",\n \"align-start\": \"\\f107\",\n \"align-top\": \"\\f108\",\n \"alt\": \"\\f109\",\n \"app-indicator\": \"\\f10a\",\n \"app\": \"\\f10b\",\n \"archive-fill\": \"\\f10c\",\n \"archive\": \"\\f10d\",\n \"arrow-90deg-down\": \"\\f10e\",\n \"arrow-90deg-left\": \"\\f10f\",\n \"arrow-90deg-right\": \"\\f110\",\n \"arrow-90deg-up\": \"\\f111\",\n \"arrow-bar-down\": \"\\f112\",\n \"arrow-bar-left\": \"\\f113\",\n \"arrow-bar-right\": \"\\f114\",\n \"arrow-bar-up\": \"\\f115\",\n \"arrow-clockwise\": \"\\f116\",\n \"arrow-counterclockwise\": \"\\f117\",\n \"arrow-down-circle-fill\": \"\\f118\",\n \"arrow-down-circle\": \"\\f119\",\n \"arrow-down-left-circle-fill\": \"\\f11a\",\n \"arrow-down-left-circle\": \"\\f11b\",\n \"arrow-down-left-square-fill\": \"\\f11c\",\n \"arrow-down-left-square\": \"\\f11d\",\n \"arrow-down-left\": \"\\f11e\",\n \"arrow-down-right-circle-fill\": \"\\f11f\",\n \"arrow-down-right-circle\": \"\\f120\",\n \"arrow-down-right-square-fill\": \"\\f121\",\n \"arrow-down-right-square\": \"\\f122\",\n \"arrow-down-right\": \"\\f123\",\n \"arrow-down-short\": \"\\f124\",\n \"arrow-down-square-fill\": \"\\f125\",\n \"arrow-down-square\": \"\\f126\",\n \"arrow-down-up\": \"\\f127\",\n \"arrow-down\": \"\\f128\",\n \"arrow-left-circle-fill\": \"\\f129\",\n \"arrow-left-circle\": \"\\f12a\",\n \"arrow-left-right\": \"\\f12b\",\n \"arrow-left-short\": \"\\f12c\",\n \"arrow-left-square-fill\": \"\\f12d\",\n \"arrow-left-square\": \"\\f12e\",\n \"arrow-left\": \"\\f12f\",\n \"arrow-repeat\": \"\\f130\",\n \"arrow-return-left\": \"\\f131\",\n \"arrow-return-right\": \"\\f132\",\n \"arrow-right-circle-fill\": \"\\f133\",\n \"arrow-right-circle\": \"\\f134\",\n \"arrow-right-short\": \"\\f135\",\n \"arrow-right-square-fill\": \"\\f136\",\n \"arrow-right-square\": \"\\f137\",\n \"arrow-right\": \"\\f138\",\n \"arrow-up-circle-fill\": \"\\f139\",\n \"arrow-up-circle\": \"\\f13a\",\n \"arrow-up-left-circle-fill\": \"\\f13b\",\n \"arrow-up-left-circle\": \"\\f13c\",\n \"arrow-up-left-square-fill\": \"\\f13d\",\n \"arrow-up-left-square\": \"\\f13e\",\n \"arrow-up-left\": \"\\f13f\",\n \"arrow-up-right-circle-fill\": \"\\f140\",\n \"arrow-up-right-circle\": \"\\f141\",\n \"arrow-up-right-square-fill\": \"\\f142\",\n \"arrow-up-right-square\": \"\\f143\",\n \"arrow-up-right\": \"\\f144\",\n \"arrow-up-short\": \"\\f145\",\n \"arrow-up-square-fill\": \"\\f146\",\n \"arrow-up-square\": \"\\f147\",\n \"arrow-up\": \"\\f148\",\n \"arrows-angle-contract\": \"\\f149\",\n \"arrows-angle-expand\": \"\\f14a\",\n \"arrows-collapse\": \"\\f14b\",\n \"arrows-expand\": \"\\f14c\",\n \"arrows-fullscreen\": \"\\f14d\",\n \"arrows-move\": \"\\f14e\",\n \"aspect-ratio-fill\": \"\\f14f\",\n \"aspect-ratio\": \"\\f150\",\n \"asterisk\": \"\\f151\",\n \"at\": \"\\f152\",\n \"award-fill\": \"\\f153\",\n \"award\": \"\\f154\",\n \"back\": \"\\f155\",\n \"backspace-fill\": \"\\f156\",\n \"backspace-reverse-fill\": \"\\f157\",\n \"backspace-reverse\": \"\\f158\",\n \"backspace\": \"\\f159\",\n \"badge-3d-fill\": \"\\f15a\",\n \"badge-3d\": \"\\f15b\",\n \"badge-4k-fill\": \"\\f15c\",\n \"badge-4k\": \"\\f15d\",\n \"badge-8k-fill\": \"\\f15e\",\n \"badge-8k\": \"\\f15f\",\n \"badge-ad-fill\": \"\\f160\",\n \"badge-ad\": \"\\f161\",\n \"badge-ar-fill\": \"\\f162\",\n \"badge-ar\": \"\\f163\",\n \"badge-cc-fill\": \"\\f164\",\n \"badge-cc\": \"\\f165\",\n \"badge-hd-fill\": \"\\f166\",\n \"badge-hd\": \"\\f167\",\n \"badge-tm-fill\": \"\\f168\",\n \"badge-tm\": \"\\f169\",\n \"badge-vo-fill\": \"\\f16a\",\n \"badge-vo\": \"\\f16b\",\n \"badge-vr-fill\": \"\\f16c\",\n \"badge-vr\": \"\\f16d\",\n \"badge-wc-fill\": \"\\f16e\",\n \"badge-wc\": \"\\f16f\",\n \"bag-check-fill\": \"\\f170\",\n \"bag-check\": \"\\f171\",\n \"bag-dash-fill\": \"\\f172\",\n \"bag-dash\": \"\\f173\",\n \"bag-fill\": \"\\f174\",\n \"bag-plus-fill\": \"\\f175\",\n \"bag-plus\": \"\\f176\",\n \"bag-x-fill\": \"\\f177\",\n \"bag-x\": \"\\f178\",\n \"bag\": \"\\f179\",\n \"bar-chart-fill\": \"\\f17a\",\n \"bar-chart-line-fill\": \"\\f17b\",\n \"bar-chart-line\": \"\\f17c\",\n \"bar-chart-steps\": \"\\f17d\",\n \"bar-chart\": \"\\f17e\",\n \"basket-fill\": \"\\f17f\",\n \"basket\": \"\\f180\",\n \"basket2-fill\": \"\\f181\",\n \"basket2\": \"\\f182\",\n \"basket3-fill\": \"\\f183\",\n \"basket3\": \"\\f184\",\n \"battery-charging\": \"\\f185\",\n \"battery-full\": \"\\f186\",\n \"battery-half\": \"\\f187\",\n \"battery\": \"\\f188\",\n \"bell-fill\": \"\\f189\",\n \"bell\": \"\\f18a\",\n \"bezier\": \"\\f18b\",\n \"bezier2\": \"\\f18c\",\n \"bicycle\": \"\\f18d\",\n \"binoculars-fill\": \"\\f18e\",\n \"binoculars\": \"\\f18f\",\n \"blockquote-left\": \"\\f190\",\n \"blockquote-right\": \"\\f191\",\n \"book-fill\": \"\\f192\",\n \"book-half\": \"\\f193\",\n \"book\": \"\\f194\",\n \"bookmark-check-fill\": \"\\f195\",\n \"bookmark-check\": \"\\f196\",\n \"bookmark-dash-fill\": \"\\f197\",\n \"bookmark-dash\": \"\\f198\",\n \"bookmark-fill\": \"\\f199\",\n \"bookmark-heart-fill\": \"\\f19a\",\n \"bookmark-heart\": \"\\f19b\",\n \"bookmark-plus-fill\": \"\\f19c\",\n \"bookmark-plus\": \"\\f19d\",\n \"bookmark-star-fill\": \"\\f19e\",\n \"bookmark-star\": \"\\f19f\",\n \"bookmark-x-fill\": \"\\f1a0\",\n \"bookmark-x\": \"\\f1a1\",\n \"bookmark\": \"\\f1a2\",\n \"bookmarks-fill\": \"\\f1a3\",\n \"bookmarks\": \"\\f1a4\",\n \"bookshelf\": \"\\f1a5\",\n \"bootstrap-fill\": \"\\f1a6\",\n \"bootstrap-reboot\": \"\\f1a7\",\n \"bootstrap\": \"\\f1a8\",\n \"border-all\": \"\\f1a9\",\n \"border-bottom\": \"\\f1aa\",\n \"border-center\": \"\\f1ab\",\n \"border-inner\": \"\\f1ac\",\n \"border-left\": \"\\f1ad\",\n \"border-middle\": \"\\f1ae\",\n \"border-outer\": \"\\f1af\",\n \"border-right\": \"\\f1b0\",\n \"border-style\": \"\\f1b1\",\n \"border-top\": \"\\f1b2\",\n \"border-width\": \"\\f1b3\",\n \"border\": \"\\f1b4\",\n \"bounding-box-circles\": \"\\f1b5\",\n \"bounding-box\": \"\\f1b6\",\n \"box-arrow-down-left\": \"\\f1b7\",\n \"box-arrow-down-right\": \"\\f1b8\",\n \"box-arrow-down\": \"\\f1b9\",\n \"box-arrow-in-down-left\": \"\\f1ba\",\n \"box-arrow-in-down-right\": \"\\f1bb\",\n \"box-arrow-in-down\": \"\\f1bc\",\n \"box-arrow-in-left\": \"\\f1bd\",\n \"box-arrow-in-right\": \"\\f1be\",\n \"box-arrow-in-up-left\": \"\\f1bf\",\n \"box-arrow-in-up-right\": \"\\f1c0\",\n \"box-arrow-in-up\": \"\\f1c1\",\n \"box-arrow-left\": \"\\f1c2\",\n \"box-arrow-right\": \"\\f1c3\",\n \"box-arrow-up-left\": \"\\f1c4\",\n \"box-arrow-up-right\": \"\\f1c5\",\n \"box-arrow-up\": \"\\f1c6\",\n \"box-seam\": \"\\f1c7\",\n \"box\": \"\\f1c8\",\n \"braces\": \"\\f1c9\",\n \"bricks\": \"\\f1ca\",\n \"briefcase-fill\": \"\\f1cb\",\n \"briefcase\": \"\\f1cc\",\n \"brightness-alt-high-fill\": \"\\f1cd\",\n \"brightness-alt-high\": \"\\f1ce\",\n \"brightness-alt-low-fill\": \"\\f1cf\",\n \"brightness-alt-low\": \"\\f1d0\",\n \"brightness-high-fill\": \"\\f1d1\",\n \"brightness-high\": \"\\f1d2\",\n \"brightness-low-fill\": \"\\f1d3\",\n \"brightness-low\": \"\\f1d4\",\n \"broadcast-pin\": \"\\f1d5\",\n \"broadcast\": \"\\f1d6\",\n \"brush-fill\": \"\\f1d7\",\n \"brush\": \"\\f1d8\",\n \"bucket-fill\": \"\\f1d9\",\n \"bucket\": \"\\f1da\",\n \"bug-fill\": \"\\f1db\",\n \"bug\": \"\\f1dc\",\n \"building\": \"\\f1dd\",\n \"bullseye\": \"\\f1de\",\n \"calculator-fill\": \"\\f1df\",\n \"calculator\": \"\\f1e0\",\n \"calendar-check-fill\": \"\\f1e1\",\n \"calendar-check\": \"\\f1e2\",\n \"calendar-date-fill\": \"\\f1e3\",\n \"calendar-date\": \"\\f1e4\",\n \"calendar-day-fill\": \"\\f1e5\",\n \"calendar-day\": \"\\f1e6\",\n \"calendar-event-fill\": \"\\f1e7\",\n \"calendar-event\": \"\\f1e8\",\n \"calendar-fill\": \"\\f1e9\",\n \"calendar-minus-fill\": \"\\f1ea\",\n \"calendar-minus\": \"\\f1eb\",\n \"calendar-month-fill\": \"\\f1ec\",\n \"calendar-month\": \"\\f1ed\",\n \"calendar-plus-fill\": \"\\f1ee\",\n \"calendar-plus\": \"\\f1ef\",\n \"calendar-range-fill\": \"\\f1f0\",\n \"calendar-range\": \"\\f1f1\",\n \"calendar-week-fill\": \"\\f1f2\",\n \"calendar-week\": \"\\f1f3\",\n \"calendar-x-fill\": \"\\f1f4\",\n \"calendar-x\": \"\\f1f5\",\n \"calendar\": \"\\f1f6\",\n \"calendar2-check-fill\": \"\\f1f7\",\n \"calendar2-check\": \"\\f1f8\",\n \"calendar2-date-fill\": \"\\f1f9\",\n \"calendar2-date\": \"\\f1fa\",\n \"calendar2-day-fill\": \"\\f1fb\",\n \"calendar2-day\": \"\\f1fc\",\n \"calendar2-event-fill\": \"\\f1fd\",\n \"calendar2-event\": \"\\f1fe\",\n \"calendar2-fill\": \"\\f1ff\",\n \"calendar2-minus-fill\": \"\\f200\",\n \"calendar2-minus\": \"\\f201\",\n \"calendar2-month-fill\": \"\\f202\",\n \"calendar2-month\": \"\\f203\",\n \"calendar2-plus-fill\": \"\\f204\",\n \"calendar2-plus\": \"\\f205\",\n \"calendar2-range-fill\": \"\\f206\",\n \"calendar2-range\": \"\\f207\",\n \"calendar2-week-fill\": \"\\f208\",\n \"calendar2-week\": \"\\f209\",\n \"calendar2-x-fill\": \"\\f20a\",\n \"calendar2-x\": \"\\f20b\",\n \"calendar2\": \"\\f20c\",\n \"calendar3-event-fill\": \"\\f20d\",\n \"calendar3-event\": \"\\f20e\",\n \"calendar3-fill\": \"\\f20f\",\n \"calendar3-range-fill\": \"\\f210\",\n \"calendar3-range\": \"\\f211\",\n \"calendar3-week-fill\": \"\\f212\",\n \"calendar3-week\": \"\\f213\",\n \"calendar3\": \"\\f214\",\n \"calendar4-event\": \"\\f215\",\n \"calendar4-range\": \"\\f216\",\n \"calendar4-week\": \"\\f217\",\n \"calendar4\": \"\\f218\",\n \"camera-fill\": \"\\f219\",\n \"camera-reels-fill\": \"\\f21a\",\n \"camera-reels\": \"\\f21b\",\n \"camera-video-fill\": \"\\f21c\",\n \"camera-video-off-fill\": \"\\f21d\",\n \"camera-video-off\": \"\\f21e\",\n \"camera-video\": \"\\f21f\",\n \"camera\": \"\\f220\",\n \"camera2\": \"\\f221\",\n \"capslock-fill\": \"\\f222\",\n \"capslock\": \"\\f223\",\n \"card-checklist\": \"\\f224\",\n \"card-heading\": \"\\f225\",\n \"card-image\": \"\\f226\",\n \"card-list\": \"\\f227\",\n \"card-text\": \"\\f228\",\n \"caret-down-fill\": \"\\f229\",\n \"caret-down-square-fill\": \"\\f22a\",\n \"caret-down-square\": \"\\f22b\",\n \"caret-down\": \"\\f22c\",\n \"caret-left-fill\": \"\\f22d\",\n \"caret-left-square-fill\": \"\\f22e\",\n \"caret-left-square\": \"\\f22f\",\n \"caret-left\": \"\\f230\",\n \"caret-right-fill\": \"\\f231\",\n \"caret-right-square-fill\": \"\\f232\",\n \"caret-right-square\": \"\\f233\",\n \"caret-right\": \"\\f234\",\n \"caret-up-fill\": \"\\f235\",\n \"caret-up-square-fill\": \"\\f236\",\n \"caret-up-square\": \"\\f237\",\n \"caret-up\": \"\\f238\",\n \"cart-check-fill\": \"\\f239\",\n \"cart-check\": \"\\f23a\",\n \"cart-dash-fill\": \"\\f23b\",\n \"cart-dash\": \"\\f23c\",\n \"cart-fill\": \"\\f23d\",\n \"cart-plus-fill\": \"\\f23e\",\n \"cart-plus\": \"\\f23f\",\n \"cart-x-fill\": \"\\f240\",\n \"cart-x\": \"\\f241\",\n \"cart\": \"\\f242\",\n \"cart2\": \"\\f243\",\n \"cart3\": \"\\f244\",\n \"cart4\": \"\\f245\",\n \"cash-stack\": \"\\f246\",\n \"cash\": \"\\f247\",\n \"cast\": \"\\f248\",\n \"chat-dots-fill\": \"\\f249\",\n \"chat-dots\": \"\\f24a\",\n \"chat-fill\": \"\\f24b\",\n \"chat-left-dots-fill\": \"\\f24c\",\n \"chat-left-dots\": \"\\f24d\",\n \"chat-left-fill\": \"\\f24e\",\n \"chat-left-quote-fill\": \"\\f24f\",\n \"chat-left-quote\": \"\\f250\",\n \"chat-left-text-fill\": \"\\f251\",\n \"chat-left-text\": \"\\f252\",\n \"chat-left\": \"\\f253\",\n \"chat-quote-fill\": \"\\f254\",\n \"chat-quote\": \"\\f255\",\n \"chat-right-dots-fill\": \"\\f256\",\n \"chat-right-dots\": \"\\f257\",\n \"chat-right-fill\": \"\\f258\",\n \"chat-right-quote-fill\": \"\\f259\",\n \"chat-right-quote\": \"\\f25a\",\n \"chat-right-text-fill\": \"\\f25b\",\n \"chat-right-text\": \"\\f25c\",\n \"chat-right\": \"\\f25d\",\n \"chat-square-dots-fill\": \"\\f25e\",\n \"chat-square-dots\": \"\\f25f\",\n \"chat-square-fill\": \"\\f260\",\n \"chat-square-quote-fill\": \"\\f261\",\n \"chat-square-quote\": \"\\f262\",\n \"chat-square-text-fill\": \"\\f263\",\n \"chat-square-text\": \"\\f264\",\n \"chat-square\": \"\\f265\",\n \"chat-text-fill\": \"\\f266\",\n \"chat-text\": \"\\f267\",\n \"chat\": \"\\f268\",\n \"check-all\": \"\\f269\",\n \"check-circle-fill\": \"\\f26a\",\n \"check-circle\": \"\\f26b\",\n \"check-square-fill\": \"\\f26c\",\n \"check-square\": \"\\f26d\",\n \"check\": \"\\f26e\",\n \"check2-all\": \"\\f26f\",\n \"check2-circle\": \"\\f270\",\n \"check2-square\": \"\\f271\",\n \"check2\": \"\\f272\",\n \"chevron-bar-contract\": \"\\f273\",\n \"chevron-bar-down\": \"\\f274\",\n \"chevron-bar-expand\": \"\\f275\",\n \"chevron-bar-left\": \"\\f276\",\n \"chevron-bar-right\": \"\\f277\",\n \"chevron-bar-up\": \"\\f278\",\n \"chevron-compact-down\": \"\\f279\",\n \"chevron-compact-left\": \"\\f27a\",\n \"chevron-compact-right\": \"\\f27b\",\n \"chevron-compact-up\": \"\\f27c\",\n \"chevron-contract\": \"\\f27d\",\n \"chevron-double-down\": \"\\f27e\",\n \"chevron-double-left\": \"\\f27f\",\n \"chevron-double-right\": \"\\f280\",\n \"chevron-double-up\": \"\\f281\",\n \"chevron-down\": \"\\f282\",\n \"chevron-expand\": \"\\f283\",\n \"chevron-left\": \"\\f284\",\n \"chevron-right\": \"\\f285\",\n \"chevron-up\": \"\\f286\",\n \"circle-fill\": \"\\f287\",\n \"circle-half\": \"\\f288\",\n \"circle-square\": \"\\f289\",\n \"circle\": \"\\f28a\",\n \"clipboard-check\": \"\\f28b\",\n \"clipboard-data\": \"\\f28c\",\n \"clipboard-minus\": \"\\f28d\",\n \"clipboard-plus\": \"\\f28e\",\n \"clipboard-x\": \"\\f28f\",\n \"clipboard\": \"\\f290\",\n \"clock-fill\": \"\\f291\",\n \"clock-history\": \"\\f292\",\n \"clock\": \"\\f293\",\n \"cloud-arrow-down-fill\": \"\\f294\",\n \"cloud-arrow-down\": \"\\f295\",\n \"cloud-arrow-up-fill\": \"\\f296\",\n \"cloud-arrow-up\": \"\\f297\",\n \"cloud-check-fill\": \"\\f298\",\n \"cloud-check\": \"\\f299\",\n \"cloud-download-fill\": \"\\f29a\",\n \"cloud-download\": \"\\f29b\",\n \"cloud-drizzle-fill\": \"\\f29c\",\n \"cloud-drizzle\": \"\\f29d\",\n \"cloud-fill\": \"\\f29e\",\n \"cloud-fog-fill\": \"\\f29f\",\n \"cloud-fog\": \"\\f2a0\",\n \"cloud-fog2-fill\": \"\\f2a1\",\n \"cloud-fog2\": \"\\f2a2\",\n \"cloud-hail-fill\": \"\\f2a3\",\n \"cloud-hail\": \"\\f2a4\",\n \"cloud-haze-fill\": \"\\f2a6\",\n \"cloud-haze\": \"\\f2a7\",\n \"cloud-haze2-fill\": \"\\f2a8\",\n \"cloud-lightning-fill\": \"\\f2a9\",\n \"cloud-lightning-rain-fill\": \"\\f2aa\",\n \"cloud-lightning-rain\": \"\\f2ab\",\n \"cloud-lightning\": \"\\f2ac\",\n \"cloud-minus-fill\": \"\\f2ad\",\n \"cloud-minus\": \"\\f2ae\",\n \"cloud-moon-fill\": \"\\f2af\",\n \"cloud-moon\": \"\\f2b0\",\n \"cloud-plus-fill\": \"\\f2b1\",\n \"cloud-plus\": \"\\f2b2\",\n \"cloud-rain-fill\": \"\\f2b3\",\n \"cloud-rain-heavy-fill\": \"\\f2b4\",\n \"cloud-rain-heavy\": \"\\f2b5\",\n \"cloud-rain\": \"\\f2b6\",\n \"cloud-slash-fill\": \"\\f2b7\",\n \"cloud-slash\": \"\\f2b8\",\n \"cloud-sleet-fill\": \"\\f2b9\",\n \"cloud-sleet\": \"\\f2ba\",\n \"cloud-snow-fill\": \"\\f2bb\",\n \"cloud-snow\": \"\\f2bc\",\n \"cloud-sun-fill\": \"\\f2bd\",\n \"cloud-sun\": \"\\f2be\",\n \"cloud-upload-fill\": \"\\f2bf\",\n \"cloud-upload\": \"\\f2c0\",\n \"cloud\": \"\\f2c1\",\n \"clouds-fill\": \"\\f2c2\",\n \"clouds\": \"\\f2c3\",\n \"cloudy-fill\": \"\\f2c4\",\n \"cloudy\": \"\\f2c5\",\n \"code-slash\": \"\\f2c6\",\n \"code-square\": \"\\f2c7\",\n \"code\": \"\\f2c8\",\n \"collection-fill\": \"\\f2c9\",\n \"collection-play-fill\": \"\\f2ca\",\n \"collection-play\": \"\\f2cb\",\n \"collection\": \"\\f2cc\",\n \"columns-gap\": \"\\f2cd\",\n \"columns\": \"\\f2ce\",\n \"command\": \"\\f2cf\",\n \"compass-fill\": \"\\f2d0\",\n \"compass\": \"\\f2d1\",\n \"cone-striped\": \"\\f2d2\",\n \"cone\": \"\\f2d3\",\n \"controller\": \"\\f2d4\",\n \"cpu-fill\": \"\\f2d5\",\n \"cpu\": \"\\f2d6\",\n \"credit-card-2-back-fill\": \"\\f2d7\",\n \"credit-card-2-back\": \"\\f2d8\",\n \"credit-card-2-front-fill\": \"\\f2d9\",\n \"credit-card-2-front\": \"\\f2da\",\n \"credit-card-fill\": \"\\f2db\",\n \"credit-card\": \"\\f2dc\",\n \"crop\": \"\\f2dd\",\n \"cup-fill\": \"\\f2de\",\n \"cup-straw\": \"\\f2df\",\n \"cup\": \"\\f2e0\",\n \"cursor-fill\": \"\\f2e1\",\n \"cursor-text\": \"\\f2e2\",\n \"cursor\": \"\\f2e3\",\n \"dash-circle-dotted\": \"\\f2e4\",\n \"dash-circle-fill\": \"\\f2e5\",\n \"dash-circle\": \"\\f2e6\",\n \"dash-square-dotted\": \"\\f2e7\",\n \"dash-square-fill\": \"\\f2e8\",\n \"dash-square\": \"\\f2e9\",\n \"dash\": \"\\f2ea\",\n \"diagram-2-fill\": \"\\f2eb\",\n \"diagram-2\": \"\\f2ec\",\n \"diagram-3-fill\": \"\\f2ed\",\n \"diagram-3\": \"\\f2ee\",\n \"diamond-fill\": \"\\f2ef\",\n \"diamond-half\": \"\\f2f0\",\n \"diamond\": \"\\f2f1\",\n \"dice-1-fill\": \"\\f2f2\",\n \"dice-1\": \"\\f2f3\",\n \"dice-2-fill\": \"\\f2f4\",\n \"dice-2\": \"\\f2f5\",\n \"dice-3-fill\": \"\\f2f6\",\n \"dice-3\": \"\\f2f7\",\n \"dice-4-fill\": \"\\f2f8\",\n \"dice-4\": \"\\f2f9\",\n \"dice-5-fill\": \"\\f2fa\",\n \"dice-5\": \"\\f2fb\",\n \"dice-6-fill\": \"\\f2fc\",\n \"dice-6\": \"\\f2fd\",\n \"disc-fill\": \"\\f2fe\",\n \"disc\": \"\\f2ff\",\n \"discord\": \"\\f300\",\n \"display-fill\": \"\\f301\",\n \"display\": \"\\f302\",\n \"distribute-horizontal\": \"\\f303\",\n \"distribute-vertical\": \"\\f304\",\n \"door-closed-fill\": \"\\f305\",\n \"door-closed\": \"\\f306\",\n \"door-open-fill\": \"\\f307\",\n \"door-open\": \"\\f308\",\n \"dot\": \"\\f309\",\n \"download\": \"\\f30a\",\n \"droplet-fill\": \"\\f30b\",\n \"droplet-half\": \"\\f30c\",\n \"droplet\": \"\\f30d\",\n \"earbuds\": \"\\f30e\",\n \"easel-fill\": \"\\f30f\",\n \"easel\": \"\\f310\",\n \"egg-fill\": \"\\f311\",\n \"egg-fried\": \"\\f312\",\n \"egg\": \"\\f313\",\n \"eject-fill\": \"\\f314\",\n \"eject\": \"\\f315\",\n \"emoji-angry-fill\": \"\\f316\",\n \"emoji-angry\": \"\\f317\",\n \"emoji-dizzy-fill\": \"\\f318\",\n \"emoji-dizzy\": \"\\f319\",\n \"emoji-expressionless-fill\": \"\\f31a\",\n \"emoji-expressionless\": \"\\f31b\",\n \"emoji-frown-fill\": \"\\f31c\",\n \"emoji-frown\": \"\\f31d\",\n \"emoji-heart-eyes-fill\": \"\\f31e\",\n \"emoji-heart-eyes\": \"\\f31f\",\n \"emoji-laughing-fill\": \"\\f320\",\n \"emoji-laughing\": \"\\f321\",\n \"emoji-neutral-fill\": \"\\f322\",\n \"emoji-neutral\": \"\\f323\",\n \"emoji-smile-fill\": \"\\f324\",\n \"emoji-smile-upside-down-fill\": \"\\f325\",\n \"emoji-smile-upside-down\": \"\\f326\",\n \"emoji-smile\": \"\\f327\",\n \"emoji-sunglasses-fill\": \"\\f328\",\n \"emoji-sunglasses\": \"\\f329\",\n \"emoji-wink-fill\": \"\\f32a\",\n \"emoji-wink\": \"\\f32b\",\n \"envelope-fill\": \"\\f32c\",\n \"envelope-open-fill\": \"\\f32d\",\n \"envelope-open\": \"\\f32e\",\n \"envelope\": \"\\f32f\",\n \"eraser-fill\": \"\\f330\",\n \"eraser\": \"\\f331\",\n \"exclamation-circle-fill\": \"\\f332\",\n \"exclamation-circle\": \"\\f333\",\n \"exclamation-diamond-fill\": \"\\f334\",\n \"exclamation-diamond\": \"\\f335\",\n \"exclamation-octagon-fill\": \"\\f336\",\n \"exclamation-octagon\": \"\\f337\",\n \"exclamation-square-fill\": \"\\f338\",\n \"exclamation-square\": \"\\f339\",\n \"exclamation-triangle-fill\": \"\\f33a\",\n \"exclamation-triangle\": \"\\f33b\",\n \"exclamation\": \"\\f33c\",\n \"exclude\": \"\\f33d\",\n \"eye-fill\": \"\\f33e\",\n \"eye-slash-fill\": \"\\f33f\",\n \"eye-slash\": \"\\f340\",\n \"eye\": \"\\f341\",\n \"eyedropper\": \"\\f342\",\n \"eyeglasses\": \"\\f343\",\n \"facebook\": \"\\f344\",\n \"file-arrow-down-fill\": \"\\f345\",\n \"file-arrow-down\": \"\\f346\",\n \"file-arrow-up-fill\": \"\\f347\",\n \"file-arrow-up\": \"\\f348\",\n \"file-bar-graph-fill\": \"\\f349\",\n \"file-bar-graph\": \"\\f34a\",\n \"file-binary-fill\": \"\\f34b\",\n \"file-binary\": \"\\f34c\",\n \"file-break-fill\": \"\\f34d\",\n \"file-break\": \"\\f34e\",\n \"file-check-fill\": \"\\f34f\",\n \"file-check\": \"\\f350\",\n \"file-code-fill\": \"\\f351\",\n \"file-code\": \"\\f352\",\n \"file-diff-fill\": \"\\f353\",\n \"file-diff\": \"\\f354\",\n \"file-earmark-arrow-down-fill\": \"\\f355\",\n \"file-earmark-arrow-down\": \"\\f356\",\n \"file-earmark-arrow-up-fill\": \"\\f357\",\n \"file-earmark-arrow-up\": \"\\f358\",\n \"file-earmark-bar-graph-fill\": \"\\f359\",\n \"file-earmark-bar-graph\": \"\\f35a\",\n \"file-earmark-binary-fill\": \"\\f35b\",\n \"file-earmark-binary\": \"\\f35c\",\n \"file-earmark-break-fill\": \"\\f35d\",\n \"file-earmark-break\": \"\\f35e\",\n \"file-earmark-check-fill\": \"\\f35f\",\n \"file-earmark-check\": \"\\f360\",\n \"file-earmark-code-fill\": \"\\f361\",\n \"file-earmark-code\": \"\\f362\",\n \"file-earmark-diff-fill\": \"\\f363\",\n \"file-earmark-diff\": \"\\f364\",\n \"file-earmark-easel-fill\": \"\\f365\",\n \"file-earmark-easel\": \"\\f366\",\n \"file-earmark-excel-fill\": \"\\f367\",\n \"file-earmark-excel\": \"\\f368\",\n \"file-earmark-fill\": \"\\f369\",\n \"file-earmark-font-fill\": \"\\f36a\",\n \"file-earmark-font\": \"\\f36b\",\n \"file-earmark-image-fill\": \"\\f36c\",\n \"file-earmark-image\": \"\\f36d\",\n \"file-earmark-lock-fill\": \"\\f36e\",\n \"file-earmark-lock\": \"\\f36f\",\n \"file-earmark-lock2-fill\": \"\\f370\",\n \"file-earmark-lock2\": \"\\f371\",\n \"file-earmark-medical-fill\": \"\\f372\",\n \"file-earmark-medical\": \"\\f373\",\n \"file-earmark-minus-fill\": \"\\f374\",\n \"file-earmark-minus\": \"\\f375\",\n \"file-earmark-music-fill\": \"\\f376\",\n \"file-earmark-music\": \"\\f377\",\n \"file-earmark-person-fill\": \"\\f378\",\n \"file-earmark-person\": \"\\f379\",\n \"file-earmark-play-fill\": \"\\f37a\",\n \"file-earmark-play\": \"\\f37b\",\n \"file-earmark-plus-fill\": \"\\f37c\",\n \"file-earmark-plus\": \"\\f37d\",\n \"file-earmark-post-fill\": \"\\f37e\",\n \"file-earmark-post\": \"\\f37f\",\n \"file-earmark-ppt-fill\": \"\\f380\",\n \"file-earmark-ppt\": \"\\f381\",\n \"file-earmark-richtext-fill\": \"\\f382\",\n \"file-earmark-richtext\": \"\\f383\",\n \"file-earmark-ruled-fill\": \"\\f384\",\n \"file-earmark-ruled\": \"\\f385\",\n \"file-earmark-slides-fill\": \"\\f386\",\n \"file-earmark-slides\": \"\\f387\",\n \"file-earmark-spreadsheet-fill\": \"\\f388\",\n \"file-earmark-spreadsheet\": \"\\f389\",\n \"file-earmark-text-fill\": \"\\f38a\",\n \"file-earmark-text\": \"\\f38b\",\n \"file-earmark-word-fill\": \"\\f38c\",\n \"file-earmark-word\": \"\\f38d\",\n \"file-earmark-x-fill\": \"\\f38e\",\n \"file-earmark-x\": \"\\f38f\",\n \"file-earmark-zip-fill\": \"\\f390\",\n \"file-earmark-zip\": \"\\f391\",\n \"file-earmark\": \"\\f392\",\n \"file-easel-fill\": \"\\f393\",\n \"file-easel\": \"\\f394\",\n \"file-excel-fill\": \"\\f395\",\n \"file-excel\": \"\\f396\",\n \"file-fill\": \"\\f397\",\n \"file-font-fill\": \"\\f398\",\n \"file-font\": \"\\f399\",\n \"file-image-fill\": \"\\f39a\",\n \"file-image\": \"\\f39b\",\n \"file-lock-fill\": \"\\f39c\",\n \"file-lock\": \"\\f39d\",\n \"file-lock2-fill\": \"\\f39e\",\n \"file-lock2\": \"\\f39f\",\n \"file-medical-fill\": \"\\f3a0\",\n \"file-medical\": \"\\f3a1\",\n \"file-minus-fill\": \"\\f3a2\",\n \"file-minus\": \"\\f3a3\",\n \"file-music-fill\": \"\\f3a4\",\n \"file-music\": \"\\f3a5\",\n \"file-person-fill\": \"\\f3a6\",\n \"file-person\": \"\\f3a7\",\n \"file-play-fill\": \"\\f3a8\",\n \"file-play\": \"\\f3a9\",\n \"file-plus-fill\": \"\\f3aa\",\n \"file-plus\": \"\\f3ab\",\n \"file-post-fill\": \"\\f3ac\",\n \"file-post\": \"\\f3ad\",\n \"file-ppt-fill\": \"\\f3ae\",\n \"file-ppt\": \"\\f3af\",\n \"file-richtext-fill\": \"\\f3b0\",\n \"file-richtext\": \"\\f3b1\",\n \"file-ruled-fill\": \"\\f3b2\",\n \"file-ruled\": \"\\f3b3\",\n \"file-slides-fill\": \"\\f3b4\",\n \"file-slides\": \"\\f3b5\",\n \"file-spreadsheet-fill\": \"\\f3b6\",\n \"file-spreadsheet\": \"\\f3b7\",\n \"file-text-fill\": \"\\f3b8\",\n \"file-text\": \"\\f3b9\",\n \"file-word-fill\": \"\\f3ba\",\n \"file-word\": \"\\f3bb\",\n \"file-x-fill\": \"\\f3bc\",\n \"file-x\": \"\\f3bd\",\n \"file-zip-fill\": \"\\f3be\",\n \"file-zip\": \"\\f3bf\",\n \"file\": \"\\f3c0\",\n \"files-alt\": \"\\f3c1\",\n \"files\": \"\\f3c2\",\n \"film\": \"\\f3c3\",\n \"filter-circle-fill\": \"\\f3c4\",\n \"filter-circle\": \"\\f3c5\",\n \"filter-left\": \"\\f3c6\",\n \"filter-right\": \"\\f3c7\",\n \"filter-square-fill\": \"\\f3c8\",\n \"filter-square\": \"\\f3c9\",\n \"filter\": \"\\f3ca\",\n \"flag-fill\": \"\\f3cb\",\n \"flag\": \"\\f3cc\",\n \"flower1\": \"\\f3cd\",\n \"flower2\": \"\\f3ce\",\n \"flower3\": \"\\f3cf\",\n \"folder-check\": \"\\f3d0\",\n \"folder-fill\": \"\\f3d1\",\n \"folder-minus\": \"\\f3d2\",\n \"folder-plus\": \"\\f3d3\",\n \"folder-symlink-fill\": \"\\f3d4\",\n \"folder-symlink\": \"\\f3d5\",\n \"folder-x\": \"\\f3d6\",\n \"folder\": \"\\f3d7\",\n \"folder2-open\": \"\\f3d8\",\n \"folder2\": \"\\f3d9\",\n \"fonts\": \"\\f3da\",\n \"forward-fill\": \"\\f3db\",\n \"forward\": \"\\f3dc\",\n \"front\": \"\\f3dd\",\n \"fullscreen-exit\": \"\\f3de\",\n \"fullscreen\": \"\\f3df\",\n \"funnel-fill\": \"\\f3e0\",\n \"funnel\": \"\\f3e1\",\n \"gear-fill\": \"\\f3e2\",\n \"gear-wide-connected\": \"\\f3e3\",\n \"gear-wide\": \"\\f3e4\",\n \"gear\": \"\\f3e5\",\n \"gem\": \"\\f3e6\",\n \"geo-alt-fill\": \"\\f3e7\",\n \"geo-alt\": \"\\f3e8\",\n \"geo-fill\": \"\\f3e9\",\n \"geo\": \"\\f3ea\",\n \"gift-fill\": \"\\f3eb\",\n \"gift\": \"\\f3ec\",\n \"github\": \"\\f3ed\",\n \"globe\": \"\\f3ee\",\n \"globe2\": \"\\f3ef\",\n \"google\": \"\\f3f0\",\n \"graph-down\": \"\\f3f1\",\n \"graph-up\": \"\\f3f2\",\n \"grid-1x2-fill\": \"\\f3f3\",\n \"grid-1x2\": \"\\f3f4\",\n \"grid-3x2-gap-fill\": \"\\f3f5\",\n \"grid-3x2-gap\": \"\\f3f6\",\n \"grid-3x2\": \"\\f3f7\",\n \"grid-3x3-gap-fill\": \"\\f3f8\",\n \"grid-3x3-gap\": \"\\f3f9\",\n \"grid-3x3\": \"\\f3fa\",\n \"grid-fill\": \"\\f3fb\",\n \"grid\": \"\\f3fc\",\n \"grip-horizontal\": \"\\f3fd\",\n \"grip-vertical\": \"\\f3fe\",\n \"hammer\": \"\\f3ff\",\n \"hand-index-fill\": \"\\f400\",\n \"hand-index-thumb-fill\": \"\\f401\",\n \"hand-index-thumb\": \"\\f402\",\n \"hand-index\": \"\\f403\",\n \"hand-thumbs-down-fill\": \"\\f404\",\n \"hand-thumbs-down\": \"\\f405\",\n \"hand-thumbs-up-fill\": \"\\f406\",\n \"hand-thumbs-up\": \"\\f407\",\n \"handbag-fill\": \"\\f408\",\n \"handbag\": \"\\f409\",\n \"hash\": \"\\f40a\",\n \"hdd-fill\": \"\\f40b\",\n \"hdd-network-fill\": \"\\f40c\",\n \"hdd-network\": \"\\f40d\",\n \"hdd-rack-fill\": \"\\f40e\",\n \"hdd-rack\": \"\\f40f\",\n \"hdd-stack-fill\": \"\\f410\",\n \"hdd-stack\": \"\\f411\",\n \"hdd\": \"\\f412\",\n \"headphones\": \"\\f413\",\n \"headset\": \"\\f414\",\n \"heart-fill\": \"\\f415\",\n \"heart-half\": \"\\f416\",\n \"heart\": \"\\f417\",\n \"heptagon-fill\": \"\\f418\",\n \"heptagon-half\": \"\\f419\",\n \"heptagon\": \"\\f41a\",\n \"hexagon-fill\": \"\\f41b\",\n \"hexagon-half\": \"\\f41c\",\n \"hexagon\": \"\\f41d\",\n \"hourglass-bottom\": \"\\f41e\",\n \"hourglass-split\": \"\\f41f\",\n \"hourglass-top\": \"\\f420\",\n \"hourglass\": \"\\f421\",\n \"house-door-fill\": \"\\f422\",\n \"house-door\": \"\\f423\",\n \"house-fill\": \"\\f424\",\n \"house\": \"\\f425\",\n \"hr\": \"\\f426\",\n \"hurricane\": \"\\f427\",\n \"image-alt\": \"\\f428\",\n \"image-fill\": \"\\f429\",\n \"image\": \"\\f42a\",\n \"images\": \"\\f42b\",\n \"inbox-fill\": \"\\f42c\",\n \"inbox\": \"\\f42d\",\n \"inboxes-fill\": \"\\f42e\",\n \"inboxes\": \"\\f42f\",\n \"info-circle-fill\": \"\\f430\",\n \"info-circle\": \"\\f431\",\n \"info-square-fill\": \"\\f432\",\n \"info-square\": \"\\f433\",\n \"info\": \"\\f434\",\n \"input-cursor-text\": \"\\f435\",\n \"input-cursor\": \"\\f436\",\n \"instagram\": \"\\f437\",\n \"intersect\": \"\\f438\",\n \"journal-album\": \"\\f439\",\n \"journal-arrow-down\": \"\\f43a\",\n \"journal-arrow-up\": \"\\f43b\",\n \"journal-bookmark-fill\": \"\\f43c\",\n \"journal-bookmark\": \"\\f43d\",\n \"journal-check\": \"\\f43e\",\n \"journal-code\": \"\\f43f\",\n \"journal-medical\": \"\\f440\",\n \"journal-minus\": \"\\f441\",\n \"journal-plus\": \"\\f442\",\n \"journal-richtext\": \"\\f443\",\n \"journal-text\": \"\\f444\",\n \"journal-x\": \"\\f445\",\n \"journal\": \"\\f446\",\n \"journals\": \"\\f447\",\n \"joystick\": \"\\f448\",\n \"justify-left\": \"\\f449\",\n \"justify-right\": \"\\f44a\",\n \"justify\": \"\\f44b\",\n \"kanban-fill\": \"\\f44c\",\n \"kanban\": \"\\f44d\",\n \"key-fill\": \"\\f44e\",\n \"key\": \"\\f44f\",\n \"keyboard-fill\": \"\\f450\",\n \"keyboard\": \"\\f451\",\n \"ladder\": \"\\f452\",\n \"lamp-fill\": \"\\f453\",\n \"lamp\": \"\\f454\",\n \"laptop-fill\": \"\\f455\",\n \"laptop\": \"\\f456\",\n \"layer-backward\": \"\\f457\",\n \"layer-forward\": \"\\f458\",\n \"layers-fill\": \"\\f459\",\n \"layers-half\": \"\\f45a\",\n \"layers\": \"\\f45b\",\n \"layout-sidebar-inset-reverse\": \"\\f45c\",\n \"layout-sidebar-inset\": \"\\f45d\",\n \"layout-sidebar-reverse\": \"\\f45e\",\n \"layout-sidebar\": \"\\f45f\",\n \"layout-split\": \"\\f460\",\n \"layout-text-sidebar-reverse\": \"\\f461\",\n \"layout-text-sidebar\": \"\\f462\",\n \"layout-text-window-reverse\": \"\\f463\",\n \"layout-text-window\": \"\\f464\",\n \"layout-three-columns\": \"\\f465\",\n \"layout-wtf\": \"\\f466\",\n \"life-preserver\": \"\\f467\",\n \"lightbulb-fill\": \"\\f468\",\n \"lightbulb-off-fill\": \"\\f469\",\n \"lightbulb-off\": \"\\f46a\",\n \"lightbulb\": \"\\f46b\",\n \"lightning-charge-fill\": \"\\f46c\",\n \"lightning-charge\": \"\\f46d\",\n \"lightning-fill\": \"\\f46e\",\n \"lightning\": \"\\f46f\",\n \"link-45deg\": \"\\f470\",\n \"link\": \"\\f471\",\n \"linkedin\": \"\\f472\",\n \"list-check\": \"\\f473\",\n \"list-nested\": \"\\f474\",\n \"list-ol\": \"\\f475\",\n \"list-stars\": \"\\f476\",\n \"list-task\": \"\\f477\",\n \"list-ul\": \"\\f478\",\n \"list\": \"\\f479\",\n \"lock-fill\": \"\\f47a\",\n \"lock\": \"\\f47b\",\n \"mailbox\": \"\\f47c\",\n \"mailbox2\": \"\\f47d\",\n \"map-fill\": \"\\f47e\",\n \"map\": \"\\f47f\",\n \"markdown-fill\": \"\\f480\",\n \"markdown\": \"\\f481\",\n \"mask\": \"\\f482\",\n \"megaphone-fill\": \"\\f483\",\n \"megaphone\": \"\\f484\",\n \"menu-app-fill\": \"\\f485\",\n \"menu-app\": \"\\f486\",\n \"menu-button-fill\": \"\\f487\",\n \"menu-button-wide-fill\": \"\\f488\",\n \"menu-button-wide\": \"\\f489\",\n \"menu-button\": \"\\f48a\",\n \"menu-down\": \"\\f48b\",\n \"menu-up\": \"\\f48c\",\n \"mic-fill\": \"\\f48d\",\n \"mic-mute-fill\": \"\\f48e\",\n \"mic-mute\": \"\\f48f\",\n \"mic\": \"\\f490\",\n \"minecart-loaded\": \"\\f491\",\n \"minecart\": \"\\f492\",\n \"moisture\": \"\\f493\",\n \"moon-fill\": \"\\f494\",\n \"moon-stars-fill\": \"\\f495\",\n \"moon-stars\": \"\\f496\",\n \"moon\": \"\\f497\",\n \"mouse-fill\": \"\\f498\",\n \"mouse\": \"\\f499\",\n \"mouse2-fill\": \"\\f49a\",\n \"mouse2\": \"\\f49b\",\n \"mouse3-fill\": \"\\f49c\",\n \"mouse3\": \"\\f49d\",\n \"music-note-beamed\": \"\\f49e\",\n \"music-note-list\": \"\\f49f\",\n \"music-note\": \"\\f4a0\",\n \"music-player-fill\": \"\\f4a1\",\n \"music-player\": \"\\f4a2\",\n \"newspaper\": \"\\f4a3\",\n \"node-minus-fill\": \"\\f4a4\",\n \"node-minus\": \"\\f4a5\",\n \"node-plus-fill\": \"\\f4a6\",\n \"node-plus\": \"\\f4a7\",\n \"nut-fill\": \"\\f4a8\",\n \"nut\": \"\\f4a9\",\n \"octagon-fill\": \"\\f4aa\",\n \"octagon-half\": \"\\f4ab\",\n \"octagon\": \"\\f4ac\",\n \"option\": \"\\f4ad\",\n \"outlet\": \"\\f4ae\",\n \"paint-bucket\": \"\\f4af\",\n \"palette-fill\": \"\\f4b0\",\n \"palette\": \"\\f4b1\",\n \"palette2\": \"\\f4b2\",\n \"paperclip\": \"\\f4b3\",\n \"paragraph\": \"\\f4b4\",\n \"patch-check-fill\": \"\\f4b5\",\n \"patch-check\": \"\\f4b6\",\n \"patch-exclamation-fill\": \"\\f4b7\",\n \"patch-exclamation\": \"\\f4b8\",\n \"patch-minus-fill\": \"\\f4b9\",\n \"patch-minus\": \"\\f4ba\",\n \"patch-plus-fill\": \"\\f4bb\",\n \"patch-plus\": \"\\f4bc\",\n \"patch-question-fill\": \"\\f4bd\",\n \"patch-question\": \"\\f4be\",\n \"pause-btn-fill\": \"\\f4bf\",\n \"pause-btn\": \"\\f4c0\",\n \"pause-circle-fill\": \"\\f4c1\",\n \"pause-circle\": \"\\f4c2\",\n \"pause-fill\": \"\\f4c3\",\n \"pause\": \"\\f4c4\",\n \"peace-fill\": \"\\f4c5\",\n \"peace\": \"\\f4c6\",\n \"pen-fill\": \"\\f4c7\",\n \"pen\": \"\\f4c8\",\n \"pencil-fill\": \"\\f4c9\",\n \"pencil-square\": \"\\f4ca\",\n \"pencil\": \"\\f4cb\",\n \"pentagon-fill\": \"\\f4cc\",\n \"pentagon-half\": \"\\f4cd\",\n \"pentagon\": \"\\f4ce\",\n \"people-fill\": \"\\f4cf\",\n \"people\": \"\\f4d0\",\n \"percent\": \"\\f4d1\",\n \"person-badge-fill\": \"\\f4d2\",\n \"person-badge\": \"\\f4d3\",\n \"person-bounding-box\": \"\\f4d4\",\n \"person-check-fill\": \"\\f4d5\",\n \"person-check\": \"\\f4d6\",\n \"person-circle\": \"\\f4d7\",\n \"person-dash-fill\": \"\\f4d8\",\n \"person-dash\": \"\\f4d9\",\n \"person-fill\": \"\\f4da\",\n \"person-lines-fill\": \"\\f4db\",\n \"person-plus-fill\": \"\\f4dc\",\n \"person-plus\": \"\\f4dd\",\n \"person-square\": \"\\f4de\",\n \"person-x-fill\": \"\\f4df\",\n \"person-x\": \"\\f4e0\",\n \"person\": \"\\f4e1\",\n \"phone-fill\": \"\\f4e2\",\n \"phone-landscape-fill\": \"\\f4e3\",\n \"phone-landscape\": \"\\f4e4\",\n \"phone-vibrate-fill\": \"\\f4e5\",\n \"phone-vibrate\": \"\\f4e6\",\n \"phone\": \"\\f4e7\",\n \"pie-chart-fill\": \"\\f4e8\",\n \"pie-chart\": \"\\f4e9\",\n \"pin-angle-fill\": \"\\f4ea\",\n \"pin-angle\": \"\\f4eb\",\n \"pin-fill\": \"\\f4ec\",\n \"pin\": \"\\f4ed\",\n \"pip-fill\": \"\\f4ee\",\n \"pip\": \"\\f4ef\",\n \"play-btn-fill\": \"\\f4f0\",\n \"play-btn\": \"\\f4f1\",\n \"play-circle-fill\": \"\\f4f2\",\n \"play-circle\": \"\\f4f3\",\n \"play-fill\": \"\\f4f4\",\n \"play\": \"\\f4f5\",\n \"plug-fill\": \"\\f4f6\",\n \"plug\": \"\\f4f7\",\n \"plus-circle-dotted\": \"\\f4f8\",\n \"plus-circle-fill\": \"\\f4f9\",\n \"plus-circle\": \"\\f4fa\",\n \"plus-square-dotted\": \"\\f4fb\",\n \"plus-square-fill\": \"\\f4fc\",\n \"plus-square\": \"\\f4fd\",\n \"plus\": \"\\f4fe\",\n \"power\": \"\\f4ff\",\n \"printer-fill\": \"\\f500\",\n \"printer\": \"\\f501\",\n \"puzzle-fill\": \"\\f502\",\n \"puzzle\": \"\\f503\",\n \"question-circle-fill\": \"\\f504\",\n \"question-circle\": \"\\f505\",\n \"question-diamond-fill\": \"\\f506\",\n \"question-diamond\": \"\\f507\",\n \"question-octagon-fill\": \"\\f508\",\n \"question-octagon\": \"\\f509\",\n \"question-square-fill\": \"\\f50a\",\n \"question-square\": \"\\f50b\",\n \"question\": \"\\f50c\",\n \"rainbow\": \"\\f50d\",\n \"receipt-cutoff\": \"\\f50e\",\n \"receipt\": \"\\f50f\",\n \"reception-0\": \"\\f510\",\n \"reception-1\": \"\\f511\",\n \"reception-2\": \"\\f512\",\n \"reception-3\": \"\\f513\",\n \"reception-4\": \"\\f514\",\n \"record-btn-fill\": \"\\f515\",\n \"record-btn\": \"\\f516\",\n \"record-circle-fill\": \"\\f517\",\n \"record-circle\": \"\\f518\",\n \"record-fill\": \"\\f519\",\n \"record\": \"\\f51a\",\n \"record2-fill\": \"\\f51b\",\n \"record2\": \"\\f51c\",\n \"reply-all-fill\": \"\\f51d\",\n \"reply-all\": \"\\f51e\",\n \"reply-fill\": \"\\f51f\",\n \"reply\": \"\\f520\",\n \"rss-fill\": \"\\f521\",\n \"rss\": \"\\f522\",\n \"rulers\": \"\\f523\",\n \"save-fill\": \"\\f524\",\n \"save\": \"\\f525\",\n \"save2-fill\": \"\\f526\",\n \"save2\": \"\\f527\",\n \"scissors\": \"\\f528\",\n \"screwdriver\": \"\\f529\",\n \"search\": \"\\f52a\",\n \"segmented-nav\": \"\\f52b\",\n \"server\": \"\\f52c\",\n \"share-fill\": \"\\f52d\",\n \"share\": \"\\f52e\",\n \"shield-check\": \"\\f52f\",\n \"shield-exclamation\": \"\\f530\",\n \"shield-fill-check\": \"\\f531\",\n \"shield-fill-exclamation\": \"\\f532\",\n \"shield-fill-minus\": \"\\f533\",\n \"shield-fill-plus\": \"\\f534\",\n \"shield-fill-x\": \"\\f535\",\n \"shield-fill\": \"\\f536\",\n \"shield-lock-fill\": \"\\f537\",\n \"shield-lock\": \"\\f538\",\n \"shield-minus\": \"\\f539\",\n \"shield-plus\": \"\\f53a\",\n \"shield-shaded\": \"\\f53b\",\n \"shield-slash-fill\": \"\\f53c\",\n \"shield-slash\": \"\\f53d\",\n \"shield-x\": \"\\f53e\",\n \"shield\": \"\\f53f\",\n \"shift-fill\": \"\\f540\",\n \"shift\": \"\\f541\",\n \"shop-window\": \"\\f542\",\n \"shop\": \"\\f543\",\n \"shuffle\": \"\\f544\",\n \"signpost-2-fill\": \"\\f545\",\n \"signpost-2\": \"\\f546\",\n \"signpost-fill\": \"\\f547\",\n \"signpost-split-fill\": \"\\f548\",\n \"signpost-split\": \"\\f549\",\n \"signpost\": \"\\f54a\",\n \"sim-fill\": \"\\f54b\",\n \"sim\": \"\\f54c\",\n \"skip-backward-btn-fill\": \"\\f54d\",\n \"skip-backward-btn\": \"\\f54e\",\n \"skip-backward-circle-fill\": \"\\f54f\",\n \"skip-backward-circle\": \"\\f550\",\n \"skip-backward-fill\": \"\\f551\",\n \"skip-backward\": \"\\f552\",\n \"skip-end-btn-fill\": \"\\f553\",\n \"skip-end-btn\": \"\\f554\",\n \"skip-end-circle-fill\": \"\\f555\",\n \"skip-end-circle\": \"\\f556\",\n \"skip-end-fill\": \"\\f557\",\n \"skip-end\": \"\\f558\",\n \"skip-forward-btn-fill\": \"\\f559\",\n \"skip-forward-btn\": \"\\f55a\",\n \"skip-forward-circle-fill\": \"\\f55b\",\n \"skip-forward-circle\": \"\\f55c\",\n \"skip-forward-fill\": \"\\f55d\",\n \"skip-forward\": \"\\f55e\",\n \"skip-start-btn-fill\": \"\\f55f\",\n \"skip-start-btn\": \"\\f560\",\n \"skip-start-circle-fill\": \"\\f561\",\n \"skip-start-circle\": \"\\f562\",\n \"skip-start-fill\": \"\\f563\",\n \"skip-start\": \"\\f564\",\n \"slack\": \"\\f565\",\n \"slash-circle-fill\": \"\\f566\",\n \"slash-circle\": \"\\f567\",\n \"slash-square-fill\": \"\\f568\",\n \"slash-square\": \"\\f569\",\n \"slash\": \"\\f56a\",\n \"sliders\": \"\\f56b\",\n \"smartwatch\": \"\\f56c\",\n \"snow\": \"\\f56d\",\n \"snow2\": \"\\f56e\",\n \"snow3\": \"\\f56f\",\n \"sort-alpha-down-alt\": \"\\f570\",\n \"sort-alpha-down\": \"\\f571\",\n \"sort-alpha-up-alt\": \"\\f572\",\n \"sort-alpha-up\": \"\\f573\",\n \"sort-down-alt\": \"\\f574\",\n \"sort-down\": \"\\f575\",\n \"sort-numeric-down-alt\": \"\\f576\",\n \"sort-numeric-down\": \"\\f577\",\n \"sort-numeric-up-alt\": \"\\f578\",\n \"sort-numeric-up\": \"\\f579\",\n \"sort-up-alt\": \"\\f57a\",\n \"sort-up\": \"\\f57b\",\n \"soundwave\": \"\\f57c\",\n \"speaker-fill\": \"\\f57d\",\n \"speaker\": \"\\f57e\",\n \"speedometer\": \"\\f57f\",\n \"speedometer2\": \"\\f580\",\n \"spellcheck\": \"\\f581\",\n \"square-fill\": \"\\f582\",\n \"square-half\": \"\\f583\",\n \"square\": \"\\f584\",\n \"stack\": \"\\f585\",\n \"star-fill\": \"\\f586\",\n \"star-half\": \"\\f587\",\n \"star\": \"\\f588\",\n \"stars\": \"\\f589\",\n \"stickies-fill\": \"\\f58a\",\n \"stickies\": \"\\f58b\",\n \"sticky-fill\": \"\\f58c\",\n \"sticky\": \"\\f58d\",\n \"stop-btn-fill\": \"\\f58e\",\n \"stop-btn\": \"\\f58f\",\n \"stop-circle-fill\": \"\\f590\",\n \"stop-circle\": \"\\f591\",\n \"stop-fill\": \"\\f592\",\n \"stop\": \"\\f593\",\n \"stoplights-fill\": \"\\f594\",\n \"stoplights\": \"\\f595\",\n \"stopwatch-fill\": \"\\f596\",\n \"stopwatch\": \"\\f597\",\n \"subtract\": \"\\f598\",\n \"suit-club-fill\": \"\\f599\",\n \"suit-club\": \"\\f59a\",\n \"suit-diamond-fill\": \"\\f59b\",\n \"suit-diamond\": \"\\f59c\",\n \"suit-heart-fill\": \"\\f59d\",\n \"suit-heart\": \"\\f59e\",\n \"suit-spade-fill\": \"\\f59f\",\n \"suit-spade\": \"\\f5a0\",\n \"sun-fill\": \"\\f5a1\",\n \"sun\": \"\\f5a2\",\n \"sunglasses\": \"\\f5a3\",\n \"sunrise-fill\": \"\\f5a4\",\n \"sunrise\": \"\\f5a5\",\n \"sunset-fill\": \"\\f5a6\",\n \"sunset\": \"\\f5a7\",\n \"symmetry-horizontal\": \"\\f5a8\",\n \"symmetry-vertical\": \"\\f5a9\",\n \"table\": \"\\f5aa\",\n \"tablet-fill\": \"\\f5ab\",\n \"tablet-landscape-fill\": \"\\f5ac\",\n \"tablet-landscape\": \"\\f5ad\",\n \"tablet\": \"\\f5ae\",\n \"tag-fill\": \"\\f5af\",\n \"tag\": \"\\f5b0\",\n \"tags-fill\": \"\\f5b1\",\n \"tags\": \"\\f5b2\",\n \"telegram\": \"\\f5b3\",\n \"telephone-fill\": \"\\f5b4\",\n \"telephone-forward-fill\": \"\\f5b5\",\n \"telephone-forward\": \"\\f5b6\",\n \"telephone-inbound-fill\": \"\\f5b7\",\n \"telephone-inbound\": \"\\f5b8\",\n \"telephone-minus-fill\": \"\\f5b9\",\n \"telephone-minus\": \"\\f5ba\",\n \"telephone-outbound-fill\": \"\\f5bb\",\n \"telephone-outbound\": \"\\f5bc\",\n \"telephone-plus-fill\": \"\\f5bd\",\n \"telephone-plus\": \"\\f5be\",\n \"telephone-x-fill\": \"\\f5bf\",\n \"telephone-x\": \"\\f5c0\",\n \"telephone\": \"\\f5c1\",\n \"terminal-fill\": \"\\f5c2\",\n \"terminal\": \"\\f5c3\",\n \"text-center\": \"\\f5c4\",\n \"text-indent-left\": \"\\f5c5\",\n \"text-indent-right\": \"\\f5c6\",\n \"text-left\": \"\\f5c7\",\n \"text-paragraph\": \"\\f5c8\",\n \"text-right\": \"\\f5c9\",\n \"textarea-resize\": \"\\f5ca\",\n \"textarea-t\": \"\\f5cb\",\n \"textarea\": \"\\f5cc\",\n \"thermometer-half\": \"\\f5cd\",\n \"thermometer-high\": \"\\f5ce\",\n \"thermometer-low\": \"\\f5cf\",\n \"thermometer-snow\": \"\\f5d0\",\n \"thermometer-sun\": \"\\f5d1\",\n \"thermometer\": \"\\f5d2\",\n \"three-dots-vertical\": \"\\f5d3\",\n \"three-dots\": \"\\f5d4\",\n \"toggle-off\": \"\\f5d5\",\n \"toggle-on\": \"\\f5d6\",\n \"toggle2-off\": \"\\f5d7\",\n \"toggle2-on\": \"\\f5d8\",\n \"toggles\": \"\\f5d9\",\n \"toggles2\": \"\\f5da\",\n \"tools\": \"\\f5db\",\n \"tornado\": \"\\f5dc\",\n \"trash-fill\": \"\\f5dd\",\n \"trash\": \"\\f5de\",\n \"trash2-fill\": \"\\f5df\",\n \"trash2\": \"\\f5e0\",\n \"tree-fill\": \"\\f5e1\",\n \"tree\": \"\\f5e2\",\n \"triangle-fill\": \"\\f5e3\",\n \"triangle-half\": \"\\f5e4\",\n \"triangle\": \"\\f5e5\",\n \"trophy-fill\": \"\\f5e6\",\n \"trophy\": \"\\f5e7\",\n \"tropical-storm\": \"\\f5e8\",\n \"truck-flatbed\": \"\\f5e9\",\n \"truck\": \"\\f5ea\",\n \"tsunami\": \"\\f5eb\",\n \"tv-fill\": \"\\f5ec\",\n \"tv\": \"\\f5ed\",\n \"twitch\": \"\\f5ee\",\n \"twitter\": \"\\f5ef\",\n \"type-bold\": \"\\f5f0\",\n \"type-h1\": \"\\f5f1\",\n \"type-h2\": \"\\f5f2\",\n \"type-h3\": \"\\f5f3\",\n \"type-italic\": \"\\f5f4\",\n \"type-strikethrough\": \"\\f5f5\",\n \"type-underline\": \"\\f5f6\",\n \"type\": \"\\f5f7\",\n \"ui-checks-grid\": \"\\f5f8\",\n \"ui-checks\": \"\\f5f9\",\n \"ui-radios-grid\": \"\\f5fa\",\n \"ui-radios\": \"\\f5fb\",\n \"umbrella-fill\": \"\\f5fc\",\n \"umbrella\": \"\\f5fd\",\n \"union\": \"\\f5fe\",\n \"unlock-fill\": \"\\f5ff\",\n \"unlock\": \"\\f600\",\n \"upc-scan\": \"\\f601\",\n \"upc\": \"\\f602\",\n \"upload\": \"\\f603\",\n \"vector-pen\": \"\\f604\",\n \"view-list\": \"\\f605\",\n \"view-stacked\": \"\\f606\",\n \"vinyl-fill\": \"\\f607\",\n \"vinyl\": \"\\f608\",\n \"voicemail\": \"\\f609\",\n \"volume-down-fill\": \"\\f60a\",\n \"volume-down\": \"\\f60b\",\n \"volume-mute-fill\": \"\\f60c\",\n \"volume-mute\": \"\\f60d\",\n \"volume-off-fill\": \"\\f60e\",\n \"volume-off\": \"\\f60f\",\n \"volume-up-fill\": \"\\f610\",\n \"volume-up\": \"\\f611\",\n \"vr\": \"\\f612\",\n \"wallet-fill\": \"\\f613\",\n \"wallet\": \"\\f614\",\n \"wallet2\": \"\\f615\",\n \"watch\": \"\\f616\",\n \"water\": \"\\f617\",\n \"whatsapp\": \"\\f618\",\n \"wifi-1\": \"\\f619\",\n \"wifi-2\": \"\\f61a\",\n \"wifi-off\": \"\\f61b\",\n \"wifi\": \"\\f61c\",\n \"wind\": \"\\f61d\",\n \"window-dock\": \"\\f61e\",\n \"window-sidebar\": \"\\f61f\",\n \"window\": \"\\f620\",\n \"wrench\": \"\\f621\",\n \"x-circle-fill\": \"\\f622\",\n \"x-circle\": \"\\f623\",\n \"x-diamond-fill\": \"\\f624\",\n \"x-diamond\": \"\\f625\",\n \"x-octagon-fill\": \"\\f626\",\n \"x-octagon\": \"\\f627\",\n \"x-square-fill\": \"\\f628\",\n \"x-square\": \"\\f629\",\n \"x\": \"\\f62a\",\n \"youtube\": \"\\f62b\",\n \"zoom-in\": \"\\f62c\",\n \"zoom-out\": \"\\f62d\",\n \"bank\": \"\\f62e\",\n \"bank2\": \"\\f62f\",\n \"bell-slash-fill\": \"\\f630\",\n \"bell-slash\": \"\\f631\",\n \"cash-coin\": \"\\f632\",\n \"check-lg\": \"\\f633\",\n \"coin\": \"\\f634\",\n \"currency-bitcoin\": \"\\f635\",\n \"currency-dollar\": \"\\f636\",\n \"currency-euro\": \"\\f637\",\n \"currency-exchange\": \"\\f638\",\n \"currency-pound\": \"\\f639\",\n \"currency-yen\": \"\\f63a\",\n \"dash-lg\": \"\\f63b\",\n \"exclamation-lg\": \"\\f63c\",\n \"file-earmark-pdf-fill\": \"\\f63d\",\n \"file-earmark-pdf\": \"\\f63e\",\n \"file-pdf-fill\": \"\\f63f\",\n \"file-pdf\": \"\\f640\",\n \"gender-ambiguous\": \"\\f641\",\n \"gender-female\": \"\\f642\",\n \"gender-male\": \"\\f643\",\n \"gender-trans\": \"\\f644\",\n \"headset-vr\": \"\\f645\",\n \"info-lg\": \"\\f646\",\n \"mastodon\": \"\\f647\",\n \"messenger\": \"\\f648\",\n \"piggy-bank-fill\": \"\\f649\",\n \"piggy-bank\": \"\\f64a\",\n \"pin-map-fill\": \"\\f64b\",\n \"pin-map\": \"\\f64c\",\n \"plus-lg\": \"\\f64d\",\n \"question-lg\": \"\\f64e\",\n \"recycle\": \"\\f64f\",\n \"reddit\": \"\\f650\",\n \"safe-fill\": \"\\f651\",\n \"safe2-fill\": \"\\f652\",\n \"safe2\": \"\\f653\",\n \"sd-card-fill\": \"\\f654\",\n \"sd-card\": \"\\f655\",\n \"skype\": \"\\f656\",\n \"slash-lg\": \"\\f657\",\n \"translate\": \"\\f658\",\n \"x-lg\": \"\\f659\",\n \"safe\": \"\\f65a\",\n \"apple\": \"\\f65b\",\n \"microsoft\": \"\\f65d\",\n \"windows\": \"\\f65e\",\n \"behance\": \"\\f65c\",\n \"dribbble\": \"\\f65f\",\n \"line\": \"\\f660\",\n \"medium\": \"\\f661\",\n \"paypal\": \"\\f662\",\n \"pinterest\": \"\\f663\",\n \"signal\": \"\\f664\",\n \"snapchat\": \"\\f665\",\n \"spotify\": \"\\f666\",\n \"stack-overflow\": \"\\f667\",\n \"strava\": \"\\f668\",\n \"wordpress\": \"\\f669\",\n \"vimeo\": \"\\f66a\",\n \"activity\": \"\\f66b\",\n \"easel2-fill\": \"\\f66c\",\n \"easel2\": \"\\f66d\",\n \"easel3-fill\": \"\\f66e\",\n \"easel3\": \"\\f66f\",\n \"fan\": \"\\f670\",\n \"fingerprint\": \"\\f671\",\n \"graph-down-arrow\": \"\\f672\",\n \"graph-up-arrow\": \"\\f673\",\n \"hypnotize\": \"\\f674\",\n \"magic\": \"\\f675\",\n \"person-rolodex\": \"\\f676\",\n \"person-video\": \"\\f677\",\n \"person-video2\": \"\\f678\",\n \"person-video3\": \"\\f679\",\n \"person-workspace\": \"\\f67a\",\n \"radioactive\": \"\\f67b\",\n \"webcam-fill\": \"\\f67c\",\n \"webcam\": \"\\f67d\",\n \"yin-yang\": \"\\f67e\",\n \"bandaid-fill\": \"\\f680\",\n \"bandaid\": \"\\f681\",\n \"bluetooth\": \"\\f682\",\n \"body-text\": \"\\f683\",\n \"boombox\": \"\\f684\",\n \"boxes\": \"\\f685\",\n \"dpad-fill\": \"\\f686\",\n \"dpad\": \"\\f687\",\n \"ear-fill\": \"\\f688\",\n \"ear\": \"\\f689\",\n \"envelope-check-fill\": \"\\f68b\",\n \"envelope-check\": \"\\f68c\",\n \"envelope-dash-fill\": \"\\f68e\",\n \"envelope-dash\": \"\\f68f\",\n \"envelope-exclamation-fill\": \"\\f691\",\n \"envelope-exclamation\": \"\\f692\",\n \"envelope-plus-fill\": \"\\f693\",\n \"envelope-plus\": \"\\f694\",\n \"envelope-slash-fill\": \"\\f696\",\n \"envelope-slash\": \"\\f697\",\n \"envelope-x-fill\": \"\\f699\",\n \"envelope-x\": \"\\f69a\",\n \"explicit-fill\": \"\\f69b\",\n \"explicit\": \"\\f69c\",\n \"git\": \"\\f69d\",\n \"infinity\": \"\\f69e\",\n \"list-columns-reverse\": \"\\f69f\",\n \"list-columns\": \"\\f6a0\",\n \"meta\": \"\\f6a1\",\n \"nintendo-switch\": \"\\f6a4\",\n \"pc-display-horizontal\": \"\\f6a5\",\n \"pc-display\": \"\\f6a6\",\n \"pc-horizontal\": \"\\f6a7\",\n \"pc\": \"\\f6a8\",\n \"playstation\": \"\\f6a9\",\n \"plus-slash-minus\": \"\\f6aa\",\n \"projector-fill\": \"\\f6ab\",\n \"projector\": \"\\f6ac\",\n \"qr-code-scan\": \"\\f6ad\",\n \"qr-code\": \"\\f6ae\",\n \"quora\": \"\\f6af\",\n \"quote\": \"\\f6b0\",\n \"robot\": \"\\f6b1\",\n \"send-check-fill\": \"\\f6b2\",\n \"send-check\": \"\\f6b3\",\n \"send-dash-fill\": \"\\f6b4\",\n \"send-dash\": \"\\f6b5\",\n \"send-exclamation-fill\": \"\\f6b7\",\n \"send-exclamation\": \"\\f6b8\",\n \"send-fill\": \"\\f6b9\",\n \"send-plus-fill\": \"\\f6ba\",\n \"send-plus\": \"\\f6bb\",\n \"send-slash-fill\": \"\\f6bc\",\n \"send-slash\": \"\\f6bd\",\n \"send-x-fill\": \"\\f6be\",\n \"send-x\": \"\\f6bf\",\n \"send\": \"\\f6c0\",\n \"steam\": \"\\f6c1\",\n \"terminal-dash\": \"\\f6c3\",\n \"terminal-plus\": \"\\f6c4\",\n \"terminal-split\": \"\\f6c5\",\n \"ticket-detailed-fill\": \"\\f6c6\",\n \"ticket-detailed\": \"\\f6c7\",\n \"ticket-fill\": \"\\f6c8\",\n \"ticket-perforated-fill\": \"\\f6c9\",\n \"ticket-perforated\": \"\\f6ca\",\n \"ticket\": \"\\f6cb\",\n \"tiktok\": \"\\f6cc\",\n \"window-dash\": \"\\f6cd\",\n \"window-desktop\": \"\\f6ce\",\n \"window-fullscreen\": \"\\f6cf\",\n \"window-plus\": \"\\f6d0\",\n \"window-split\": \"\\f6d1\",\n \"window-stack\": \"\\f6d2\",\n \"window-x\": \"\\f6d3\",\n \"xbox\": \"\\f6d4\",\n \"ethernet\": \"\\f6d5\",\n \"hdmi-fill\": \"\\f6d6\",\n \"hdmi\": \"\\f6d7\",\n \"usb-c-fill\": \"\\f6d8\",\n \"usb-c\": \"\\f6d9\",\n \"usb-fill\": \"\\f6da\",\n \"usb-plug-fill\": \"\\f6db\",\n \"usb-plug\": \"\\f6dc\",\n \"usb-symbol\": \"\\f6dd\",\n \"usb\": \"\\f6de\",\n \"boombox-fill\": \"\\f6df\",\n \"displayport\": \"\\f6e1\",\n \"gpu-card\": \"\\f6e2\",\n \"memory\": \"\\f6e3\",\n \"modem-fill\": \"\\f6e4\",\n \"modem\": \"\\f6e5\",\n \"motherboard-fill\": \"\\f6e6\",\n \"motherboard\": \"\\f6e7\",\n \"optical-audio-fill\": \"\\f6e8\",\n \"optical-audio\": \"\\f6e9\",\n \"pci-card\": \"\\f6ea\",\n \"router-fill\": \"\\f6eb\",\n \"router\": \"\\f6ec\",\n \"thunderbolt-fill\": \"\\f6ef\",\n \"thunderbolt\": \"\\f6f0\",\n \"usb-drive-fill\": \"\\f6f1\",\n \"usb-drive\": \"\\f6f2\",\n \"usb-micro-fill\": \"\\f6f3\",\n \"usb-micro\": \"\\f6f4\",\n \"usb-mini-fill\": \"\\f6f5\",\n \"usb-mini\": \"\\f6f6\",\n \"cloud-haze2\": \"\\f6f7\",\n \"device-hdd-fill\": \"\\f6f8\",\n \"device-hdd\": \"\\f6f9\",\n \"device-ssd-fill\": \"\\f6fa\",\n \"device-ssd\": \"\\f6fb\",\n \"displayport-fill\": \"\\f6fc\",\n \"mortarboard-fill\": \"\\f6fd\",\n \"mortarboard\": \"\\f6fe\",\n \"terminal-x\": \"\\f6ff\",\n \"arrow-through-heart-fill\": \"\\f700\",\n \"arrow-through-heart\": \"\\f701\",\n \"badge-sd-fill\": \"\\f702\",\n \"badge-sd\": \"\\f703\",\n \"bag-heart-fill\": \"\\f704\",\n \"bag-heart\": \"\\f705\",\n \"balloon-fill\": \"\\f706\",\n \"balloon-heart-fill\": \"\\f707\",\n \"balloon-heart\": \"\\f708\",\n \"balloon\": \"\\f709\",\n \"box2-fill\": \"\\f70a\",\n \"box2-heart-fill\": \"\\f70b\",\n \"box2-heart\": \"\\f70c\",\n \"box2\": \"\\f70d\",\n \"braces-asterisk\": \"\\f70e\",\n \"calendar-heart-fill\": \"\\f70f\",\n \"calendar-heart\": \"\\f710\",\n \"calendar2-heart-fill\": \"\\f711\",\n \"calendar2-heart\": \"\\f712\",\n \"chat-heart-fill\": \"\\f713\",\n \"chat-heart\": \"\\f714\",\n \"chat-left-heart-fill\": \"\\f715\",\n \"chat-left-heart\": \"\\f716\",\n \"chat-right-heart-fill\": \"\\f717\",\n \"chat-right-heart\": \"\\f718\",\n \"chat-square-heart-fill\": \"\\f719\",\n \"chat-square-heart\": \"\\f71a\",\n \"clipboard-check-fill\": \"\\f71b\",\n \"clipboard-data-fill\": \"\\f71c\",\n \"clipboard-fill\": \"\\f71d\",\n \"clipboard-heart-fill\": \"\\f71e\",\n \"clipboard-heart\": \"\\f71f\",\n \"clipboard-minus-fill\": \"\\f720\",\n \"clipboard-plus-fill\": \"\\f721\",\n \"clipboard-pulse\": \"\\f722\",\n \"clipboard-x-fill\": \"\\f723\",\n \"clipboard2-check-fill\": \"\\f724\",\n \"clipboard2-check\": \"\\f725\",\n \"clipboard2-data-fill\": \"\\f726\",\n \"clipboard2-data\": \"\\f727\",\n \"clipboard2-fill\": \"\\f728\",\n \"clipboard2-heart-fill\": \"\\f729\",\n \"clipboard2-heart\": \"\\f72a\",\n \"clipboard2-minus-fill\": \"\\f72b\",\n \"clipboard2-minus\": \"\\f72c\",\n \"clipboard2-plus-fill\": \"\\f72d\",\n \"clipboard2-plus\": \"\\f72e\",\n \"clipboard2-pulse-fill\": \"\\f72f\",\n \"clipboard2-pulse\": \"\\f730\",\n \"clipboard2-x-fill\": \"\\f731\",\n \"clipboard2-x\": \"\\f732\",\n \"clipboard2\": \"\\f733\",\n \"emoji-kiss-fill\": \"\\f734\",\n \"emoji-kiss\": \"\\f735\",\n \"envelope-heart-fill\": \"\\f736\",\n \"envelope-heart\": \"\\f737\",\n \"envelope-open-heart-fill\": \"\\f738\",\n \"envelope-open-heart\": \"\\f739\",\n \"envelope-paper-fill\": \"\\f73a\",\n \"envelope-paper-heart-fill\": \"\\f73b\",\n \"envelope-paper-heart\": \"\\f73c\",\n \"envelope-paper\": \"\\f73d\",\n \"filetype-aac\": \"\\f73e\",\n \"filetype-ai\": \"\\f73f\",\n \"filetype-bmp\": \"\\f740\",\n \"filetype-cs\": \"\\f741\",\n \"filetype-css\": \"\\f742\",\n \"filetype-csv\": \"\\f743\",\n \"filetype-doc\": \"\\f744\",\n \"filetype-docx\": \"\\f745\",\n \"filetype-exe\": \"\\f746\",\n \"filetype-gif\": \"\\f747\",\n \"filetype-heic\": \"\\f748\",\n \"filetype-html\": \"\\f749\",\n \"filetype-java\": \"\\f74a\",\n \"filetype-jpg\": \"\\f74b\",\n \"filetype-js\": \"\\f74c\",\n \"filetype-jsx\": \"\\f74d\",\n \"filetype-key\": \"\\f74e\",\n \"filetype-m4p\": \"\\f74f\",\n \"filetype-md\": \"\\f750\",\n \"filetype-mdx\": \"\\f751\",\n \"filetype-mov\": \"\\f752\",\n \"filetype-mp3\": \"\\f753\",\n \"filetype-mp4\": \"\\f754\",\n \"filetype-otf\": \"\\f755\",\n \"filetype-pdf\": \"\\f756\",\n \"filetype-php\": \"\\f757\",\n \"filetype-png\": \"\\f758\",\n \"filetype-ppt\": \"\\f75a\",\n \"filetype-psd\": \"\\f75b\",\n \"filetype-py\": \"\\f75c\",\n \"filetype-raw\": \"\\f75d\",\n \"filetype-rb\": \"\\f75e\",\n \"filetype-sass\": \"\\f75f\",\n \"filetype-scss\": \"\\f760\",\n \"filetype-sh\": \"\\f761\",\n \"filetype-svg\": \"\\f762\",\n \"filetype-tiff\": \"\\f763\",\n \"filetype-tsx\": \"\\f764\",\n \"filetype-ttf\": \"\\f765\",\n \"filetype-txt\": \"\\f766\",\n \"filetype-wav\": \"\\f767\",\n \"filetype-woff\": \"\\f768\",\n \"filetype-xls\": \"\\f76a\",\n \"filetype-xml\": \"\\f76b\",\n \"filetype-yml\": \"\\f76c\",\n \"heart-arrow\": \"\\f76d\",\n \"heart-pulse-fill\": \"\\f76e\",\n \"heart-pulse\": \"\\f76f\",\n \"heartbreak-fill\": \"\\f770\",\n \"heartbreak\": \"\\f771\",\n \"hearts\": \"\\f772\",\n \"hospital-fill\": \"\\f773\",\n \"hospital\": \"\\f774\",\n \"house-heart-fill\": \"\\f775\",\n \"house-heart\": \"\\f776\",\n \"incognito\": \"\\f777\",\n \"magnet-fill\": \"\\f778\",\n \"magnet\": \"\\f779\",\n \"person-heart\": \"\\f77a\",\n \"person-hearts\": \"\\f77b\",\n \"phone-flip\": \"\\f77c\",\n \"plugin\": \"\\f77d\",\n \"postage-fill\": \"\\f77e\",\n \"postage-heart-fill\": \"\\f77f\",\n \"postage-heart\": \"\\f780\",\n \"postage\": \"\\f781\",\n \"postcard-fill\": \"\\f782\",\n \"postcard-heart-fill\": \"\\f783\",\n \"postcard-heart\": \"\\f784\",\n \"postcard\": \"\\f785\",\n \"search-heart-fill\": \"\\f786\",\n \"search-heart\": \"\\f787\",\n \"sliders2-vertical\": \"\\f788\",\n \"sliders2\": \"\\f789\",\n \"trash3-fill\": \"\\f78a\",\n \"trash3\": \"\\f78b\",\n \"valentine\": \"\\f78c\",\n \"valentine2\": \"\\f78d\",\n \"wrench-adjustable-circle-fill\": \"\\f78e\",\n \"wrench-adjustable-circle\": \"\\f78f\",\n \"wrench-adjustable\": \"\\f790\",\n \"filetype-json\": \"\\f791\",\n \"filetype-pptx\": \"\\f792\",\n \"filetype-xlsx\": \"\\f793\",\n \"1-circle-fill\": \"\\f796\",\n \"1-circle\": \"\\f797\",\n \"1-square-fill\": \"\\f798\",\n \"1-square\": \"\\f799\",\n \"2-circle-fill\": \"\\f79c\",\n \"2-circle\": \"\\f79d\",\n \"2-square-fill\": \"\\f79e\",\n \"2-square\": \"\\f79f\",\n \"3-circle-fill\": \"\\f7a2\",\n \"3-circle\": \"\\f7a3\",\n \"3-square-fill\": \"\\f7a4\",\n \"3-square\": \"\\f7a5\",\n \"4-circle-fill\": \"\\f7a8\",\n \"4-circle\": \"\\f7a9\",\n \"4-square-fill\": \"\\f7aa\",\n \"4-square\": \"\\f7ab\",\n \"5-circle-fill\": \"\\f7ae\",\n \"5-circle\": \"\\f7af\",\n \"5-square-fill\": \"\\f7b0\",\n \"5-square\": \"\\f7b1\",\n \"6-circle-fill\": \"\\f7b4\",\n \"6-circle\": \"\\f7b5\",\n \"6-square-fill\": \"\\f7b6\",\n \"6-square\": \"\\f7b7\",\n \"7-circle-fill\": \"\\f7ba\",\n \"7-circle\": \"\\f7bb\",\n \"7-square-fill\": \"\\f7bc\",\n \"7-square\": \"\\f7bd\",\n \"8-circle-fill\": \"\\f7c0\",\n \"8-circle\": \"\\f7c1\",\n \"8-square-fill\": \"\\f7c2\",\n \"8-square\": \"\\f7c3\",\n \"9-circle-fill\": \"\\f7c6\",\n \"9-circle\": \"\\f7c7\",\n \"9-square-fill\": \"\\f7c8\",\n \"9-square\": \"\\f7c9\",\n \"airplane-engines-fill\": \"\\f7ca\",\n \"airplane-engines\": \"\\f7cb\",\n \"airplane-fill\": \"\\f7cc\",\n \"airplane\": \"\\f7cd\",\n \"alexa\": \"\\f7ce\",\n \"alipay\": \"\\f7cf\",\n \"android\": \"\\f7d0\",\n \"android2\": \"\\f7d1\",\n \"box-fill\": \"\\f7d2\",\n \"box-seam-fill\": \"\\f7d3\",\n \"browser-chrome\": \"\\f7d4\",\n \"browser-edge\": \"\\f7d5\",\n \"browser-firefox\": \"\\f7d6\",\n \"browser-safari\": \"\\f7d7\",\n \"c-circle-fill\": \"\\f7da\",\n \"c-circle\": \"\\f7db\",\n \"c-square-fill\": \"\\f7dc\",\n \"c-square\": \"\\f7dd\",\n \"capsule-pill\": \"\\f7de\",\n \"capsule\": \"\\f7df\",\n \"car-front-fill\": \"\\f7e0\",\n \"car-front\": \"\\f7e1\",\n \"cassette-fill\": \"\\f7e2\",\n \"cassette\": \"\\f7e3\",\n \"cc-circle-fill\": \"\\f7e6\",\n \"cc-circle\": \"\\f7e7\",\n \"cc-square-fill\": \"\\f7e8\",\n \"cc-square\": \"\\f7e9\",\n \"cup-hot-fill\": \"\\f7ea\",\n \"cup-hot\": \"\\f7eb\",\n \"currency-rupee\": \"\\f7ec\",\n \"dropbox\": \"\\f7ed\",\n \"escape\": \"\\f7ee\",\n \"fast-forward-btn-fill\": \"\\f7ef\",\n \"fast-forward-btn\": \"\\f7f0\",\n \"fast-forward-circle-fill\": \"\\f7f1\",\n \"fast-forward-circle\": \"\\f7f2\",\n \"fast-forward-fill\": \"\\f7f3\",\n \"fast-forward\": \"\\f7f4\",\n \"filetype-sql\": \"\\f7f5\",\n \"fire\": \"\\f7f6\",\n \"google-play\": \"\\f7f7\",\n \"h-circle-fill\": \"\\f7fa\",\n \"h-circle\": \"\\f7fb\",\n \"h-square-fill\": \"\\f7fc\",\n \"h-square\": \"\\f7fd\",\n \"indent\": \"\\f7fe\",\n \"lungs-fill\": \"\\f7ff\",\n \"lungs\": \"\\f800\",\n \"microsoft-teams\": \"\\f801\",\n \"p-circle-fill\": \"\\f804\",\n \"p-circle\": \"\\f805\",\n \"p-square-fill\": \"\\f806\",\n \"p-square\": \"\\f807\",\n \"pass-fill\": \"\\f808\",\n \"pass\": \"\\f809\",\n \"prescription\": \"\\f80a\",\n \"prescription2\": \"\\f80b\",\n \"r-circle-fill\": \"\\f80e\",\n \"r-circle\": \"\\f80f\",\n \"r-square-fill\": \"\\f810\",\n \"r-square\": \"\\f811\",\n \"repeat-1\": \"\\f812\",\n \"repeat\": \"\\f813\",\n \"rewind-btn-fill\": \"\\f814\",\n \"rewind-btn\": \"\\f815\",\n \"rewind-circle-fill\": \"\\f816\",\n \"rewind-circle\": \"\\f817\",\n \"rewind-fill\": \"\\f818\",\n \"rewind\": \"\\f819\",\n \"train-freight-front-fill\": \"\\f81a\",\n \"train-freight-front\": \"\\f81b\",\n \"train-front-fill\": \"\\f81c\",\n \"train-front\": \"\\f81d\",\n \"train-lightrail-front-fill\": \"\\f81e\",\n \"train-lightrail-front\": \"\\f81f\",\n \"truck-front-fill\": \"\\f820\",\n \"truck-front\": \"\\f821\",\n \"ubuntu\": \"\\f822\",\n \"unindent\": \"\\f823\",\n \"unity\": \"\\f824\",\n \"universal-access-circle\": \"\\f825\",\n \"universal-access\": \"\\f826\",\n \"virus\": \"\\f827\",\n \"virus2\": \"\\f828\",\n \"wechat\": \"\\f829\",\n \"yelp\": \"\\f82a\",\n \"sign-stop-fill\": \"\\f82b\",\n \"sign-stop-lights-fill\": \"\\f82c\",\n \"sign-stop-lights\": \"\\f82d\",\n \"sign-stop\": \"\\f82e\",\n \"sign-turn-left-fill\": \"\\f82f\",\n \"sign-turn-left\": \"\\f830\",\n \"sign-turn-right-fill\": \"\\f831\",\n \"sign-turn-right\": \"\\f832\",\n \"sign-turn-slight-left-fill\": \"\\f833\",\n \"sign-turn-slight-left\": \"\\f834\",\n \"sign-turn-slight-right-fill\": \"\\f835\",\n \"sign-turn-slight-right\": \"\\f836\",\n \"sign-yield-fill\": \"\\f837\",\n \"sign-yield\": \"\\f838\",\n \"ev-station-fill\": \"\\f839\",\n \"ev-station\": \"\\f83a\",\n \"fuel-pump-diesel-fill\": \"\\f83b\",\n \"fuel-pump-diesel\": \"\\f83c\",\n \"fuel-pump-fill\": \"\\f83d\",\n \"fuel-pump\": \"\\f83e\",\n \"0-circle-fill\": \"\\f83f\",\n \"0-circle\": \"\\f840\",\n \"0-square-fill\": \"\\f841\",\n \"0-square\": \"\\f842\",\n \"rocket-fill\": \"\\f843\",\n \"rocket-takeoff-fill\": \"\\f844\",\n \"rocket-takeoff\": \"\\f845\",\n \"rocket\": \"\\f846\",\n \"stripe\": \"\\f847\",\n \"subscript\": \"\\f848\",\n \"superscript\": \"\\f849\",\n \"trello\": \"\\f84a\",\n \"envelope-at-fill\": \"\\f84b\",\n \"envelope-at\": \"\\f84c\",\n \"regex\": \"\\f84d\",\n \"text-wrap\": \"\\f84e\",\n \"sign-dead-end-fill\": \"\\f84f\",\n \"sign-dead-end\": \"\\f850\",\n \"sign-do-not-enter-fill\": \"\\f851\",\n \"sign-do-not-enter\": \"\\f852\",\n \"sign-intersection-fill\": \"\\f853\",\n \"sign-intersection-side-fill\": \"\\f854\",\n \"sign-intersection-side\": \"\\f855\",\n \"sign-intersection-t-fill\": \"\\f856\",\n \"sign-intersection-t\": \"\\f857\",\n \"sign-intersection-y-fill\": \"\\f858\",\n \"sign-intersection-y\": \"\\f859\",\n \"sign-intersection\": \"\\f85a\",\n \"sign-merge-left-fill\": \"\\f85b\",\n \"sign-merge-left\": \"\\f85c\",\n \"sign-merge-right-fill\": \"\\f85d\",\n \"sign-merge-right\": \"\\f85e\",\n \"sign-no-left-turn-fill\": \"\\f85f\",\n \"sign-no-left-turn\": \"\\f860\",\n \"sign-no-parking-fill\": \"\\f861\",\n \"sign-no-parking\": \"\\f862\",\n \"sign-no-right-turn-fill\": \"\\f863\",\n \"sign-no-right-turn\": \"\\f864\",\n \"sign-railroad-fill\": \"\\f865\",\n \"sign-railroad\": \"\\f866\",\n \"building-add\": \"\\f867\",\n \"building-check\": \"\\f868\",\n \"building-dash\": \"\\f869\",\n \"building-down\": \"\\f86a\",\n \"building-exclamation\": \"\\f86b\",\n \"building-fill-add\": \"\\f86c\",\n \"building-fill-check\": \"\\f86d\",\n \"building-fill-dash\": \"\\f86e\",\n \"building-fill-down\": \"\\f86f\",\n \"building-fill-exclamation\": \"\\f870\",\n \"building-fill-gear\": \"\\f871\",\n \"building-fill-lock\": \"\\f872\",\n \"building-fill-slash\": \"\\f873\",\n \"building-fill-up\": \"\\f874\",\n \"building-fill-x\": \"\\f875\",\n \"building-fill\": \"\\f876\",\n \"building-gear\": \"\\f877\",\n \"building-lock\": \"\\f878\",\n \"building-slash\": \"\\f879\",\n \"building-up\": \"\\f87a\",\n \"building-x\": \"\\f87b\",\n \"buildings-fill\": \"\\f87c\",\n \"buildings\": \"\\f87d\",\n \"bus-front-fill\": \"\\f87e\",\n \"bus-front\": \"\\f87f\",\n \"ev-front-fill\": \"\\f880\",\n \"ev-front\": \"\\f881\",\n \"globe-americas\": \"\\f882\",\n \"globe-asia-australia\": \"\\f883\",\n \"globe-central-south-asia\": \"\\f884\",\n \"globe-europe-africa\": \"\\f885\",\n \"house-add-fill\": \"\\f886\",\n \"house-add\": \"\\f887\",\n \"house-check-fill\": \"\\f888\",\n \"house-check\": \"\\f889\",\n \"house-dash-fill\": \"\\f88a\",\n \"house-dash\": \"\\f88b\",\n \"house-down-fill\": \"\\f88c\",\n \"house-down\": \"\\f88d\",\n \"house-exclamation-fill\": \"\\f88e\",\n \"house-exclamation\": \"\\f88f\",\n \"house-gear-fill\": \"\\f890\",\n \"house-gear\": \"\\f891\",\n \"house-lock-fill\": \"\\f892\",\n \"house-lock\": \"\\f893\",\n \"house-slash-fill\": \"\\f894\",\n \"house-slash\": \"\\f895\",\n \"house-up-fill\": \"\\f896\",\n \"house-up\": \"\\f897\",\n \"house-x-fill\": \"\\f898\",\n \"house-x\": \"\\f899\",\n \"person-add\": \"\\f89a\",\n \"person-down\": \"\\f89b\",\n \"person-exclamation\": \"\\f89c\",\n \"person-fill-add\": \"\\f89d\",\n \"person-fill-check\": \"\\f89e\",\n \"person-fill-dash\": \"\\f89f\",\n \"person-fill-down\": \"\\f8a0\",\n \"person-fill-exclamation\": \"\\f8a1\",\n \"person-fill-gear\": \"\\f8a2\",\n \"person-fill-lock\": \"\\f8a3\",\n \"person-fill-slash\": \"\\f8a4\",\n \"person-fill-up\": \"\\f8a5\",\n \"person-fill-x\": \"\\f8a6\",\n \"person-gear\": \"\\f8a7\",\n \"person-lock\": \"\\f8a8\",\n \"person-slash\": \"\\f8a9\",\n \"person-up\": \"\\f8aa\",\n \"scooter\": \"\\f8ab\",\n \"taxi-front-fill\": \"\\f8ac\",\n \"taxi-front\": \"\\f8ad\",\n \"amd\": \"\\f8ae\",\n \"database-add\": \"\\f8af\",\n \"database-check\": \"\\f8b0\",\n \"database-dash\": \"\\f8b1\",\n \"database-down\": \"\\f8b2\",\n \"database-exclamation\": \"\\f8b3\",\n \"database-fill-add\": \"\\f8b4\",\n \"database-fill-check\": \"\\f8b5\",\n \"database-fill-dash\": \"\\f8b6\",\n \"database-fill-down\": \"\\f8b7\",\n \"database-fill-exclamation\": \"\\f8b8\",\n \"database-fill-gear\": \"\\f8b9\",\n \"database-fill-lock\": \"\\f8ba\",\n \"database-fill-slash\": \"\\f8bb\",\n \"database-fill-up\": \"\\f8bc\",\n \"database-fill-x\": \"\\f8bd\",\n \"database-fill\": \"\\f8be\",\n \"database-gear\": \"\\f8bf\",\n \"database-lock\": \"\\f8c0\",\n \"database-slash\": \"\\f8c1\",\n \"database-up\": \"\\f8c2\",\n \"database-x\": \"\\f8c3\",\n \"database\": \"\\f8c4\",\n \"houses-fill\": \"\\f8c5\",\n \"houses\": \"\\f8c6\",\n \"nvidia\": \"\\f8c7\",\n \"person-vcard-fill\": \"\\f8c8\",\n \"person-vcard\": \"\\f8c9\",\n \"sina-weibo\": \"\\f8ca\",\n \"tencent-qq\": \"\\f8cb\",\n \"wikipedia\": \"\\f8cc\",\n \"alphabet-uppercase\": \"\\f2a5\",\n \"alphabet\": \"\\f68a\",\n \"amazon\": \"\\f68d\",\n \"arrows-collapse-vertical\": \"\\f690\",\n \"arrows-expand-vertical\": \"\\f695\",\n \"arrows-vertical\": \"\\f698\",\n \"arrows\": \"\\f6a2\",\n \"ban-fill\": \"\\f6a3\",\n \"ban\": \"\\f6b6\",\n \"bing\": \"\\f6c2\",\n \"cake\": \"\\f6e0\",\n \"cake2\": \"\\f6ed\",\n \"cookie\": \"\\f6ee\",\n \"copy\": \"\\f759\",\n \"crosshair\": \"\\f769\",\n \"crosshair2\": \"\\f794\",\n \"emoji-astonished-fill\": \"\\f795\",\n \"emoji-astonished\": \"\\f79a\",\n \"emoji-grimace-fill\": \"\\f79b\",\n \"emoji-grimace\": \"\\f7a0\",\n \"emoji-grin-fill\": \"\\f7a1\",\n \"emoji-grin\": \"\\f7a6\",\n \"emoji-surprise-fill\": \"\\f7a7\",\n \"emoji-surprise\": \"\\f7ac\",\n \"emoji-tear-fill\": \"\\f7ad\",\n \"emoji-tear\": \"\\f7b2\",\n \"envelope-arrow-down-fill\": \"\\f7b3\",\n \"envelope-arrow-down\": \"\\f7b8\",\n \"envelope-arrow-up-fill\": \"\\f7b9\",\n \"envelope-arrow-up\": \"\\f7be\",\n \"feather\": \"\\f7bf\",\n \"feather2\": \"\\f7c4\",\n \"floppy-fill\": \"\\f7c5\",\n \"floppy\": \"\\f7d8\",\n \"floppy2-fill\": \"\\f7d9\",\n \"floppy2\": \"\\f7e4\",\n \"gitlab\": \"\\f7e5\",\n \"highlighter\": \"\\f7f8\",\n \"marker-tip\": \"\\f802\",\n \"nvme-fill\": \"\\f803\",\n \"nvme\": \"\\f80c\",\n \"opencollective\": \"\\f80d\",\n \"pci-card-network\": \"\\f8cd\",\n \"pci-card-sound\": \"\\f8ce\",\n \"radar\": \"\\f8cf\",\n \"send-arrow-down-fill\": \"\\f8d0\",\n \"send-arrow-down\": \"\\f8d1\",\n \"send-arrow-up-fill\": \"\\f8d2\",\n \"send-arrow-up\": \"\\f8d3\",\n \"sim-slash-fill\": \"\\f8d4\",\n \"sim-slash\": \"\\f8d5\",\n \"sourceforge\": \"\\f8d6\",\n \"substack\": \"\\f8d7\",\n \"threads-fill\": \"\\f8d8\",\n \"threads\": \"\\f8d9\",\n \"transparency\": \"\\f8da\",\n \"twitter-x\": \"\\f8db\",\n \"type-h4\": \"\\f8dc\",\n \"type-h5\": \"\\f8dd\",\n \"type-h6\": \"\\f8de\",\n \"backpack-fill\": \"\\f8df\",\n \"backpack\": \"\\f8e0\",\n \"backpack2-fill\": \"\\f8e1\",\n \"backpack2\": \"\\f8e2\",\n \"backpack3-fill\": \"\\f8e3\",\n \"backpack3\": \"\\f8e4\",\n \"backpack4-fill\": \"\\f8e5\",\n \"backpack4\": \"\\f8e6\",\n \"brilliance\": \"\\f8e7\",\n \"cake-fill\": \"\\f8e8\",\n \"cake2-fill\": \"\\f8e9\",\n \"duffle-fill\": \"\\f8ea\",\n \"duffle\": \"\\f8eb\",\n \"exposure\": \"\\f8ec\",\n \"gender-neuter\": \"\\f8ed\",\n \"highlights\": \"\\f8ee\",\n \"luggage-fill\": \"\\f8ef\",\n \"luggage\": \"\\f8f0\",\n \"mailbox-flag\": \"\\f8f1\",\n \"mailbox2-flag\": \"\\f8f2\",\n \"noise-reduction\": \"\\f8f3\",\n \"passport-fill\": \"\\f8f4\",\n \"passport\": \"\\f8f5\",\n \"person-arms-up\": \"\\f8f6\",\n \"person-raised-hand\": \"\\f8f7\",\n \"person-standing-dress\": \"\\f8f8\",\n \"person-standing\": \"\\f8f9\",\n \"person-walking\": \"\\f8fa\",\n \"person-wheelchair\": \"\\f8fb\",\n \"shadows\": \"\\f8fc\",\n \"suitcase-fill\": \"\\f8fd\",\n \"suitcase-lg-fill\": \"\\f8fe\",\n \"suitcase-lg\": \"\\f8ff\",\n \"suitcase\": \"\\f900\",\n \"suitcase2-fill\": \"\\f901\",\n \"suitcase2\": \"\\f902\",\n \"vignette\": \"\\f903\",\n);\n\n@each $icon, $codepoint in $bootstrap-icons-map {\n .bi-#{$icon}::before { content: $codepoint; }\n}\n", "/**\n * Licensed to the .NET Foundation under one or more agreements.\n * The .NET Foundation licenses this file to you under the MIT license.\n */\n\n$enable-important-utilities: false;\n$container-max-widths: (\n xxl: 1768px\n) !default;\n\n@import \"mixins\";\n@import \"bootstrap/scss/bootstrap\";\n@import \"highlight\";\n@import \"layout\";\n@import \"nav\";\n@import \"toc\";\n@import \"markdown\";\n@import \"search\";\n@import \"dotnet\";\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.xref,\n.text-break {\n word-wrap: break-word;\n word-break: break-word;\n}\n\n.divider {\n margin: 0 5px;\n color: #ccc;\n}\n\narticle {\n // For REST API view source link\n span.small.pull-right {\n float: right;\n }\n\n img {\n max-width: 100%;\n height: auto;\n }\n}\n\n.codewrapper {\n position: relative;\n}\n\n.sample-response .response-content {\n max-height: 200px;\n}\n\n@media (width <= 768px) {\n #mobile-indicator {\n display: block;\n }\n\n .mobile-hide {\n display: none;\n }\n\n /* workaround for #hashtag url is no longer needed */\n h1::before,\n h2::before,\n h3::before,\n h4::before {\n content: \"\";\n display: none;\n }\n}\n\n@media print {\n @page {\n margin: .4in;\n }\n}\n\n.pdftoc {\n ul {\n list-style: none;\n }\n\n a {\n display: flex;\n text-decoration: none;\n color: var(--bs-body-color);\n\n .spacer {\n flex: 1;\n border-bottom: 1px dashed var(--bs-body-color);\n margin: .4em;\n }\n }\n}\n\n@view-transition {\n navigation: auto;\n}\n\n@media (prefers-reduced-motion) {\n @view-transition {\n navigation: none;\n }\n}\n", "/**\n * Licensed to the .NET Foundation under one or more agreements.\n * The .NET Foundation licenses this file to you under the MIT license.\n */\n\n@mixin adjust-icon {\n font-family: bootstrap-icons;\n position: relative;\n margin-right: 0.5em;\n top: 0.2em;\n font-size: 1.25em;\n font-weight: normal;\n }\n\n @mixin underline-on-hover {\n text-decoration: none;\n\n &:hover, &:focus {\n text-decoration: underline;\n }\n }\n", "@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n", ":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n", "// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n", "// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n", "// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`